派生コンポーネントを作った場合、派生元の private メソッドは当然利用できません。
そのために、作業中の無駄な再描画による画面のフラッシュやちらつきを、阻止できない場合があります。
それを防ぐために BeginUpdate, EndUpdate が、幾つかのコンポーネントには存在しているのですが・・・ないものもあります。
TStringGrid は無いほうに含まれます。
私は一時期、自力でちらつきを止めようと努力しましたが・・・止めれませんでした(弱)
しかし、ついに勝利したのでここに書き留めます。
TStringGridEx = class(TStringGrid)
private
FUpdateLock: Integer;
protected
procedure BeginUpdate;
procedure EndUpdate;
public
constructor Create(AOwner: TComponent); override;
published
end;
constructor TStringGridEx.Create(AOwner: TComponent);
begin
FUpdateLock := 0;
end;
procedure TStringGridEx.BeginUpdate;
begin
if FUpdateLock = 0 then SendMessage(Handle, WM_SETREDRAW, 0, 0);
Inc(FUpdateLock);
end;
procedure TStringGridEx.EndUpdate;
begin
if FUpdateLock > 0 then Dec(FUpdateLock);
if FUpdateLock = 0 then
begin
SendMessage(Handle, WM_SETREDRAW, 1, 0);
Invalidate;
end;
end;
uses に Messages を追加するのをお忘れなく。
Handle を持つもの (=Window) ならどれでも流用できる・・はず。
一般に描画を停止状態にしておくと高速になるようです。