Funktion KeyPress wird nicht ausgeführt



  • Hallo,

    ich habe die Funktion KeyPress in meinem Programm, diese wird aber beim
    Tastendruck nicht ausgeführt.
    Was mache ich denn da Falsch?

    void __fastcall KeyPress(char &Key)
    {
    	if (Key == 0x31)
             {
        	     if (Form1->Button1->Caption == "OFF")
                  {
         		Form1->Button1->Caption = "ON";
    	     }
             else
             {
                  Form1->Button1->Caption = "OFF";
             }
        }
    }
    

    Johann



  • Wieso erwartest du, dass diese Funktion ausgeführt würde?

    (Eine Fensterklasse kann ein Event OnKeyPress haben.)



  • Hast Du die Methode denn auch irgendeinem Ereignis (z.B. OnKeyPress) zuge-
    wiesen?

    Gruß,

    Alexander

    Edit: Da war ich wohl einen Tick zu langsam...



  • Die Funktion KeyDown wird nach Tastendruck Ausgeführt, nun möchte ich noch
    die Status der Shifttaste abfragen.

    void __fastcall TWinControl::KeyDown(unsigned short &Key,  Classes::TShiftState Shift)
    {
    	if (??Shift??)
    	{
    		if (Key == 0x70) //Shift F1
    		{
    			if (Form1->Button1->Caption == "OFF")
    			{
    				Form1->Button1->Caption = "ON";
    			}
    			else
    			{
    				Form1->Button1->Caption = "OFF";
    			}
    		}
    	}
    }
    


  • Ein (gründlicher) Blick in die Hilfe hätte dir verraten, dass TShiftState vom Typ Set ist ...
    Siehe FAQ, "Umgang mit 'Set'".



  • void __fastcall TWinControl::KeyDown(unsigned short &Key,  Classes::TShiftState Shift)
    {
    		if (Key == 0x70 && Shift.Contains(ssShift))
    		{
    			if (Form1->Button1->Caption == "OFF")
    			{
    				Form1->Button1->Caption = "ON";
    			}
    			else
    			{
    				Form1->Button1->Caption = "OFF";
    			}
    		}
    }
    

    Das ganze funktioniert.
    Gibt es eine elegante Methode die Tasten zu entprellen (erst nach loslassen der Tasten S+F1 und erneutem drücken darf wieder eine Reaktion stattfinden).

    Meine Lösung wäre

    //---------------------------------------------------------------------------
    void __fastcall TWinControl::KeyDown(unsigned short &Key,  Classes::TShiftState Shift)
    {
    		if (Key == 0x70 && Shift.Contains(ssCtrl) && !keyp)
    		{
    			if (Form1->Button1->Caption == "OFF")
    			{
    				Form1->Button1->Caption = "ON";
    			}
    			else
    			{
    				Form1->Button1->Caption = "OFF";
    			}
                keyp = true;
    		}
    
    }
    void __fastcall TWinControl::KeyUp(unsigned short &Key,  Classes::TShiftState Shift)
    {
    	keyp = false;
    }
    

    Aber vieleicht gehts ja auch anders?

    Gruß
    Johann


Anmelden zum Antworten