TEdit und VK_TAB



  • Hallo. Mit der Tabluatortaste geht man ja normalerweise die Eingabekomponenten in seiner Form durch. Ich habe nun ein TEdit und möchte gern das auf die VK_TAB Eingabe eine eigene Aktion ausgelöst wird. Problem an der Sache ist, das VK_TAB scheinbar nicht abgefangen wird. Wie kann ich ich in KeyPress bzw KeyDown VK_TAB angesprochen bekommen und meine eigene Aktion durchführen, so das es nicht mehr den Focus verliert?



  • Gar nicht, das geht offensichtlich nur im KeyUp-Event.

    [EDIT] Damit der Fokus nicht gewechselt wird, reicht es, in den Edits TabStop = false zu setzen.



  • Danke, aber für den BCB5 stimmt beides nicht. TabStop bedeutet für das TEdit lediglich das es nicht mehr angesprungen wird, aber es kann mit TAB rausgesprungen werden. Auch der Hinweis mit KeyUp funktioniert so nicht in BCB5. Hat ich alles schon probiert. 😉



  • @akari: Kannst Du das mal im BCB5 testen? In meinem BCB6 funktioniert das problemlos in der KeyUp.



  • Hallo

    Ja ich kann muffy bestätigen. Im BCB5 kann TEdit mit keinem der Key-Events den Tabulator abfangen. Vermutlich must du von TEdit ableiten und dort die entsprechende Windows-Message abfangen.

    bis bald
    akari



  • Danke akari. Ich hatte es schon befürchtet, aber gehofft, es wäre ein 'Anwenderfehler'...



  • Argh. Das Edit das ich nutzen möchte verarbeitet bereits Messages, aber welches muss ich für TAB abfangen und wie verwenden? Wäre nett wenn ihr da weiterhelfen könntet. Danke. 🙂

    TAdvEdit = class(TEdit)
      private
        procedure WMChar(var Msg: TWMKey); message WM_Char;
      protected
        procedure WndProc(var Message: TMessage); override;
      end;
    
    procedure TAdvEdit.WndProc(var Message: TMessage);
    begin
      if (Message.Msg = WM_SETFOCUS) or (Message.Msg = WM_MOUSEACTIVATE)
       then SendMessage(Handle, EM_SETREADONLY, 0, 0);
      inherited WndProc(Message);
    end;
    
    procedure TAdvEdit.WMChar(var Msg: TWMKey);
    begin
     inherited;
    end;
    


  • Ich denke das der richtige Weg, aber der Code bewirkt leider keinerlei Veränderung. 😞

    procedure TAdvEdit.WndProc(var Message: TMessage);
    begin
      case Message.Msg of
        WM_KEYDOWN, WM_SYSKEYDOWN:
          begin
              case TWMKey(Message).CharCode of
                VK_TAB:
                    begin
                      TWMKey(Message).CharCode := 0;
                      inherited;
                    end;
                end;
          end;
        else
            inherited ;
      end;
    end;
    




  • Wahnsinn, das hat geholfen. Vielen Dank!
    Kleiner Zusatz, wenn man in KeyPress ebenfalls RETURN oder TAB abfragt und dort Key=0 setzt, dann verschwindet auch der hässliche "bong" Ton.


Anmelden zum Antworten