Home » Tipps & Tricks » Komponenten » Allgemein » Steuerelement am Neuzeichnen hindern

Steuerelement am Neuzeichnen hindern

Mithilfe folgender Prozedur lässt sich bei jeder Komponente, die direkt oder indirekt von TWinControl abgeleitet wurde, das Neuzeichnen sperren.Ihr muss als erster Parameter die Referenz zu dem entsprechenden Control übergeben werden. Über den zweiten Parameter wird gesteuert, ob das Steuerelement gesperrt (True) oder entsperrt (False) werden soll. Beim Entsperren wird es automatisch neu gezeichnet.

procedure LockWinControl(const WC: TWinControl; ALock: Boolean);
begin
 if (not Assigned(WC)) or (WC.Handle = 0) then
   exit;

 if ALock then
   WC.Perform(WM_SETREDRAW, 0, 0)
 else
 begin
    WC.Perform(WM_SETREDRAW, 1, 0);
    RedrawWindow(WC.Handle, nil, 0,
                 RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN);
 end;
end;

Achten Sie bei der Verwendung der Prozedur darauf, die Sperrung/Entsperrung mit einem try-finally-Block zu schützen:

procedure TForm1.Button1Click(Sender: TObject);
begin
 LockWinControl(Groupbox1, True);
 try
   //Umfangreiche Änderungen
 finally
   LockWinControl(Groupbox1, False);
 end;
end;

Die Sperrung wirkt sich in diesem Beispiel auch auf alle Komponenten aus, die Groupbox1 als Parent haben.