Tastaturbefehl bei MDIForm
-
ich möchte eine MDIForm über einen Tastaturbefehl schließen.
if (Key == VK_ESCAPE) { Close(); }
KeyPreview habe ich auf true gestellt.
Aber leider funktioniert das nicht.
Wer kann helfen?
-
In der Hauptform musst du das onKeyDown-Ereignis abfangen, mit dioesem Inhalt:
void __fastcall TForm1::FormKeyDown(TObject* Sender, WORD &Key, TShiftState State) { if (Key==VK_ESCAPE && Sender->ClassNameIs("TMDIChild")) { TMDIChild* Child=dynamic_cast<TMDIChild*>(Sender); Child->Close(); } }
Jetzt brauchst du nurnoch jedem MDIChild onKeyDown diese Funktion zuweisen, KeyPreview auf true zu stellen und dann sollte es laufen.
-
Danke Windoof, für die schnelle Antwort. Ich wollte die Hauptform schließen, also nicht das Child
-
Dann weiß ichs auch nicht, wieso das nicht funktioniert.
-
kunktioniert nicht
-
he?
Was genau willst du jetzt machen?
Du bist in einem MDIChild und möchtest das Hauptform mit den Childs schließen?#include "Unit1.h" void __fastcall TForm1::FormKeyDown(TObject* Sender, WORD &Key, TShiftState State) { if (Key==VK_ESCAPE) { Form1->Close(); } }
Mfg Bennet
-
ich will die Hauptform ohne geöffnete MDIChild schließen.
-
hab mal eben kurz getüftelt, es gibt zwei möglichkeiten:
Variante 1:
1. erstelle einen menupunkt namens z.b. => mnuBeenden.
2. unter ShortCut trägst du die buchstaben "ESC" selbstständig ein.
3. ereignis zum schließen auf das onClick() ereignis des menüeintrags.
4. fertig.Variante 2:
1. erstelle einen menupunkt namens z.b. => mnuBeenden.
2. erstelle für diesen ein onClick() ereignis, welches die form schließt
3. füge in dem onCreate() der MDIForm folgendes zur laufzeit hinzu:mnuBeenden->ShortCut = ShortCut(Word(VK_ESCAPE), TShiftState());
4. fertig
kommt beides auf´s gleiche raus!
viel spass!
-
Danke funkt. prima