![]() |
Suche Idee, Button soll Options Fenster anzeigen/verbergen
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:
Das eigentliche Problem ergibt sich beim Drücken des Buttons:
procedure TfrmOptions.FormDeactivate(Sender: TObject);
begin Close; end; 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? |
Re: Suche Idee, Button soll Options Fenster anzeigen/verberg
Hi,
erstehe ich jetzt nicht so genau wo das Problem ist. Setze doch im OnExpanded einfach eine Abfrage ob der Button.Expanded ist also
Delphi-Quellcode:
if Button.Expanded then
begin //dein Code zum Fenster öffnen end; Gruß Stormy |
Re: Suche Idee, Button soll Options Fenster anzeigen/verberg
Hallo,
verstehen tu ich das auch nicht ... Das Options-Form wird doch über Frm_Options.ShowModal aufgerufen, oder ? also
Delphi-Quellcode:
Egal, wie das Form beendet wird, es wird der finally-Zweig angesprungen.
Button_X.Expanded:= True;
try Frm_Options.ShowModal finally Button_X.Expanded:= False; end; Heiko |
Re: Suche Idee, Button soll Options Fenster anzeigen/verberg
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zum weiteren Verständnis noch: das Options-Fenster ist rahmenlos und hat keinen Schließen-Button. D.h. dass ich diese nur wieder durch den besagten Button zuklappen kann oder dadurch, dass der User irgendwo ausserhalb des Options-Fensters klickt. Man darf sich unter dem Options-Fenster jetzt nicht ein riesengroßes Fenster vorstellen, sondern so eine Art Popup-Fenster mit ein paar Optionen drin, siehe auch Anhang. |
Re: Suche Idee, Button soll Options Fenster anzeigen/verberg
Warum mahcst du nicht, wie allgemein üblich, eine Schließenschaltfläche auf das Optionsfenster?
|
Re: Suche Idee, Button soll Options Fenster anzeigen/verberg
Zitat:
1) User klickt auf Button -> OnExpanded wird gerufen -> Fenster wird erzeugt und angezeigt -> OFFEN 2) User klickt auf Button -> Callback wird gerufen -> .Expanded wird auf False gesetzt -> GESCHLOSSEN, aber 3) Button.Click wird intern gerufen (.Expanded wider von False auf True gesetzt) 4) Button.OnExpanded wird wieder gerufen -> Fenster wird erzeugt und angezeigt -> OFFEN Eigentlich sollte 3) bis 4) nicht mehr passieren oder eben durch eine Logik unterbunden werden - genau hierzu suche ich eine Lösung. |
Re: Suche Idee, Button soll Options Fenster anzeigen/verberg
Zitat:
erstens nach sich ziehen, dass das Ganze etwas unschön aussieht und als "Fenster" zu erkennen ist, und sich nicht wie im Screenshot von oben als klappbares "Panel" darstellt und zweitens könnte der User dann das Fenster ggf. verschieben oder evtl. das Parentfenster (mit dem Button darauf) verschieben und das Optionsfenster würde sich nicht mitbewegen. |
Re: Suche Idee, Button soll Options Fenster anzeigen/verberg
Und wenn du nach 2 bzw. vor 3 ein
Delphi-Quellcode:
setzt?
exit;
Gruß Stormy |
Re: Suche Idee, Button soll Options Fenster anzeigen/verberg
Zitat:
Leider auch nicht so einfach möglich. Der besagte Button, funktioniert ja so tadellos, ich verwende diesen bspw. auch dazu ein Panel ein- oder auszuklappen oder Details zu Fehlermeldung ein- bzw. auszublenden. Das mit dem Panel hatte ich auch bisher statt dem Optionsfenster verwendet, gefiel mir dann aber nicht mehr so und aufgrund neu hinzugekommener Optionen wurde das Panel dann auch zu klein und zu unübersichtlich. Die Grundfunktion des Buttons ist einwandfrei, der Knackpunkt ist, dass das Optionsfenster ein eigenständiges Fenster ist und zum anderen auch geschlossen werden kann (und soll), wenn der User neben das Fenster klickt. Modal angezeigt nutzt das Optionsfenster nicht viel, da dann ja die Ein-Ausklappfunktion überflüssig wäre. |
Re: Suche Idee, Button soll Options Fenster anzeigen/verberg
Hallo,
dann packe dein Options-"Form" auf ein Panel unterhalb des Expanded-Buttons, das Panel ist am Anfang unsichtbar. Per Button-Klick wird es sichtbar. Zur Not geht auch ein Frame, der eingeblendet wird. Wie dann das "woanders hinklicken soll es schliessen" funktioniert, weiss ich auch nicht. Ich finde diese Anforderung eh doof ;) Ich klicke aus Versehen daneben und das "Form" ist weg, ne!. Mal was anderes. Was benutzt als Komponente für den "Objekt-Inspektor" ? Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz