Tasten abfangen unter BCB6



  • Hallo Forum,

    also zu erst mal ein riesen Lob! Ist wirklich ein super Treffpunkt hier für's Codieren in allen Richtigen. Hat mir schon Oft geholfen mal hier reinzuschauen. Aber nun muß ich doch selber mal Fragen.

    Aber bitte nicht schlagen, ich habe mir schon alles mögliche zum Thema Tasten und BCB durchgelesen, aber ich bekomme es einfach nicht hin....

    Folgendes möchte ich machen: Mehrere Edit-Felder auf einer Form, das wechseln soll per TAB (später auch Return) möglich sein, die Reihenfolge lege ich im Programm fest (ohne TabOrder)

    Also fluks einen MESSAGE_HANDLER reingefummelt, der WANTTABS setzt in den Edit-Feldern. TAB kommt nun auch schön in der KeyDown-Routine an, aber....nachdem "mein" Code abgearbeitet wurde, führt Windows (oder das Edit-Control?) die TAB-Taste nochmal aus, mit dem Ergebnis, das ein Tabstop im Edit-Feld landet.

    Alle Versuche meinerseits, das zu Verhindern, sprich das weitere abarbeiten der TAB-Taste zu unterdrücken, sind bislang Fehlgeschlagen.

    Kann mir vieleicht jemand einen Tipp geben, wo ich falsch liege?

    Für alle Infos Dankbar!

    Frank

    Zur Veranschaulichung mal meine Code-Schnipsel:

    Message-Map in der Komponente

    BEGIN_MESSAGE_MAP
            MESSAGE_HANDLER(WM_GETDLGCODE, TMessage, WMGetDlgCode);
        END_MESSAGE_MAP(inherited)
    

    WMGetDlgCode-Funktion

    void __fastcall TMyEdit::WMGetDlgCode(TMessage & Message)
    {
            if(m_WantTab)
                Message.Result |= DLGC_WANTTAB;
    
        Message.Result |= DLGC_WANTARROWS;
    }
    

    KeyDown-Funktion

    void __fastcall TfrmMyWindow::FormKeyDown(TObject *Sender, WORD &Key,
          TShiftState Shift)
    {
        switch(Key)
        {
            case    VK_TAB      :   TfrmMyWindow::FunctionKey(Sender,Key,Shift);
                                    break;
        }
    
        // keine weitere behandlung der gedrückten Taste zulassen
        Key = 0;
    }
    


  • kann eventuell daran liegen, dass im Ereignis OnKeyUp der Tab noch ausgeführt wird, versuch einfach mal die Taste dort auch abzufangen



  • onKeypressed

    if (Key == Keycode)
    {
    }
    else
    {
    Key=0;
    }


Anmelden zum Antworten