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/)
-   -   Was ist 49320? (https://www.delphipraxis.net/158872-ist-49320-a.html)

Mattze 6. Mär 2011 11:15

Was ist 49320?
 
Hallo,

laut Delphi (D7pro) dürfen Windows Botschaften (WM_ usw.) max. 49151 sein.
Nun habe ich aber (unter XP) 49315, 49320, 49326...
Was sind das für Botschaften. Ich finde keine Liste, gibt's da etwas?
Wie kann man die auswerten (außer über Tapplication.onmessage)?

Gruß
Mattze

Aphton 6. Mär 2011 11:36

AW: Was ist 49320?
 
Nun, soweit ich weiß, gibts nur nach unten hin eine Begrenzung - benützterdefinierte Botschaften müssen > WM_USER ($400 [=1024]) sein!

Treten irgendwelche systemweite Fehlerverhalten auf, wenn du Nachrichtenkonstanten größer als diese Zahl verwendest?

Wie Window-callback Funktion sieht ja so aus:
Delphi-Quellcode:
function WndProc(hWnd, uMsg: DWord; wParam, lParam: Integer): Integer; stdcall;
was heißt, dass Messages 32 Bit sind... Du kannst alle Werte im Bereich von [WM_USER+1 .. 2^31] verwenden!

Mattze 6. Mär 2011 11:55

AW: Was ist 49320?
 
Hallo,

danke für die schnelle Hilfe.
Aus der Delphi-Hilfe ("Botschaftsbehandlung" oder so ähnlich):
Zitat:

Sie erstellen eine Botschaftsmethode, indem Sie die Direktive message und eine Integer-Konstante zwischen 1 und 49151 (die so genannte Botschafts-ID) in eine Methodendeklaration aufnehmen.
Gut, also die WndProc. Hätte mir ja einfallen können, da ich das schon einige Male gemacht habe.

Bleibt nur das Problem, was das für Botschaften sind über 49151.

Gruß
Mattze

Aphton 6. Mär 2011 13:09

AW: Was ist 49320?
 
Hmm, kann sein, dass sie evt. veraltet ist und früher das einmal so war. kA!

Zitat:

Zitat von Borland Delphi Hilfe
Deklaration eines Botschaftsbezeichners

Ein Botschaftsbezeichner ist eine Konstante im Integer-Format. Windows reserviert die Botschaften unterhalb von 1024 für den eigenen Gebrauch. Sie können deshalb erst über dieser Grenze mit der Deklaration Ihrer Botschaften beginnen.

Die Konstante WM_APP repräsentiert die Anfangsnummer für benutzerdefinierte Botschaften. Definieren Sie ihre Botschaftsbezeichner beginnend bei WM_APP.

Einige Standard-Steuerelemente von Windows benutzen Botschaften, die im Bereich der benutzerdefinierten Botschaften liegen. Dazu gehören Listenfelder, Kombinationsfelder, Eingabefelder und Befehlsschaltflächen. Wenn Sie eine Komponente aus einem dieser Elemente ableiten und dafür eine neue Botschaft definieren wollen, müssen Sie in der Unit Messages überprüfen, welche Botschaften Windows bereits für das Steuerelement definiert hat.


Mattze 6. Mär 2011 14:21

AW: Was ist 49320?
 
Hallo,

das kann durchaus veraltet sein! Ich schrieb ja "D7 pro".
Ich habe es natürlich auch mal mit 49320 probiert. Das hat dann gleich der Compiler abgewehrt und nicht übersetzt.

Ist aber auch nicht sooo schlimm, da man das ja über die WndProc abfragen und machen kann. (Ich habe das in TApplication.OnMessages probiert. Da geht das auch problemlos. Es ist nur bei der Definition einer Behandlungsroutine hinter "message" nicht erlaubt.)

Bleibt also wirklich nur die Frage, was das eigentlich für eine Botschaft ist. In einer Liste (per Google) habe ich es bisher nicht gefunden. Ich suche weiter...

Gruß
Mattze

Assarbad 6. Mär 2011 15:25

AW: Was ist 49320?
 
Code:
#define WM_APP                         0x8000
#define WM_USER                        0x0400
In der Dokumentation findet man dann:

Zitat:

Zitat von MSDN aus VS 2005
0 through WM_USER–1: Messages reserved for use by the system.
WM_USER through 0x7FFF: Integer messages for use by private window classes.
WM_APP through 0xBFFF: Messages available for use by applications.
0xC000 through 0xFFFF: String messages for use by applications.
Greater than 0xFFFF: Reserved by the system.

Wenn wir uns dann die Nachricht mal als Hexzahl angucken 0xC0A8, sehen wir, daß es sich um eine "String-Nachricht" handelt (s.o.).

Wenn wir dann nochmal mit diesem kleinen Programm von mir nachgucken, wissen wir, daß es es zum Zeitpunkt der Erstellung des Programms keine vom Platform SDK definierte Nachricht gab die exakt diesem Wert entspricht/entsprach.

Zitat:

Zitat von Mattze (Beitrag 1086206)
Bleibt nur das Problem, was das für Botschaften sind über 49151.

49151 == 0xBFFF ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:06 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