Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Suche Idee, Button soll Options Fenster anzeigen/verbergen (https://www.delphipraxis.net/137055-suche-idee-button-soll-options-fenster-anzeigen-verbergen.html)

Roaster 13. Jul 2009 13:20


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:
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?

Stormy 13. Jul 2009 13:32

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

hoika 13. Jul 2009 13:39

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:
  Button_X.Expanded:= True;
  try
    Frm_Options.ShowModal
  finally
    Button_X.Expanded:= False;
  end;
Egal, wie das Form beendet wird, es wird der finally-Zweig angesprungen.


Heiko

Roaster 13. Jul 2009 13:56

Re: Suche Idee, Button soll Options Fenster anzeigen/verberg
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von hoika
Hallo,
Delphi-Quellcode:
  Button_X.Expanded:= True;
  try
    Frm_Options.ShowModal
  finally
    Button_X.Expanded:= False;
  end;
Egal, wie das Form beendet wird, es wird der finally-Zweig angesprungen.

Das funktioniert so leider nicht, (war auch einer meiner Ansätze), wenn ich das Options-Fenster modal anzeige, dann komme ich nicht mehr auf den Button, der das Fenster erzeugt hat.

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.

Luckie 13. Jul 2009 14:02

Re: Suche Idee, Button soll Options Fenster anzeigen/verberg
 
Warum mahcst du nicht, wie allgemein üblich, eine Schließenschaltfläche auf das Optionsfenster?

Roaster 13. Jul 2009 14:04

Re: Suche Idee, Button soll Options Fenster anzeigen/verberg
 
Zitat:

Zitat von Stormy
Hi,
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;

Leider so nicht möglich, da die Reihenfolge wie die Events im Button abgearbeitet werden trotzdem dazu führen, das letztendlich das Optionsfenster wieder geöffnet wird:

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.

Roaster 13. Jul 2009 14:09

Re: Suche Idee, Button soll Options Fenster anzeigen/verberg
 
Zitat:

Zitat von Luckie
Warum mahcst du nicht, wie allgemein üblich, eine Schließenschaltfläche auf das Optionsfenster?

Ja, daran dachte ich natürlich auch schon, nur würde dies
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.

Stormy 13. Jul 2009 14:10

Re: Suche Idee, Button soll Options Fenster anzeigen/verberg
 
Und wenn du nach 2 bzw. vor 3 ein
Delphi-Quellcode:
exit;
setzt?


Gruß
Stormy

Roaster 13. Jul 2009 14:17

Re: Suche Idee, Button soll Options Fenster anzeigen/verberg
 
Zitat:

Zitat von Stormy
Und wenn du nach 2 bzw. vor 3 ein
Delphi-Quellcode:
exit;
setzt?

Stormy,
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.

hoika 13. Jul 2009 14:27

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 22:29 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz