Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi ListBox TopLevel (https://www.delphipraxis.net/189824-listbox-toplevel.html)

tcoman 1. Aug 2016 17:02

AW: ListBox TopLevel
 
Zitat:

Zitat von EWeiss (Beitrag 1343525)
Gibt es eine Möglichkeit eine ListBox über allen anderen Komponenten zu setzen inklusive der eigenen Mainform?
Damit sie sich so verhält wie eine Combobox?

Ich hab schon so einiges versucht SetWindowPos und die dafür verwendbaren Flags.
Hat nichts gebracht..

Siehe Bild unten das Teil das wie eine Combo aussieht, bekomme ich nicht über die MainForm.

gruss

Wuerde mal das probieren...

ListBox1.BringToFront;
Your_Other_Controls.SendToBack;

MfG,
Terence

EWeiss 1. Aug 2016 17:10

AW: ListBox TopLevel
 
Ich weise nochmal darauf hin.
Zitat:

Danke sorry ist NonVcl (Hätte ich dabei schreiben sollen)
Sagte schon das ich SetWindowPos und Konsorte schon versucht habe.
Ich habe es schon gelöst. Danke.
Werde das Thema deshalb aus meinen Abonnierten Themen entfernen.

gruss

EWeiss 2. Aug 2016 06:38

AW: ListBox TopLevel
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:17 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz