Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.053 Beiträge
Delphi 12 Athens
|
Re: Message-Only-Window erzeugen - CreateWindow - Windowproc
2. Jun 2007, 07:36
Oder man nimmt den dafür vorgesehenen Klassen-Typen.
Seit Windows 2000 gibt es den Typ "Message" und davor sollte man laut MS einfach ein "STATIC" hierfür mißbrauchen.
Hier mal 'nen Auszug daraus, wie ich ein derartiges Fenster erzeuge:
Delphi-Quellcode:
Procedure InstallGlobalMessageWindow;
Var PID: THandle;
PIDS: packed Array[1..16] of AnsiChar;
VI: TOSVersionInfoA;
WindowType: Array[1..8] of AnsiChar;
Begin
VI.OSVersionInfoSize := SizeOf(TOSVersionInfoA);
If GetVersionExA(VI) and (VI.MajorVersion >= 5) Then
WindowType := 'Message'#0 Else WindowType := 'STATIC'#0#0;
PID := GetCurrentProcessID;
PIDS := 'UCC_GMW????????'#0;
IntToHexChars(PAnsiChar(@PIDS) + 7, LongInt(PID));
GlobalUCCMessageWindow := FindWindowA(@WindowType, @PIDS);
If GlobalUCCMessageWindow = 0 Then Begin
GlobalUCCMessageWindow := CreateWindowExA(0, @WindowType, @PIDS, WS_POPUP, 0, 0, 0, 0, 0, 0, PID, nil);
If GlobalUCCMessageWindow = 0 Then BasicError(@SGlobalUCCMessageWindowCanNotCreate);
End;
End;
Mit festem Namen und/oder ohne Prüfung ob es schon existeirt, würde es dann wohl so aussehn:
Delphi-Quellcode:
Procedure InstallGlobalMessageWindow;
Var VI: TOSVersionInfoA;
WindowType: String;
Begin
VI.OSVersionInfoSize := SizeOf(TOSVersionInfoA);
If GetVersionExA(VI) and (VI.MajorVersion >= 5) Then
WindowType := 'Message' Else WindowType := 'STATIC';
GlobalUCCMessageWindow := FindWindowA(PChar(WindowType), 'myMessageWindow');
If GlobalUCCMessageWindow = 0 Then Begin
GlobalUCCMessageWindow := CreateWindowExA(0, PChar(WindowType), 'myMessageWindow',
WS_POPUP, 0, 0, 0, 0, 0, 0, GetCurrentProcessID, nil);
If GlobalUCCMessageWindow = 0 Then BasicError(@SGlobalUCCMessageWindowCanNotCreate);
End;
End;
Procedure InstallGlobalMessageWindow;
Var VI: TOSVersionInfoA;
WindowType: String;
Begin
VI.OSVersionInfoSize := SizeOf(TOSVersionInfoA);
If GetVersionExA(VI) and (VI.MajorVersion >= 5) Then
WindowType := 'Message' Else WindowType := 'STATIC';
GlobalUCCMessageWindow := CreateWindowExA(0, PChar(WindowType), 'myMessageWindow',
WS_POPUP, 0, 0, 0, 0, 0, 0, GetCurrentProcessID, nil);
If GlobalUCCMessageWindow = 0 Then BasicError(@SGlobalUCCMessageWindowCanNotCreate);
End;
Genaueres konnte man irgenwo unter CreateWindowEx nachlesen, von wo ich es (glaub ich jedenfalls) auch mal her hatte.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
|