Cursortasten bei TCustomPanel abfangen



  • Hallo

    ich habe ein eigenes Control von TCustomPanel abgeleitet, das u.a. Tasten verarbeiten soll. Dazu habe ich die Windowsmessages verwendet

    BEGIN_MESSAGE_MAP
      VCL_MESSAGE_HANDLER(WM_KEYUP,TMessage, OnKeyUpHandler)
      VCL_MESSAGE_HANDLER(WM_KEYDOWN,TMessage, OnKeyDownHandler)
      VCL_MESSAGE_HANDLER(WM_SYSKEYUP,TMessage, OnKeyUpHandler)
      VCL_MESSAGE_HANDLER(WM_SYSKEYDOWN,TMessage, OnKeyDownHandler)
    END_MESSAGE_MAP(TCustomPanel)
    

    was auch funktioniert, nur die Cursortasten lösen keinen Event aus.
    Ich habe zum Testen eine einfache neue Anwendung, die mir die Events anzeigt.
    Das Form selber bekommt die Tasten (per KeyPreview festgestellt)
    Auch wenn ich WndProc() überschreibe, um die Events abzufangen passiert das selbe.

    Wo gehen die Cursor-Messages hin und wie ich die bemerken?

    /Edit : Genau gesagt werden die KEYDOWN-Events verschluckt, die KEYUP-Events werden durch die Cursortasten wie gewohnt ausgelöst.

    bis bald
    akari





  • Hallo

    danke für den Link, aber leider hat das keinen Einfluß auf das Verhalten.
    Ich habe das so eingebaut :

    BEGIN_MESSAGE_MAP
      ...
      VCL_MESSAGE_HANDLER(WM_GETDLGCODE,TMessage, WMGetDlgCode)
      END_MESSAGE_MAP(TCustomPanel)
    
    ...
    void __fastcall TCanvasPanel::WMGetDlgCode(TMessage & Message)
    {
    //  Message.Result = DLGC_WANTARROWS | DLGC_WANTCHARS | DLGC_WANTTAB;
      Message.Result = DLGC_WANTALLKEYS;
      }
    

    daraufhin wird WMGetDlgCode() für jede Taste aufgerufen, außer für Tab oder Arrows.
    Das seltsame ist, das Tab und Arrows trotzdem KeyUp auslösen, ohne vorher WMGetDlgCode() oder KeyDown auszulösen.
    Desweiteren hat WMGetDlgCode() aber auch kein Einfluß auf andere Tasten, also kann ich mit

    Message.Result = DLGC_WANTARROWS;
    

    nicht die normalen Tasten ausschließen.

    Gibt es noch weitere Einstellungen der Tasten-Verarbeitung?
    Zu WM_GETDLGCODE habe ich in der MSDN nichts hierzu auffälliges gefunden.

    bis bald
    akari


Anmelden zum Antworten