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.