Delphi-PRAXiS
Seite 1 von 2  1 2      

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

napstar 5. Mär 2013 23:06

always on top trotz showmodal?
 
hi.. hab erneut ein problem..
ich habe ein programm das immer im vordergrund bleiben sollte.. das tut es auch... aber nur solange meine nächste form mit showmodal (show bringt mir leider nichts) anzeigen lasse..
meine frage.. kann ich es trotzdem immer im vordergrund behalten.. oder ist das nicht so einfach?

Hansa 5. Mär 2013 23:29

AW: always on top trotz showmodal?
 
Zitat:

Zitat von napstar (Beitrag 1206035)
... aber nur solange meine nächste form mit showmodal (show bringt mir leider nichts) anzeigen lasse..

Du zwingst per ShowModal die eine Form in den Vordergrund und hängst die anderen quasi ab. Und nun soll der Zwang wieder weg sein, aber das muss trotzdem mit Showmodal gemacht werden, weil Show "leider" nichts bringt ? :shock:

napstar 5. Mär 2013 23:42

AW: always on top trotz showmodal?
 
haha... ja bisschen schwer zum erklären.. hat sich aber erledigt..
habs so hinbekommen.. zwar bisschen umständlich.. aber was sollst

Code:
SetWindowPos(Form1.Handle, HWND_TOPMOST,0,0,0,0,SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
den code in einen timer mit niedrigem interval..

mfg napstar

Popov 6. Mär 2013 00:15

AW: always on top trotz showmodal?
 
Dir ist schon klar, dass du bei dem Stand das ShowModal Fenster in den Hintergrund zwingst, aber das ShowModal Fenster trotz dem den Fokus behält? Das Problem ist nur, dass wenn das ShowModal Fenster zufällig von deinem Vordergrund Fenster verdeckt wird und der Nutzer es nicht weiß, dass dadurch u. U. dein ganzes Programm blockiert wird?

cookie22 6. Mär 2013 01:55

AW: always on top trotz showmodal?
 
Popov hat Recht. Warum rufst du das Fenster überhaupt Modal auf, wenn es das nicht sein soll?

Codehunter 6. Mär 2013 07:39

AW: always on top trotz showmodal?
 
Genau so sehe ich das auch. Weg mit ShowModal und stattdessen

Delphi-Quellcode:
SetWindowPos(Form1.handle, HWND_TopMost, 0, 0, 0, 0, SWP_NoMove or SWP_NoSize or SWP_ShowWindow);
Form1.Handle ersetzen durch das des gewünschten Stay-On-Top-Fensters.

Furtbichler 6. Mär 2013 12:16

AW: always on top trotz showmodal?
 
Ich hatte mal den Fall, das ich ein modales Fenster hatte und eine nichtmodale Statusanzeige als permanentes Popup-Fenster. Das wäre ein Szenario, wo ich auf das modale Fenster jetzt nicht so verzichten würde, da es das Hauptformular ist.

Das Statusfenster beschreibt einen Systemzustand, sodaß es selbst ontop sein sollte, wenn z.B. der Explorer über die Anwendung gelegt wird. Nervt zwar, ist aber notwendig.

napstar 6. Mär 2013 14:29

AW: always on top trotz showmodal?
 
alsoo.. die sache ist die... :)
mein programm läuft im vollbildmodus.. und ich nutze meine hauptform als hintergrund.. und es werden nacheinander verschiedene forms per showmodal angezeigt.. mein hintergrund ist immer im vordergrund (also vor allen anderen programmen).. und die anderen forms die später per showmodal angezeigt werden.. sollten immer vor dem hintergrund sein...
also wenn ich es nicht mit showmodal anzeigen lasse.. ist meine geöffnete form immer im hinter meiner mainform.. selbst wenn ich den formstyle in always on top ändere... also wenn ich ausversehn aufm hintergrund klicke, hab ich ein problem :D

ich hoffe ich konnte es diesmal besser erklären ^^


@codehunter.. das schau ich mir gleich an wenn ich zuhause bin.. thx

QuickAndDirty 6. Mär 2013 15:43

AW: always on top trotz showmodal?
 
HWND_TOPMOST
HWND_SUPERTOPMOST
HWND_UBERSUPERTOPMOST

Ich würde mir generell überlegen die Dialoge und Fenster deiner im Vollbild laufenden Anwendung statt auf dem Screen auf der Form anzeigen zu lassen. Damit müsste sich doch das Problem erledigen, oder?

Codehunter 7. Mär 2013 14:58

AW: always on top trotz showmodal?
 
Das Schöne an Windows war ja mal, dass man sich eben nicht mehr um das Leveling der einzenen Fenster kümmern musste. Sobald man aber anfängt, genau da wieder einzugreifen, wirds schwierig. Unter meinen Bekannten (selbst langjährige Delphianer) gilt der Grundsatz: Kombiniere nie fsStayOnTop mit ShowModal. Sonst hat man irgendwann ein "Access violation"-Fenster hinter dem Hauptfenster liegen und wundert sich, dass die gefühlte Endlosschleife gar nicht zu einem Stack Overflow führt... :-D

Nachdem was sich jetzt hier so herauskristallisiert würde ich die Anwendung evtl. in ein MDI-Programm umdesignen, die einzelnen Unterfenster dann als MDI-Childs implementieren und schlicht mit BringToFront arbeiten. Dann kann man das Hauptformular Im Vollbild und fsStayOnTop laufen lassen oder eben HWND_TOPMOST. Die MDI-Childs werden immer "obendrauf hocken".


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

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