infomSB
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Kmich Просто так это не сделать, необходимо писать свой обработчик прорисовки Caption колонок, я делал так: procedure TfrmMain.cxGrid1TableView1CustomDrawColumnHeader( Sender: TcxGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridColumnHeaderViewInfo; var ADone: Boolean); var Size: TSize; OldFont: TLogFont; LogFont: TLogFont; ARect: TRect; I, RCount, Offset, StrLen, YOut: Integer; AClipRegion: TcxRegion; PartText, RestText:String; begin with AViewInfo do begin GetObject(ACanvas.Font.Handle, SizeOf(OldFont), @OldFont); LogFont := OldFont; with LogFont do begin lfEscapement := 900; lfOrientation := lfEscapement; lfOutPrecision := OUT_TT_ONLY_PRECIS; end; ACanvas.Font.Handle := CreateFontIndirect(LogFont); GetTextExtentPoint32(ACanvas.Handle, PChar(Text), Length(Text), Size); ARect := Bounds; PartText := ''; RestText := Text; LookAndFeelPainter.DrawHeader(ACanvas, Bounds, TextAreaBounds, Neighbors, Borders, cxbsNormal, taCenter, vaCenter, False, False, '', ACanvas.Font, clNone, Params.Color); with TextAreaBounds do if Left < Right then begin RCount := (Size.cx div (Bottom - Top - 2))+1; RestText := WrapText(RestText, '@',[' '], Length(RestText) div RCount); Offset := (Right - Left - Size.cy*RCount) div 2; for I := 1 to RCount do // Iterate begin StrLen := pos('@', RestText); if StrLen < 1 then StrLen := Length(RestText); PartText := StringReplace(copy(RestText, 1, StrLen), '@', '', [rfReplaceAll]); RestText := copy(RestText, StrLen+1, Length(RestText)-StrLen); GetTextExtentPoint32(ACanvas.Handle, PChar(PartText), Length(PartText), Size); if Size.cx < Bottom - Top - 2 then YOut := Bottom - ((Bottom - Top - 2 - Size.cx) div 2) else YOut := Bottom - 1; ACanvas.Canvas.TextOut((Left+Offset+(I-1)*Size.cy), (YOut), PartText) end; // for end; AClipRegion := ACanvas.GetClipRegion; try for i := 0 to AreaViewInfoCount - 1 do AreaViewInfos[i].Paint; finally ACanvas.SetClipRegion(AClipRegion, roSet); end; ADone := True; AViewInfo.Column.BestFitMaxWidth := (RCount+1)*Size.cy; end; end; Взято кстати с этого топика ) |