Entwickler-Ecke

Windows API - sendmessage funktioniert nicht


j-a-n@gmx.de - Di 04.07.06 17:25
Titel: sendmessage funktioniert nicht
kann mir jemand sagen, warum folgendes nicht funktioniert?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.inArtikelKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_DIVIDE then begin
    findPositionen();
    sendmessage(application.Handle, WM_KEYDOWN, VK_BACK, 0);
    sendmessage(application.Handle, WM_KEYUP, VK_BACK, 0);
  end;
end;


inArtikel ist ein TEdit und inArtikelKeyDown entsprechend im OnKeyDown-Ereignis angebunden.

ich möchte mit der Geteilt-Taste des Nummernblocks eine prozedur ausführen, das /-Zeichen soll aber nicht im Feld eingetragen werden....

ich habe auch probiert:
sendmessage(inArtikel.Handle, WM_KEYDOWN, VK_BACK, 0);
inArtikel.process(WM_KEYDOWN, VK_BACK, 0);
aber keins tut...


Horschdware - Di 04.07.06 17:30


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.inArtikelKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_DIVIDE then begin
    findPositionen();
    Key := #0;
  end;
end;


j-a-n@gmx.de - Mi 05.07.06 09:54

hmm...
das _var_ hatte ich auch schon gesehen, aber keinen erfolg gehabt.

key ist ein WORD, also ein INTEGER und #0 ein CHAR. Klappt also nicht. Probiert habe ich es von 0 bis 65535, über VK_BACK, VK_NONAME und VK_CLEAR. nichts: das zeichen kommt im Feld!.


crowley - Mi 05.07.06 10:15

na... auf basis des oben schon genannten:



j-a-n@gmx.de - Mi 05.07.06 10:17

user profile iconcrowley hat folgendes geschrieben:
na... auf basis des oben schon genannten:


  • Ord() -> liefert dir zu einem Char den gesuchten KeyCode
  • Statt OnKeyDown besser OnKeyPress verwenden... da hast du als Key einen Char und kein Word


ja schon, weiss ich.
aber ich brauch das WORD um die Tasten des nummernblocks zu erkennen.


j-a-n@gmx.de - Mi 05.07.06 10:25

hab jetzt im "keyup" auch noch key:=0 gesetzt; kein erfolg.


ReDoX - Mi 05.07.06 11:15


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  Msg: TMsg;
begin
  if Key = VK_DIVIDE then
  begin
    Key := 0;
    PeekMessage(Msg, 0, WM_CHAR, WM_CHAR, PM_REMOVE);
    showmessage('foo');
  end;
end;


j-a-n@gmx.de - Mi 05.07.06 14:22

user profile iconReDoX hat folgendes geschrieben:

Delphi-Quelltext
1:
    PeekMessage(Msg, 0, WM_CHAR, WM_CHAR, PM_REMOVE);                    


danke, das funktioniert jetzt.
was macht der Befehl eigendlich? hab in der hilfe nix gefunden...


ReDoX - Mi 05.07.06 14:33

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceui40/html/cerefpeekmessage.asp

Hier wird erklaert.