Entwickler-Ecke

Windows API - SendFocus <> SendMessage(hwnd, WM_SETFOCOUS, 0, 0);


Tweafis - Sa 21.06.03 22:02
Titel: SendFocus <> SendMessage(hwnd, WM_SETFOCOUS, 0, 0);
Was ist der unterschied zwischen den Beiden? Ich möchte in eine Listbox per Buttonklick aus einem Editfeld ein neues Item holen, den Text im Edit auf '' setzen und wieder den Focus reinsetzen. Alles geht auch, sogar letzteres, trotzdem interessiert mich:


Delphi-Quelltext
1:
2:
SetFocus(hwndEditAdd);  // geht
SendMessage(hwndEditAdd, WM_SETFOCUS, 00);  // geht nicht


Warum? In der Hilfe zu WM_SETFOCUS steht das die Message kurz bevor der Focus erhalten wird an das Wn geschickt wird. Außerdem zeigt sich danach ein Fehlferhalten bei der Editbox, und zwar kann man nichtsmehr eingeben, auch wenn man nochmal drafuklickt, aber der Caret blinkt. Auch wenn ich einen anderen Button klicke und dann wieder auf das Edit, keine Eingabe möglich und der Caret blinkt lustig weiter. Mit SetFoucs geht es ohne Probleme... aber ich möchte wissen WARUM... :(


Anonymous - Di 24.06.03 00:31

Du hast das schon richtig erkannt:

WM_SETFOCUS ist eine Nachricht ... eine Benachrichtigung. Sie existiert zB dazu, daß das EDIT ein Caret anzeigen oder bei WM_KILLFOCUS verstecken kann! Es ist nicht dazu da den Fokus zu setzen!

Zitat:
The WM_SETFOCUS message is sent to a window after it has gained the keyboard focus.


Das bedeutet immer, die Message WIRD gesendet! Und der Sender ist das System, nicht du! Bei diesen WMs lohnt es nur die Nachrichten auszuwerten, nicht aber sie zu senden!


Tweafis - Di 24.06.03 16:33

Danke!

Gibt es dennoch eine Möglichkeit den Foucs zu setzen, SetFoucs macht das ja auch irgendwie!


Anonymous - Di 24.06.03 18:06

Warum benutzt du dann nicht SetFocus()? Spricht irgendwas dagegen, wa ich jetzt noch nicht weiß?


Tweafis - Di 24.06.03 18:27

Hmm, ich frage mich eben, warum man das nicht per SendMessage machen kann ;)


Anonymous - Di 24.06.03 20:38

Die Erklärung haste ja oben von mir bekommen.

Tcha ... und anders geht es eben nicht :D


Tweafis - Di 24.06.03 20:54

Könnte ja sein, das ich einfach nur die Falsche Msg benutzt habe und es eine gibt die dafür da ist.


Anonymous - Di 24.06.03 22:07

Wäre mir neu ... ich kenne keine solche Message!