Delphi7 win10 で
PageControl にTabSheet1 Tabsheet2 があります。
Tabsheet2上のStringGridに
StringGrid.Canvas.MoveTo(x1,y1);
StringGrid.Canvas.LineTo(x2,y2);
で線を引きます。PageControlのActivePageをTabSheet1に切り替え、再びTabSheet2に
戻すと先ほど描画した線が消えます。Canvasへの描画はOSが再描画をしないのは仕様とのことです。
そこで、TabSheet2に切り替えた後、自前で再度描画したいのですが、どのタイミングで描画をすれば
いいのかわかりません。OSでの画面の再描画が終わったことを知る方法はありませんでしょうか。
StringGridのDrawCellイベントに描画するコードを書くのでは、ダメですか?
igyさん
ありがとうございます。
確かに線の描画は行われるのですが、セルの描画のたびに線を引きますので、StringGridのすべてのCellの描画が終わった後に一度だけ線を引きたいのですが、すべてのCellの描画が終わったことを知る方法はありませんでしょうか。
では、TPageControlのOnChangeイベントでは、ダメですか?
TStringGrid = class(Vcl.Grids.TStringGrid) //Delphi 7 なら違う
protected
procedure Paint; override;
end;
procedure TStringGrid.Paint;
begin
inherited;
Canvas.Pen.Color := clBlack;
Canvas.MoveTo(0,0);
Canvas.LineTo(100,100);
end;
Gird描画あとに描画なら
かな
ツイート | ![]() |