Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi WM_KEYDOWN lparam (https://www.delphipraxis.net/94525-wm_keydown-lparam.html)

Neutral General 22. Jun 2007 17:51


WM_KEYDOWN lparam
 
Hi,

Ich verstehe nicht genau was MSDN mir mit der Beschreibung des LPARAMs sagen will..

Zitat:

Parameters

nVirtKey

Value of wParam. Specifies the virtual-key code of the nonsystem key.

lKeyData (<-- lparam)

Value of lParam. Specifies the repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag, as shown in the following table:

Value Description
0-15 Specifies the repeat count. The value is the number of times the keystroke is repeated as a result of the user holding down the key.
16-23 Specifies the scan code. The value depends on the original equipment manufacturer (OEM).
24 Specifies whether the key is an extended key, such as the right-hand ALT and CTRL keys that appear on an enhanced 101- or 102-key keyboard. The value is 1 if it is an extended key; otherwise, it is 0.
25-28 Reserved; do not use.
29 Specifies the context code. The value is always 0 for a WM_KEYDOWN message.
30 Specifies the previous key state. The value is 1 if the key is down before the message is sent, or it is 0 if the key is up.
31 Specifies the transition state. The value is always 0 for a WM_KEYDOWN message.
Es geht mir vorallem um

Zitat:

24 Specifies whether the key is an extended key, such as the right-hand ALT and CTRL keys that appear on an
Muss ich da jetzt im lparam 24 angeben wenn ich mitteilen will das es sind um einen "extended key" handelt?
PS: Ist VK_LEFT ein Extended Key?

Gruß
Neutral General

Christian Seehase 22. Jun 2007 17:54

Re: WM_KEYDOWN lparam
 
Moin Michael,

nein, Bit 24 muss gesetzt sein.

sirius 22. Jun 2007 17:55

Re: WM_KEYDOWN lparam
 
Zitat:

Muss ich da jetzt im lparam 24 angeben wenn ich mitteilen will das es sind um einen "extended key" handelt?
Du musst bit nummer 24 testen, ob es gesetzt ist oder nicht
Delphi-Quellcode:
if (lparam and 2^24)=2^24 then extended_key
(2^24 natürlich ausrechnen)

Zitat:

PS: Ist VK_LEFT ein Extended Key?
Ich denke nicht. Aber probiers doch aus!

Neutral General 22. Jun 2007 18:09

Re: WM_KEYDOWN lparam
 
Hi,

Danke. Also wenn ich nur bit 24 gesetzt haben will dann brauch ich eigentlich nur 2^24 ausrechnen und diese Zahl als Parameter übergeben oder? Naja es klappt trotzdem nicht.

Versuche gerade

Delphi-Quellcode:
PostMessage(Handle,WM_KEYDOWN,VK_LEFT,0);
PostMessage(Handle,WM_KEYUP,VK_LEFT,0);
an meine Anwendung zu senden. Es passiert im KeyPress aber nichts... Wenn ich VK_LEFT durch Ord('A') ersetze funktioniert es.

Gruß
Neutral General

DeddyH 22. Jun 2007 18:12

Re: WM_KEYDOWN lparam
 
Und mit gesetztem Bit?
Delphi-Quellcode:
PostMessage(Handle,WM_KEYDOWN,VK_LEFT,1 shl 24);
PostMessage(Handle,WM_KEYUP,VK_LEFT,1 shl 24);

Neutral General 22. Jun 2007 18:20

Re: WM_KEYDOWN lparam
 
Hab herausgefunden das WM_KEYUP sowohl mit als auch ohne gesetztem Bit geht. WM_KEYDOWN geht weder mit noch ohne -.-

Neutral General 23. Jun 2007 13:25

Re: WM_KEYDOWN lparam
 
Es sind noch nicht ganz 24 Stunden rum aber ich wollt doch schonmal nachfragen ob jemand den Grund dafür weiß.. Weil ich finde das schons seltsam das das WM_KEYUP ankommt und WM_KEYDOWN nicht..Dann ist auch klar warums nicht ins OnKeyPress Ereignis kommt.. Wo sind denn hier die WinAPI Experten ? :mrgreen:

mleyen 29. Apr 2009 13:47

Re: WM_KEYDOWN lparam
 
Bevor jetzt noch einer mit diesem Problem rumhanpeln muss (wie ich gerade eine ganze zeit lang) poste ich mal die (mögliche) Fehlerquelle:

Insgesamt wird schon das richtige verschickt. Jedoch sagt Windows bzw. der Compiler bei einem VK_Left/Up/Right/Down auf einen Button/Formular/etc wird das Control gewechselt und das KeyEvent gilt als Handled.
Somit wird kein weiteres OnKeyDown/OnKeyUp mehr aufgerufen. :x
Mit einer EditBox funktioniert´s ganz gut, da wechselt der nicht die Controls. (sowohl mit als auch ohne ExtendedKey)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz