Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.053 Beiträge
 
Delphi 12 Athens
 
#6

Re: Message-Only-Window erzeugen - CreateWindow - Windowproc

  Alt 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 := 'MessageElse 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 := 'MessageElse 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 Hier im Forum suchenCreateWindowEx 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.
  Mit Zitat antworten Zitat