Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 

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

  Alt 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 := '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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat