Что такое обычный colo (u)r выбранной строки stringgrid?
я перевожу OnDrawCell
для строк сетки. В определенных обстоятельствах, я хочу использовать обычный TColor
, который используется для выбранной строки, когда система выполняет чертеж (нет OnDrawCell
).
какой colo (u)r это? clXXX ?
1 ответов
до Delphi 2010 Вы можете использовать clHighlight
цвета.
в Delphi 2010 компоненты TStringGrid, TDrawGrid и TDBGrid теперь имеют DrawingStyle
свойство и в зависимости от этого значения (gdsClassic, gdsGradient, gdsThemed) вы должны рассчитать цвет на этом пути.
1.для gdsClassic использовать clHighlight
;
2.для gdsGradient использовать GradientFillCanvas
метод
GradientFillCanvas(Canvas, GetShadowColor(clHighlight, 45), GetShadowColor(clHighlight, 10), LRect, gdVertical);
3.для gdsThemed вызов DrawElement
метод TCustomStyleServices
StyleServices.DrawElement(Canvas.Handle, StyleServices.GetElementDetails(tgCellSelected), LRect, ARect);
в Delphi XE2 (и XE3) с введением стилей vcl вы должны использовать то же самое, что и выше, но проверять, является ли текущий стиль "пользовательским стилем" (стиль vcl)
1.для gdsGradient используйте метод GradientFillCanvas, вычисляющий цвета градиента на этом пути
StyleServices.GetElementColor(StyleServices.GetElementDetails(tgGradientCellRowSelectedRight), ecGradientColor1, StartColor); //StartColor is a TColor variable
StyleServices.GetElementColor(StyleServices.GetElementDetails(tgGradientCellRowSelectedRight), ecGradientColor2, EndColor);//EndColor is a TColor variable
2.для gdsClassic
StyleServices.GetElementColor(StyleServices.GetElementDetails(tgClassicCellRowSelectedRight), ecFillColor, LColor); //LColor is a TColor variable
если вы хотите проверить образец того, как VCL рисует выбранную (выделенную) ячейку/строку, попробуйте реализовать TCustomGrid.DrawCellHighlight
метод.