Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Always on top (https://www.delphipraxis.net/38238-always-top.html)

Savar 16. Jan 2005 16:07


Always on top
 
Wie kann ich erreichen, dass eine Form immer im Vordergrund ist, selbst vor der Taskbar.

SetWindowPos(Form1.Handle, HWND_TOPMOST, ...

hab ich schon probiert, jedoch wenn ich die Windows-Taste drücke oder etwas in der TNA anklicke kommt die Taskbar wieder in den Vordergrund.

SirThornberry 16. Jan 2005 16:11

Re: Always on top
 
grund ist das mit drücken der Windowstaste die Taskbar genau das gleiche macht wie du in deinem Programm, sie bringt sich nach ganz vorn. Lösung wäre das du sändig prüfst ob dein programm ganz vorn ist und wenn dies nicht der Fall ist, bringst du es wieder nach vorn. (es liegt leider in der Natur der Sache das immer nur ein Fenster das oberste Fenster sein kann)

Savar 16. Jan 2005 16:14

Re: Always on top
 
Das leuchtet ein. Wie kann ich ständig eine Prozedur im Hintergrund laufen lassen, die das überprüft.

Karlson 16. Jan 2005 16:30

Re: Always on top
 
z.B. indem du in einem TTimer Event folgendes überprüfst:

Delphi-Quellcode:
 if GetForeGroundWindow <> Handle then BringToFront;

Savar 16. Jan 2005 16:33

Re: Always on top
 
Timer ist eine gute Idee. Dank dir. Werd's gleich ausprobieren.

Savar 16. Jan 2005 16:35

Re: Always on top
 
Wunderbar, es funktioniert. So macht man aus 20 Zeilen unnützem Code eine Zeile, die was bringt. Nochmals danke.

FlinkerFinger 11. Apr 2005 11:15

Re: Always on top
 
Hallo , also ich habe jetzt schon fast alles ausprobiert was ich gefunden habe, jedoch immer wenn ich auf die Verknüpfung drücke, welche mir nur den desktop anzeigt, verschwindet es trotzdem immer wieder.Wie kann ich dem entgegenwirken ??

Ausprobiert habe ich folgendes in einer Timer Prozedur:

Delphi-Quellcode:
    SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);
FormStyle := fsStayOnTop;
SetWindowPos(Hnd, HWND_TOPMOST, Self.Left, Self.Top, Self.Width, Self.Height, SWP_NOSIZE);//on top
if GetForeGroundWindow <> Handle then BringToFront;

Savar 11. Apr 2005 12:34

Re: Always on top
 
Ich glaub das hat was damit zu tun, dass alle Fenster minimiert werden, wenn du auf das Symbol klickst. Es hat also erst mal nichts mit Always on top zu tun. Du kannst vielleicht in deinen Timer noch eine Prozedur einbauen, die dein Fenster wiederherstellt sobald es minimiert wird.

FlinkerFinger 11. Apr 2005 12:36

Re: Always on top
 
Hmm ne ich habe nix veraendert und nur noch die zeile

Delphi-Quellcode:
SetWindowPos(Handle, HWND_TOPMOST, Self.Left, Self.Top, Self.Width, Self.Height, SWP_NOSIZE);
drin und es geht jetzt wunderbar =D auch delphi macht mal fehler so wie mir scheint.

Savar 11. Apr 2005 13:05

Re: Always on top
 
Zitat:

Zitat von FlinkerFinger
Hmm ne ich habe nix veraendert und nur noch die zeile

Delphi-Quellcode:
SetWindowPos(Handle, HWND_TOPMOST, Self.Left, Self.Top, Self.Width, Self.Height, SWP_NOSIZE);
drin und es geht jetzt wunderbar =D auch delphi macht mal fehler so wie mir scheint.

Ich nehm an das NOSIZE verhindert das minimieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:53 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