Tastendruck im Fenster registrieren



  • Hallo,

    ich habe ein bestehenden Projekt mit mehreren Fenstern.
    Ich würde gerne in jedem Fenster auf gewisse Tastendrücke reagieren.
    Bsp. ESC Taste wird gedrückt -> Fenster schließen
    Oder F6 Taste wird gedrückt -> alle Werte abspeichern

    Dazu habe ich evtl. schon einen Action-Handler gefunden:
    Fenster Ereginisse: onShow und dort in einer erstellten Methode einen Keylistener zu implementieren. Leider wird beim Erstellen der Methode kein Key mit übergeben:

    void __fastcall TFSetupTool::FormShow(TObject *Sender)
    {
    
    // Diese Methode nutzen um Tasteneingaben abzufangen.
    
    }
    

    Ist dieses überhaupt die geeignete Methode?
    Wie kann ich die Tasten dann letztendlich einlesen?

    Besten Dank im Voraus



  • Jede Form hat dafür KeyDown/KeyPress/KeyUp-Ereignisse, s.a. Understanding and Processing Keyboard Events [in Delphi]) (gilt analog für C++ Builder / RAD Studio)



  • Habe mal meinen Code so erstellt. Jedoch wird diese Methode nie aufgerufen, bzw. bekomme keine Meldungen wenn ich bswp. F1 drücke.

    void __fastcall TFSetupTool::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
    
    {
    	  // Diese Methode nutzen um Tasteneingaben abzufangen.
    // Bswp. F9 für Accept und F10 für Cancel UND ESC für Fenster schließen
    
    switch( Key )
    	{
    	case VK_RETURN:
    		ShowMessage("You pressed Enter");
    		break;
    	case VK_F1:
    		ShowMessage("Help is not available at the moment");
    		::MessageBox(NULL, "Testmessage", VersionInfo.swName.c_str(),MB_ICONINFORMATION);
    		break;
    	case VK_DELETE:
    		ShowMessage("Can't Delete This");
    		break;
    	case 'K':
    		// If the user press Ctrl + K
    		if( Shift.Contains(ssCtrl) )
    			ShowMessage("K was pressed");
    		break;
    	}
    
    }
    //---------------------------------------------------------------------------
    


  • Da du offensichtlich kein Englisch kannst oder zu faul bist, den oben verlinkten Artikel zu lesen:

    Du musst die Eigenschaft KeyPreview des Formulars auf true setzen.



  • Sorry, habe ich wohl überflogen.
    Habe den Haken gesetzt -> läuft nun wie gewünscht.
    besten Dank!


Log in to reply