samusev
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Простите за назойливость - есть еще задача. Проект ДевЭкс сентябрьские+BSD2006 Грид содержит большое кол-во колонок с "полнозвучными" заголовками которые просто просятся нарисоваться вертикально. Нашел на офф сайте Девок такой код procedure TfmMainForm.cxDailyOpGridDBTableView1_Колонка_CustomDrawHeader( Sender: TcxGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridColumnHeaderViewInfo; var ADone: Boolean); var Size: TSize; OldFont, LogFont: TLogFont; ARect: TRect; AFilterRect: TRect; I: Integer; AButtonState: TcxButtonState; 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; if Size.cx > ARect.Bottom - ARect.Top then begin ACanvas.Font.Handle := CreateFontIndirect(OldFont); Exit; end; AButtonState := cxbsNormal; with TcxGridColumnHeaderViewInfoAccess(AviewInfo) do for I := 0 to AreaViewInfoCount - 1 do if AreaViewInfos[I] is TcxGridColumnHeaderFilterButtonViewInfo then begin AFilterRect := TcxGridColumnHeaderFilterButtonViewInfo(AreaViewInfos[I]).Bounds; AButtonState := TcxGridColumnHeaderFilterButtonViewInfo(AreaViewInfos[I]).ButtonState; Break; end; Sender.Painter.LookAndFeelPainter.DrawHeader(ACanvas, Bounds, ARect, Neighbors, Borders, cxbsNormal, taCenter, TcxAlignmentVert(vaCenter), False, False, '', ACanvas.Font, clNone, Color); with ARect do begin Left := (Left + AFilterRect.Left - Size.cy) div 2; Right := Left + Size.cy; Bottom := (Bottom + Top + Size.cx) div 2; // << center vertical alignment Top := Bottom - Size.cx; end; ACanvas.Canvas.TextRect(ARect, ARect.Left, ARect.Bottom, Column.Caption); Sender.Painter.LookAndFeelPainter.DrawFilterDropDownButton(ACanvas, AFilterRect, AButtonState, AViewInfo.Column.Filtered); ADone := True; end; end; Работает сносно , НО только для колоной у которых есть кнопка фильтрации. С другими ни как. Подскажите решение... |