Zitat von
dizzy:
Ein Setzen von Visible:=false ist ja zunächst mal nur eine Änderung einer Variablen. Damit aber eine sichtbare Veränderung eintritt muss zusätzlich noch neugezeichnet werden, und das muss explizit veranlasst werden, da die Zuweisung an die Visible-Eigenschaft dies nicht für dich mit erledigt.
Stop! Das ist so nicht richtig. Wenn die Eigenschaft
Visible einer Control gesetzt wird, so wird intern die Methode
SetVisible aufgerufen.
Delphi-Quellcode:
procedure TControl.SetVisible(Value: Boolean);
begin
if FVisible <> Value then
begin
VisibleChanging;
FVisible := Value;
Perform(CM_VISIBLECHANGED, Ord(Value), 0);
RequestAlign;
end;
end;
Diese sendet die Nachricht
CM_VISIBLECHANGED (Zeile 7) an sich selbst, welche später durch die Methode
CMVisibleChanged abgearbeitet wird.
Delphi-Quellcode:
procedure TControl.CMVisibleChanged(var Message: TMessage);
begin
if not (csDesigning in ComponentState) or
(csNoDesignVisible in ControlStyle) then
InvalidateControl(True, FVisible and (csOpaque in ControlStyle));
end;
Damit zeichnet sich die Control sofort neu (oder halt versteckt sich und sagt den anderen sich neu zu zeichnen).
...
...