Thema: Delphi ListBox TopLevel

Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#13

AW: ListBox TopLevel

  Alt 2. Aug 2016, 06:38
Ok hier ist die Lösung falls es mal jemand braucht.
Delphi-Quellcode:
WM_LBUTTONDOWN:
  // Die ListBox mit deren Handle auf den Desktop legen
  SetParent(WinHandle, GetDesktopWindow); //(alternativ für GetDesktopWindow einfach 0)
  //TopMost festlegen um das TopLEvel Window zu erhalten
  Skinengine.SetZorder(WinHandle, HWND_TOPMOST);
  //Mouse Event Aufnehmen damit die Mausmessagen an die Layered ListBox weitergereicht werden.
  SetCapture(WinHandle);
  //Layered Attribute für die ListBox setzen
  Skinengine.SetLayeredAlpha(WinHandle, 175);
  ....

WM_LBUTTONUP:
  //Layered Style entfernen sonst sieht man die ListBox nicht mehr. (Child kann kein Layered Window haben)
  OldStyle := GetWindowLong(WinHandle, GWL_EXSTYLE);
  SetWindowLong(WinHandle, GWL_EXSTYLE, OldStyle and (not WS_EX_LAYERED));
  //MouseEvents für die ListBox freigeben
  ReleaseCapture;
  // Vom Desktop zurück in die Hauptanwendung
  SetParent(WinHandle, HParent);
  // ListBox positionieren
  SetWindowPos(WinHandle, HWND_TOP, FLeft, FTop, FWidth - FLeft, FHeight, SWP_NOACTIVATE);
Das wars.
Und das Ergebnis!
Die ListBox ist jetzt TopLevel (geht über die MainForm hinaus und transparent.)

gruss

Geändert von EWeiss (11. Jul 2019 um 15:44 Uhr)
  Mit Zitat antworten Zitat