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 🙂 👍


Anmelden zum Antworten