Testenbelegung



  • Hi,

    Ich habe da mal ein Frage.

    Wie stell ich es an das bei tastendruck eine Aktion ausgeführt wird. Das ganze soll aber so sein, egal wo sich der fokus sich befindet soll das ausgeführt werden.

    ein kleines beispiel. wenn ich 'a' drücke soll der mir eine meldung bringen.

    Normalerweise würd ich das mit KeyPress machen. Das problem besteht im moment darin, wenn ich das in Form1KeyPress rein schreibe und Form 1 ist leer, dann führt der die aktion aus, sobalt ich aber z.B. einen Button in die form setzte macht der das nicht mehr.

    Ok, ich könnte das dann ja auch noch in Button1KeyPress rein schreiben, die buttons die ich habe, haben aber kein OnKeyPress.

    Danke schonmal



  • Hallo

    nimm TForm::OnKeyPress und setzt TForm::KeyPreview auf true.

    /Edit : Du kannst auch eine TActionList einbinden und dort eine Aktion mit gewünschten Hotkey definieren.

    bis bald
    akari



  • Danke,

    funzt.



  • Kleine Frage hab ich noch.

    Wie kann ich bei der Tastenbelgung noch die STRG taste mit einbinden??

    if( Key= STRG + 'a' )
    

    geht nicht.

    Ich kann in der hilfe nichts passendes dazu finden.

    Danke nochmal.



  • Hallo

    das geht mit dem OnKeyDown-Event besser

    void __fastcall TForm::OnKeyDown(TObject* Sender(TObject* Sender, Word &Key,    
      TShiftState Shift)
    {
      if ((Shift.Contains(ssShift) && (Key == 'a'))
      {
      }
    }
    


  • Da hab ich jetzt aber wieder das problem das der nicht darauf reagiert, so wie bei KeyPress.



  • Hallo

    akari schrieb:

    und setzt TForm::KeyPreview auf true.

    übrigens ist die Abfrage natürlich so Unsinn... 🙄

    void __fastcall TForm::OnKeyDown(TObject* Sender(TObject* Sender, Word &Key,    
      TShiftState Shift)
    {
      if (Shift.Contains(ssShift) && (Key == 'A'))
      {
      }
    }
    

    Und das geht auch mit Focus auf innere Controls, habs extra getestet.

    bis bald
    akari



  • Du kannst es aber auch mit einer ActionList Komponente machen.
    Wenn du eine neue Action erstellst, kann man bei shortcut einstellen, wenn diese aktion aktiviert wird.

    Action1->Shortcut->......Strg+a, Strg+b, usw....;
    

    Dann kannst du ganz einfach dein Programm das bei deinem Keypress ausgeführt werden soll in die Action kopieren.

    MFG
    Seal_Reaver



  • @ akari

    Es funktioniert, so wie du das geschrieben hast, aber ich wollte nicht die Shift taste sondern die STRG taste.

    Die shift taste kann ich auch mit Key Press abfragen

    if(Key='A')
    

    geht auch.

    @Seal_Reaver

    Danke. Aber lieber wär mir ne Methode über KeyDown KeyUp oder KeyPress.
    Das würden zu viele Aktionen werden.



  • void __fastcall TForm::OnKeyDown(TObject* Sender(TObject* Sender, Word &Key,     
      TShiftState Shift) 
    { 
      if (Shift.Contains(ssCtrl) && (Key == 'A')) 
      { 
      } 
    }
    

    so funzt das. Ist zwar nicht das gelbe vom ei aber damit lässt sich was anfangen. mich stört ein bischen das ich ein großes A nehmen muss aber damit lässt sich leben.

    Vielen Dank für eure Hilfe.



  • Hallo

    klar muß es ein großes A sein... wenn gleichzeitig Shift gedrückt sein soll.
    Übrigens werden alle Hotkeys eh immer mit großen Buchstaben geschrieben, also nur konsequent. Wenn du dann mehrere komplexere Hotkeys haben willst, solltest du aber wirklich mit TActionList arbeiten.

    bis bald
    akari


Anmelden zum Antworten