2

OnDrawCell イベントを使用せずに Delphi の TStringGrid に特定のセルを描画する方法はありますか。たとえば、ボタンをクリックすると、指定したセルがその内容に応じて描画されます。

4

3 に答える 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 に答える