Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Eine Methode zum schließen der Formulare mit der ESC-Taste (https://www.delphipraxis.net/93748-eine-methode-zum-schliessen-der-formulare-mit-der-esc-taste.html)

Christian18 10. Jun 2007 20:41


Eine Methode zum schließen der Formulare mit der ESC-Taste
 
Hallo DPler,

erst mal Glückwunsch zum 5. Geburtstag!!! Ich bin mal wieder auf den Trip meine Quellcodes zu verschönern. So ich habe folgendes anliegen. Immer wenn ich eine Formular (Form) habe, gebe ich dem User die Möglichkeit dieses Fenster mit der ESC-Taste zu schließen. Hat was mit Benutzerfreundlichkeit zu tun. Aber das ist eine andere Geschichte. Dadurch, dass ich diese Funktion bei jeder Form habe, habe ich natürlich in jeder Unit die gleiche procedure. Ich würde es gerne schaffen, dass ich das nur einmal habe. Also eine procedure die alle Fenster im gesamten Programm mit der ESC-Taste schließen lässt. Wie kann ich das realisieren? Ich würde mir sehr viel arbeit sparen und die Programm währen um einiges übersichtlicher. Bezüglich anzahl der Methoden in einer klasse.

Hier nochmal ein bisschen Code wie ich das mit den Fenstern schließen mache. Leider habe ich diese Methode in jeder Klasse.
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if shift=[] then
    begin
      case key of
        27 : Close;
      end;
    end;
end;
Vielen Dank schon mal im vorraus!

MFG Christian18

Dax 10. Jun 2007 20:48

Re: Eine Methode zum schließen der Formulare mit der ESC-Tas
 
Dazu musst du nur eine leere Form nehmen, den Code reinsetzen und das ganze dann in die Objektablage tun - aber nicht vergessen, dann später auch immer die Form aus der Ablage zu nutzen ;)

hoika 10. Jun 2007 20:59

Re: Eine Methode zum schließen der Formulare mit der ESC-Tas
 
Hallom

oder "übersetzt"

Benutze Formular-Vererbung.


Heiko

SirTwist 11. Jun 2007 00:23

Re: Eine Methode zum schließen der Formulare mit der ESC-Tas
 
Zitat:

Zitat von Christian18
Immer wenn ich eine Formular (Form) habe, gebe ich dem User die Möglichkeit dieses Fenster mit der ESC-Taste zu schließen. Hat was mit Benutzerfreundlichkeit zu tun.

Gibst Du Deinen Anwendern denn einen "Schließen"-Button? Oder "Abbrechen" oder "Close" oder "Cancel"? Wenn ja, reicht es völlig, dort die Eigenschaft "Cancel" auf "True" zu setzen und schon reagiert dieser Button auf Escape. Wenn Du keinen solchen Button hast, solltest Du den aus Gründen der Benutzerfreundlichkeit überall hinzufügen ;-)

Gruß,
SirTwist

RavenIV 11. Jun 2007 08:22

Re: Eine Methode zum schließen der Formulare mit der ESC-Tas
 
Wie SirTwist schon geschrieben hat, gehört auf jedes Formular ein Abbrechen/Schliessen-Button.

marabu 11. Jun 2007 09:01

Re: Eine Methode zum schließen der Formulare mit der ESC-Tas
 
Ich möchte da widersprechen.

Nur secondary windows benötigen diese prominenten Aktionsschalter (OK, Cancel) - und auch nur dann, wenn eine Aktion damit verknüpft ist. Die beiden Eigenschaften Default und Cancel sind bequem, aber kein hinreichender Grund für den Einsatz dieser Buttons. Zum bloßen Schließen eines Fensters kann auch der CloseButton aus der Titelleiste verwendet werden. Modale Dialoge ohne Aktionsschalter möchte ich mit der Esc-Taste schließen können, bei nicht-modalen Fenstern bevorzuge ich die Tastenkombination Strg+F4. Wichtig ist vor allem Konsistenz - wenn nicht systemweit, dann wenigestens in der eigenen Anwendung.

Freundliche Grüße

SirTwist 11. Jun 2007 10:59

Re: Eine Methode zum schließen der Formulare mit der ESC-Tas
 
Okay, wir sind uns also einig: Dialoge, die man per Tastaturbefehl "Escape" schließen kann, müssen zwingend auch einen Button "Close" / "Schließen" / sonstwas haben. Okay? ;-) Dann kann ich auch die Eigenschaft "Cancel" benutzen und brauch nicht dediziert auf irgendwelche Key-Events zu reagieren.

SirThornberry 11. Jun 2007 11:01

Re: Eine Methode zum schließen der Formulare mit der ESC-Tas
 
und wenn der Fragesteller es doch so will wie beschrieben dann kann er TApplicaitonEvents nutzen. Dort einfach die Key-Message abfragen und wenn es Escape ist dann einfach das aktive Formular schließen.

marabu 11. Jun 2007 11:18

Re: Eine Methode zum schließen der Formulare mit der ESC-Tas
 
Hallo,

Zitat:

Zitat von SirTwist
... Dann kann ich auch die Eigenschaft "Cancel" benutzen und brauch nicht dediziert auf irgendwelche Key-Events zu reagieren. ...

da hast du mich aber gründlich missverstanden. Du meinst die TButton-Komponente, wenn du von einem Button und seiner Cancel-Eigenschaft schreibst. Ich hingegen meine den CloseButton, den der Window-Manager in die Titelleiste eines Fensters malt. Einen extra Button in der ClientArea meiner Form, nur damit ich seine Cancel-Eigenschaft nutzen kann? Dafür wäre mir der Platz auf dem Bildschirm zu wertvoll.

Der Vorschlag von Dax in Beitrag #2 scheint mir ideal zu sein.

Freundliche Grüße

Hansa 12. Jun 2007 00:38

Re: Eine Methode zum schließen der Formulare mit der ESC-Tas
 
In Beitrag #2 bzw. #3 wurde alles wichtige gesagt. Allerdings etwas zu knapp. Rest ist Geplänkel am Rande. Wird eine zentrale Stelle benötigt (wer braucht bei diversen Forms zum schließen 10 verschiedene Tasten ? ), um programmweit eine Eigenschaft zu ändern, dann müssen die Forms auch als inherited aus der Objektablage genommen werden ! Glaube da steht auf deutsch "vererben". Wer hingeht und benutzt "verwenden" oder "kopieren", der verfielfältigt zwar leicht Source-Teile und spart Arbeit, aber er verliert auch den Vorteil einer zentralen Anlaufstelle bei eventuellen Änderungen (die ja dann vererbt werden). Und nicht vergessen : da kann ja auch noch viel mehr reingepackt werden : Farben, Schriftarten, Mouse/Tastatur Events usw. Will einer bei mir unbedingt gelbe Forms haben, dann ist das eine Sache von einer Zeile und projektweit haben alle Forms dann die Gelbsucht. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr.

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