Hi,
ich versuche derzeit erfolglos mit einem Button auf meinem Haupfenster ein zweites (Options-)Fenster anzeigen zu lassen das später durch einen Klick auf den Button geschlossen werden soll oder wenn der User irgendwo ins Nirwana klickt.
Der zweite Teil war nicht weiter schwer:
Delphi-Quellcode:
procedure TfrmOptions.FormDeactivate(Sender: TObject);
begin
Close;
end;
Das eigentliche Problem ergibt sich beim Drücken des Buttons:
Der Button ist eigengeschrieben und abgeleitet von TGraphicControl. Durch das Anklicken mit der Maus, wird der Button, oder besser das Icon darauf, entweder als aufgeklappt oder eingeklappt dargestellt. Das gleiche Verhalten, kann ich auch steuern, wenn ich das Property
Expanded des Buttons auf True oder False setze. Dies ist, wie ich weiter unten noch erläutern werde, wichtig.
Wurde der Button gerade mit der Maus angeklickt und aufgeklappt, so wird das Ereignis
OnExpanded gerufen, was letztendlich das Options-Fenster erzeugt und anzeigt. So weit so gut.
Wenn der User jetzt ausserhalb des zweiten Fensters klickt schließt sich dieses und ich setze durch ein Callback Ereignis
Button.Expanded auf False. Warum das Ganze? Damit der Button wieder den Zustand
Eingeklappt erhält!
Auch bisher ist soweit alles OK.
Wenn der User allerdings zum Schließen des Options-Fensters jetzt den Button bemüht, dann wird erstens durch den Callback Mechanismus
Button.Expanded auf False gesetzt aber im Anschluß daran gleich wieder Button.OnExpanded (durch den Mausklick auf den Button) gerufen was sofort wieder das zweite Fenster anzeigt.
Ich suche also eine Möglichkeit, das Verhalten so zu steuern, dass sowohl durch einen Klick ausserhalb des Options-Fenster und durch einen Klick auf den Button das Options-Fenster geschlossen werden kann und gleichzeitig der Status des Buttons wieder auf Eingeklappt springt.
Zugegeben, sieht leicht auch, ist es aber nicht, zumindest sitze ich schon eine zeitlang an diesem Problem und komme einfach nicht weiter.
Kann hier jemand noch die ein oder andere Idee beisteuern?