Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
Delphi 12 Athens
|
Re: Message-Only-Window erzeugen - CreateWindow - Windowproc
2. Jun 2007, 06: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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
|