![]() |
ListView on Top
Warum kann ich ein ListView nicht On Top setzen das hinter einem anderen liegt?
VCL halt..
Delphi-Quellcode:
SetWindowPos(ListView1.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
echt lustig.. Nur indem ich das andere zurücksetze ? Wer hat sich das denn ausgedacht.
Delphi-Quellcode:
ListView1.SendToBack;
|
AW: ListView on Top
Wieso verwendest du nicht BringToFront?
...ah wahrscheinlich wegen deinem SWP_NOACTIVATE (?) |
AW: ListView on Top
Bei Controls sollte doch SendToBack/BringToFront garnicht den Focus ändern, womit SWP_NOACTIVATE egal sein müsste.
Sicher, dass es bei "eingebetteten" Controls überhaupt ein HWND_TOPMOST gibt? (ich glaub fast das geht nur bei TopLevel-Fenstern) Außerdem ist Top ganz oben und nicht unten. :roll: Zitat:
ListView1 ist doch das Selbe. SetWindowPos geht auch nur bei allem was ebenso von TWinControl erbt (was also ein Windows-Control ist), außer bei allem was von TGraphicControl erbt (z.B. TLabel oder TImage, was keine "eigenständigen" Controls sind, sondern sich nur auf ihren Parent malen, also immer ganz hinten) |
AW: ListView on Top
Zitat:
Zitat:
Zitat:
HWND_TOPMOST oder HWND_TOP nichts davon funktioniert. Bei meinen API Fenstern habe ich solche Probleme noch nicht erlebt. Zitat:
lege zwei ListViews übereinander und teste es selbst. Mehr muss man nicht tun. Versuche dann mit allen Versionen von SetWindowPos das Hintere Fenster nach vorne zu holen. Bei mir gehts definitiv nicht. |
AW: ListView on Top
HWND_TOPMOST geht nicht,
aber HWND_TOP funktioniert.
Delphi-Quellcode:
Delphi 10.4, aber ich wüsste auch keinen Grund, warum es in anderen Delphis sich anders verhalten sollte. (so sehr hat sich die VCL nicht verändert,
// Timer1.Interval = 5000
procedure TForm1.Timer1Timer(Sender: TObject); begin Caption := '*'; SetWindowPos(ListView1.Handle, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE); end; außer man verpfuscht sich das Leben mit Stylingmist und wundert sich dann hier und da) |
AW: ListView on Top
Nur so als Idee:
Wenn ich Elemente habe die an die gleiche Stelle sollen, verwende ich Karteireiter sprich TPageControl. Mit TabVisible sorge ich dann dafür sorgen, dass die Reiterauswahl ausgeblendet wird. Hier mal aus meinen VCL-Tools:
Delphi-Quellcode:
Anmerkdung in eigener Sache:
Procedure InvisibleTabs(pcCurrent : TPageControl);
var iTab : Integer; tsCurrent : TTabSheet; Begin pcCurrent.TabHeight := 1; for iTab := (pcCurrent.PageCount - 1) downto 0 do Begin tsCurrent := pcCurrent.Pages[iTab]; tsCurrent.TabVisible := False; End; End; Ob man dann
Delphi-Quellcode:
schreibt,
for iTab := 0 to (pcCurrent.PageCount - 1) do
die Zwischenvariable
Delphi-Quellcode:
weg läst
tsCurrent
oder Feind der ungarischen Notation ist, kann ja jeder nach seinem Belieben anpassen. ;-) Das sieht meiner Meinung nach im Fenster ordentlich aus, man kann als Entwickler schön zwischen den Ansichten wechseln und der Anwender sieht nur den Reiter, der gerade "aktiv" ist. Mit freundlichem Gruß Incocnito |
AW: ListView on Top
Und was hält Dich davon ab, "BringToFront" aufzurufen? Eben getestet, funktioniert wie erwartet und verändert auch nicht das fokussierte Element.
|
AW: ListView on Top
Zitat:
Wo ist der Unterschied? Es ging aber auch um SetWindowPos.. warum es gestern nicht ging keine Ahnung. Hat mich wohl etwas geritten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz