OSによる画面の再描画が終わったことを知るには


さとう  2025-05-02 13:16:31  No: 151984

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での画面の再描画が終わったことを知る方法はありませんでしょうか。


igy  2025-05-02 14:04:00  No: 151985

StringGridのDrawCellイベントに描画するコードを書くのでは、ダメですか?


さとう  2025-05-02 14:43:01  No: 151986

igyさん
ありがとうございます。
確かに線の描画は行われるのですが、セルの描画のたびに線を引きますので、StringGridのすべてのCellの描画が終わった後に一度だけ線を引きたいのですが、すべてのCellの描画が終わったことを知る方法はありませんでしょうか。


igy  2025-05-02 15:23:31  No: 151987

では、TPageControlのOnChangeイベントでは、ダメですか?


AAAAA  2025-05-02 17:58:26  No: 151988

  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描画あとに描画なら
かな


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加