Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   ListView on Top (https://www.delphipraxis.net/206395-listview-top.html)

venice2 16. Dez 2020 21:50


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;

Michael II 16. Dez 2020 23:22

AW: ListView on Top
 
Wieso verwendest du nicht BringToFront?

...ah wahrscheinlich wegen deinem SWP_NOACTIVATE (?)

himitsu 17. Dez 2020 00:40

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:

Nur indem ich das andere zurücksetze ?
Delphi-Quellcode:
ListView1.SendToBack;

Das "Andere"?
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)

venice2 17. Dez 2020 01:05

AW: ListView on Top
 
Zitat:

...ah wahrscheinlich wegen deinem SWP_NOACTIVATE (?)
Zitat:

Without the SWP_NOACTIVATE flag, the zorder is changed and the window is activated.
With the flag, only the zorder is changed, but the window is not activated.
Zitat:

Das "Andere"?
ListView1 ist doch das Selbe.
Das andere ist ListView2 welches sich dahinter befindet.

HWND_TOPMOST oder HWND_TOP nichts davon funktioniert.
Bei meinen API Fenstern habe ich solche Probleme noch nicht erlebt.
Zitat:

Und es geht auch nur bei allem was von ebenso von TWinControl erbt (was also ein Windows-Control ist),
Eben nicht.

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.

himitsu 17. Dez 2020 02:04

AW: ListView on Top
 
HWND_TOPMOST geht nicht,
aber HWND_TOP funktioniert.



Delphi-Quellcode:
// 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;
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,
außer man verpfuscht sich das Leben mit Stylingmist und wundert sich dann hier und da)

Incocnito 17. Dez 2020 07:18

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:
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;
Anmerkdung in eigener Sache:
Ob man dann
Delphi-Quellcode:
for iTab := 0 to (pcCurrent.PageCount - 1) do
schreibt,
die Zwischenvariable
Delphi-Quellcode:
tsCurrent
weg läst
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

Daniel 17. Dez 2020 07:34

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.

venice2 17. Dez 2020 11:57

AW: ListView on Top
 
Zitat:

Zitat von Daniel (Beitrag 1479332)
Und was hält Dich davon ab, "BringToFront" aufzurufen? Eben getestet, funktioniert wie erwartet und verändert auch nicht das fokussierte Element.

Weil ich ListView1.SendToBack; verwende.
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 15:48 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