Tabulator-Taste abfangen



  • Hi,

    wie ist es moeglich, die Tabulator-Taste abzufangen? Unter google fand ich
    dashier:
    http://www.bcbdev.com/faqs/faq78.htm

    Nur habe ich keinen Erfolg mit der dort beschriebenen Methode.

    Hier der Code:

    void __fastcall MyComponent::WMGetDlgCode(TMessage & Message)
    {
         Message.Result = DLGC_WANTALLKEYS;
         Message.Result |= DLGC_WANTTAB;
    }
    

    Gibt es sonst noch einen Weg?

    Danke schon mal im Voraus.

    mfg
    v R

    PS: Ist uebrigens die gleiche Komponente, in der ich auch 'CreateParams'
    ueberschrieben habe, koennte es damit zusammenhaengen?





  • Hi,

    erstmal danke fuer die Antwort und die Links.
    Allerdings bringt es mich nicht weiter, denn 'CMDialogKey' wird erst aufgerufen,
    wenn, das naechste Control bereits den Focus hat.

    Ich benoetige die Auswertung der Tabulatortaste, nach Moeglichkeit, allerdings bevor das naechste Control den Focus hat.

    Hast du dafuer auch ne Loesung parat?

    Danke fuer die Hilfe

    mfg
    v R

    [ Dieser Beitrag wurde am 14.03.2003 um 10:23 Uhr von virtuell Realisticer editiert. ]



  • VK_TAB 😉
    oder bei nem keyhook 0x09 abfangen 😉

    [ Dieser Beitrag wurde am 14.03.2003 um 10:51 Uhr von 1ntrud0r editiert. ]



  • VK_TAB

    Ist mir schon Klar, nur die normalen Key*-Funktionen greifen bei gedrueckter
    Tabulator-Taste nicht.

    oder bei nem keyhook 0x09 abfangen

    Soweit wollt ich auf gar keinen Fall gehen und mir ne Hook-Funktion schreiben,
    nur damit ich die Tabulator-Taste abfangen kann.

    Ich denke ich werde es anders loesen.

    mfg
    v R



  • wie geht net ?! wie wärs wenn du dir ne temp Var machst ! Die bei Keydown auf 1 setzt und bei Key up zurück auf 0 dann kannst sehr wohl abfragen ... ob es gedrückt ist oder net 😉

    Programmieren erfordert implizites abstraktes Denken ... ! 🙄



  • ist doch gar nicht so schwer, bei mir gehts doch auch... 😉

    // header
    protected:
    
      void  __fastcall WMGetDlgCode(TMessage &Msg);
    
    public:
    
      BEGIN_MESSAGE_MAP
         MESSAGE_HANDLER(WM_GETDLGCODE, TMessage, WMGetDlgCode);
      END_MESSAGE_MAP(TCustomEdit)
    

    dann in cpp-file

    // cpp
    void __fastcall TMyEdit::WMGetDlgCode(TMessage &Msg)
    {
      // tab abfangen einschalten
      Msg.Result = DLGC_WANTTAB;
    }
    
    // im keypress dann die taste abfangen
    void __fastcall TMyEdit::KeyPress(char &Key)
    {
      // entweder so
      if (GetKeyState(VK_TAB) & 0x8000)
        ShowMessage("TAB 1");
    
      // oder so
      if (Key == VK_TAB)
        ShowMessage("TAB 2");
    }
    


  • wie geht net ?! wie wärs wenn du dir ne temp Var machst ! Die bei Keydown auf 1
    setzt und bei Key up zurück auf 0 dann kannst sehr wohl abfragen ... ob es gedrückt
    ist oder net 😉

    Programmieren erfordert implizites abstraktes Denken ... ! rolleyes

    Die Key*-Events werden, wie schon gesagt, nicht aufgerufen, wenn man Tab drueckt.
    Es wird das OnKeyUp-Ereignis aufgerufen, allerdings bereits im naechsten Control
    und nicht in dem Control, in dem ich Tab gedrueckt habe, aber genau in diesem
    Control will ich auf Tab pruefen.

    Das mit einer 'tmp'-Variable hab ich auch schon laengst ausprobiert gehabt, hat
    aber nicht geholfen, da 'OnKeyDown' nicht aufgerufen wird.

    @Sunday:

    Danke, so funktioniert es wunderbar.

    mfg
    v R


Anmelden zum Antworten