OnDrawCell イベントを使用せずに Delphi の TStringGrid に特定のセルを描画する方法はありますか。たとえば、ボタンをクリックすると、指定したセルがその内容に応じて描画されます。
2263 次
3 に答える
10
ペイントを永続的に保つために、これを行う方法は次のとおりです。
- ボタンの OnClick イベント ハンドラで、これらのセルを区別するデータを設定します。
- 同じイベント ハンドラーで、セルの塗りつぶし領域を無効にする
- OnDrawCell イベント ハンドラーで、区別されないセルに対して通常の描画を行います
- 同じイベント ハンドラーで、区別されたセルを別の方法でペイントします。
--jeroen
于 2010-12-20T08:03:06.053 に答える
3
いいえ、それはできません。次に Windows がコントロール (実際には制御できないもの) の再描画を決定すると、描画したものはすべて、コントロールのPaint
メソッドとすべての描画関連のイベントによって上書きされます。
Jeroen が指摘するように、そのようなカスタム ペインティングを行うには、イベント アプローチを使用する必要があります。
于 2010-12-20T09:06:32.233 に答える
1
procedure TForm1.Button1Click(Sender: TObject);
var aRect: TRect;
begin
aRect := StringGrid1.CellRect(2,2);
StringGrid1.Canvas.Brush.Color := clBlue;
StringGrid1.Canvas.FillRect(aRect);
StringGrid1.Canvas.Font.Color := clBlack;
StringGrid1.Canvas.TextOut(aRect.Left + 2 , aRect.Top + 2, StringGrid1.Cells[2, 2]);
end;
于 2010-12-20T07:29:31.783 に答える