6

OnDrawCell文字列グリッドをオーバーライドしています。TColor特定の状況で、システムが描画を行うときに選択した行に使用される法線を使用したい(いいえOnDrawCell)。

それはどの色ですか?clXXX ?

4

1 に答える 1

11

clHighlightDelphi 2010 より前の色を使用できます。

Delphi 2010 では、TStringGrid、TDrawGrid、および TDBGrid コンポーネントにDrawingStyleプロパティが追加され、この値(gdsClassic、gdsGradient、gdsThemed)に応じて、この方法で色を計算する必要があります。

1.gdsClassicの使用の ためclHighlight

2.for gdsGradient メソッドGradientFillCanvasを使用します

GradientFillCanvas(Canvas, GetShadowColor(clHighlight, 45), GetShadowColor(clHighlight, 10), LRect, gdVertical);

3.for gdsThemedDrawElementのメソッドを 呼び出しますTCustomStyleServices

StyleServices.DrawElement(Canvas.Handle, StyleServices.GetElementDetails(tgCellSelected), LRect, ARect);

vcl スタイルが導入された Delphi XE2 (および XE3) では、上記と同じものを使用する必要がありますが、現在のスタイルが「カスタム スタイル」(vcl スタイル) であるかどうかを確認する必要があります。

1. for 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メソッドの実装を試してください。

于 2012-10-25T02:12:50.423 に答える