Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi PostMessage - Wert als Hexadezimalzahl übergeben (https://www.delphipraxis.net/115581-postmessage-wert-als-hexadezimalzahl-uebergeben.html)

PatrickB 14. Jun 2008 11:17


PostMessage - Wert als Hexadezimalzahl übergeben
 
Hi,

ich versuche gerade einen Text in ein Feld einzugeben, diesen dann auslesen zu lassen und dann umzuwandeln damit ich ihn per PostMessage verschicken kann. Nun funktioniert das aber nicht so ganz.

Delphi-Quellcode:
var s:integer;
...
s:=strtoint('$'+IntToHex(Ord(str[i]),2));
PostMessage(h, wm_KeyDown, s,0);
Damit ich den String str verschicken kann muss ich ihn zuerst umwandeln.
Also nehm ich den 1. Buchstaben, z.B. A, und wandle ihn um auf $41.
Dadurch, dass $41 dann aber ein String ist, muss ich ihn in einen Integer umwandeln da ja wparam vom Typ integer ist.
Beim konvertieren wird dann $41 aber gleich umgewandelt wodurch ein anderes Symbol und nicht das A verschickt wird.

Hat jemand ne Ahnung und kann mir bitte helfen?


Mfg

PatrickB

Apollonius 14. Jun 2008 11:20

Re: PostMessage - Wert als Hexadezimalzahl übergeben
 
Ord(str[i]) genügt völlig. Du musst aber sicherstellen, dass in str nur Großbuchstaben stehen.

PatrickB 14. Jun 2008 11:22

Re: PostMessage - Wert als Hexadezimalzahl übergeben
 
Und wenn ich aber auch Kleinbuchstaben verschicken will?

Und Ord() liefert ja nur den einzelnen Buchstaben. Muss man das für PostMessage nicht umwandeln?

Reinhard Kern 14. Jun 2008 11:27

Re: PostMessage - Wert als Hexadezimalzahl übergeben
 
Zitat:

Zitat von PatrickB
Und wenn ich aber auch Kleinbuchstaben verschicken will?

Und Ord() liefert ja nur den einzelnen Buchstaben. Muss man das für PostMessage nicht umwandeln?

Hallo,

erst mal zurück auf Anfang: ein 32bit-Integer-Wert besteht aus 4 Bytes, du kannst also max 4 Buchstaben hineinpacken und verschicken. Von String keine Rede. Reicht dir das?

(Gross/klein spielt dabei keine Rolle)

Gruss Reinhard

Apollonius 14. Jun 2008 11:33

Re: PostMessage - Wert als Hexadezimalzahl übergeben
 
WM_KEYDOWN ist keine benutzerdefinierte Nachricht. Windows erwartet einen virtual key code, und die sind für Großbuchstaben nunmal Ord('A')-Ord('Z').
Der von Ord zurückgegebene Wert wird übrigens nicht besser, wenn du ihn mit Inttohex in einen String und dann mit StrToInt wieder zurückwandelst. :wink:
WM_KEYDOWN sagt nur, dass eine Taste gedrückt wurde - ob das in einem Groß- oder einem Kleinbuchstaben resultiert, entscheidet das Programm selbst (mit TranslateMessage).

PatrickB 14. Jun 2008 11:46

Re: PostMessage - Wert als Hexadezimalzahl übergeben
 
Okay, jetzt klappts.
Und es gibt ja auch noch nen Befehl der simuliert, dass die Shift-Taste gedrückt ist.
Dann muss ich ja vor nem Großbuchstaben einfach nur diesen Befehl einfügen, dann müsste es ja klappen =)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45 Uhr.

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