Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi MDI-Child mit ESC schließen (https://www.delphipraxis.net/24748-mdi-child-mit-esc-schliessen.html)

gmc616 25. Jun 2004 14:12


MDI-Child mit ESC schließen
 
Hi Leute,

ich bin noch relativ neu in der Delphiwelt.

Ich habe eine MDI-Anwendnung geschrieben, die mehrere Childfenster öffnet.
Nun möchte ich das sich jedes MDI-Child mit ESC schließen läßt.
Ich habe schon über die Verwendung von TastaturHooks nachgedacht, mir auch schon ne Menge durchgelesen und ein paar Beispiele angeschaut, aber irgendwie kriege ich den Eindruck, dass ein Hook nicht die besste Lösung für mein Problem ist.

Alle Hookbeispiele die habe, funktionieren immer Systemweit!
Aber in meinem Fall soll der Hook nur in meiner Applikation reagieren und nicht außerhalb.

Gibt es eine bessere Methode meine Fenster mit ESC zu schießen?
Evtl. möchte ich später noch mit anderen Tasten b.z. durch meine Fenster springen usw.

Gruß
gmc

Muetze1 25. Jun 2004 14:40

Re: MDI-Child mit ESC schließen
 
Moin!

Schonmal probiert bei dem MDIChild die Eigenschaft KeyPreview auf True zu stellen und im OnKeyPressed des MDIChilds zu testen ob VK_ESCAPE gedrückt wurde und dann entsprechend das Child frei zu geben bzw. zu schliessen?

MfG
Muetze1

gmc616 25. Jun 2004 14:52

Re: MDI-Child mit ESC schließen
 
Das würde gehen, würde aber auch bedeuten, dass, wenn ich neue Tasten hinzufügen möchte, in jedem MDIChild wieder rumcoden muß.
Mir wäre es lieb, wenn ich die Hotkeys nur an einer Stelle im Soucre bearbeiten müßte und die Steuerung bzw. Verarbeitung der Tastedrücke im MDIMain abhandeln könnte.

Gruß
gmc

Muetze1 26. Jun 2004 15:26

Re: MDI-Child mit ESC schließen
 
Moin!

Die Tastendrücke für die MDIChilds im Hauptformular abhandeln ist irgendwie nicht so gut wie ich finde. Daher erstmal eine andere Frage: Wieviele unterschiedliche MDIChilds hast du denn, das du "so viele" abändern musst? Ansonsten bau dir doch ein Form als TMDIChild die das mit dem KeyPressed und Form Schliessen enthält und leite einfach deine ganzen MDIChilds davon ab, dann brauchst du es nur noch an einer Stelle für alle deine MDIChilds abändern.

Ein globaler Hook ist viel zu viel - schon alleine weil du es nur für innerhalb deiner Anwendung brauchst...

MfG
Muetze1

gmc616 29. Jun 2004 12:34

Re: MDI-Child mit ESC schließen
 
Hi Muetze,

Das ein TastaturHook unangebracht ist, dachte ich mir schon.

Zitat:

Wieviele unterschiedliche MDIChilds hast du denn, das du "so viele" abändern musst?
Zu Zeit habe ich 5 MDIChild, werden aber mit sicherheit noch mehr werden.

Die Sache mit dem TMDIChild hört sich gut an.
Aber wie ich schon geschrieben habe, bin ich noch relativ neu in der DelphiWelt und habe daher keinen Plan, wie man eine Fensterklasse in Delphi erstellt.

Ich habe schon mal mit einer eigenen TEdit-Klasse rum experimentiert und das ganze als neue Komponente dem Delphi hinzugefügt.
Ich empfand das tierisch umständlich!
Funktioniert das Erstellen eines TMDIChild ähnlich?
Auch habe ich die Befüchtung, dass ich meine bisherigen Fenster über haufen werfen und neu aufbauen muß, nur weil sich die Klasse des Fensters ändert.

Sorry, für mein Unwissen aber für einen Link zu einem TUT wäre ich sehr Dankbar.

Gruß
gmc

BKempf 29. Jun 2004 13:03

Re: MDI-Child mit ESC schließen
 
Ich habe ein paar Fenster, die ohnehin einen "Close"-Button haben und auch per ESC geschlossen werden sollen.
Folgendes funktioniert wunderbar:
Delphi-Quellcode:
Button1.Cancel:=true;
...
procedure TForm.Button1Click(Sender:TObject);
begin
  Close;
end;
Notfalls koenntest du sie ja auf 1x1 Pixel Groesse ziehen und irgendwo ausserhalb des sichtbaren Teils der Form verstecken, z.B. mit Top:=-10 und Left:=-10 im Objectinspektor.

Stevie 29. Jun 2004 14:22

Re: MDI-Child mit ESC schließen
 
Zitat:

Zitat von gmc616
Aber wie ich schon geschrieben habe, bin ich noch relativ neu in der DelphiWelt und habe daher keinen Plan, wie man eine Fensterklasse in Delphi erstellt.

1) Erstell ein neues Fenster, pack da die Sachen rein, die alle deine ChildForms haben müssen und füg es deinem Projekt hinzu.
2) Öffne deine jetztigen ChildForms und ersetzt das class(TForm) durch class(TDeineMDIFormKlasse).
3) Öffne dein Formular als Text und ersetze das object in der ersten Zeile durch ein inherited.
4) Wenn du Events in einem ChildForm benutzt, die du in TDeineMDIFormKlasse implementiert hast, dann gehört in deinem ChildForm dort als erstes ein inherited rein.

Zitat:

Zitat von BKempf
Notfalls koenntest du sie ja auf 1x1 Pixel Groesse ziehen und irgendwo ausserhalb des sichtbaren Teils der Form verstecken, z.B. mit Top:=-10 und Left:=-10 im Objectinspektor.

Uaahh, da stellen sich ja bei mir die Nackenhaare auf!!! :zwinker:

gmc616 29. Jun 2004 15:38

Re: MDI-Child mit ESC schließen
 
Danke Stevie, :thuimb:

genauso, oder so ähnlich hatte ich mir das vorgestellt. :bounce2:

Das mit den versteckten Button ... naja ... :pale:

Gruß
gmc

Reiner12 30. Jun 2004 14:44

Re: MDI-Child mit ESC schließen
 
Hallo Leute,

ich habe das auch mal probiert und geht ganz gut.
nur wenn ich einen Button oder ein Editfeld in das Childfenster lege,
kommen die OnKeyUp-Nachrichten nicht mehr beim Fenster bzw. in der MDIChild-Klasse an.

Ist ja auch irgendwo logisch, aber nicht sinn der sache!
Oder hab ich was vergessen?

mfg
Reiner

Stevie 1. Jul 2004 07:40

Re: MDI-Child mit ESC schließen
 
Zitat:

Zitat von Reiner12
Oder hab ich was vergessen?

Hast du! :mrgreen:
Es gibt im Formular die Eigenschaft KeyPreview.
Zitat:

Zitat von Delphi-Hilfe
Die Eigenschaft KeyPreview bestimmt, ob das Formular Tastaturereignisse vor dem aktiven Steuerelement erhält.



Alle Zeitangaben in WEZ +1. Es ist jetzt 12:01 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