AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ListBox TopLevel

Ein Thema von EWeiss · begonnen am 26. Jul 2016 · letzter Beitrag vom 2. Aug 2016
Antwort Antwort
Seite 2 von 2     12   
tcoman
(Gast)

n/a Beiträge
 
#11

AW: ListBox TopLevel

  Alt 1. Aug 2016, 18:02
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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#12

AW: ListBox TopLevel

  Alt 1. Aug 2016, 18:10
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

Geändert von EWeiss ( 1. Aug 2016 um 18:15 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#13

AW: ListBox TopLevel

  Alt 2. Aug 2016, 07: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 16:44 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:24 Uhr.
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