![]() |
mal wieder StayOnTop
Hallöchen!
In meinem Programm soll Form2 immer im Vordergrund bleiben. Bis jetzt hat es nicht funktioniert, folgende Wege habe ich schon probiert:
Hat jemand eine Idee, wie man das machen könnte? Meine Forms haben alle BorderStyle bsNone, auf Form2 ist ein jvTransparentForm (macht aber glaub ich eh keinen Unterschied) und das ganze soll unter XP laufen. |
Re: mal wieder StayOnTop
wenn du mal die zeile mit dem SetWindowLong rausnimmst?
|
Re: mal wieder StayOnTop
Zitat:
|
Re: mal wieder StayOnTop
Ich wollte mal das selbe machen wie Du aber hat auch nicht so hingehauen wie ich wollte. Habe es halt dann mit einem Timer gemacht.
Delphi-Quellcode:
Ist zwar nicht grad die feine Art aber wollte mir kein Kopf mehr mit den anderen Methoden machen. Stehe sowieso grad mit Delphi auf dem Kiegsfuß. *grrrrr*
procedure TForm1.Timer1Timer(Sender: TObject);
begin Application.BringToFront; end; |
Re: mal wieder StayOnTop
Hab's grad mal ausprobiert. Es funktionierte auch, aber das Problem ist, dass ich dann mit anderen Programmen nicht weiterarbeiten kann (es ist nämlich nur so ein kleines Form, was dann unten rechts in der Ecke dauerhaft zu sehen sein soll, man soll inzwischen aber was anderes machen können). Außerdem fing das Programm in der Taskbar ab und zu an zu blinken, so als hätte man es gerade erst geöffnet.
Hast du da vielleicht irgendwelche Bedingungen gesetzt, wann der Timer anfangen soll zu laufen? |
Re: mal wieder StayOnTop
stay on top heisst ja auch nur, dass das formular von den fenstern der EIGENEN anwendung ist. andere anwendungen sind davon nicht betroffen. normalerweise geht das aber auch ohne SetWindowLong...
|
Re: mal wieder StayOnTop
Hallo,
schau hier einmal hier: ![]() und hier: ![]() Hatte das Problem auch gehabt... Gruß Patrick |
Re: mal wieder StayOnTop
hi,
habe das gleiche problem. möchte eine Form immer im Vordergrund haben. Leider habe ich auch diesen zweiten Taskbareintrag, den ich nicht haben will. Kann mir jemand helfen. Konnte hier keine Lösung "rauslesen" :gruebel: |
Re: mal wieder StayOnTop
Der zweite Taskbareintrag kommt durch dieses
Delphi-Quellcode:
Hast du es mal ohne diese Änderung des Parentwindoweintrags versucht?
SetWindowLong(Handle, GWL_HWNDPARENT, 0);
Es gibt aber auch noch die Möglichkeit den Taskbareintrag der Anwendung zu entfernen, dieses könntest du ja mal auf den Eintrag der Form anwenden? |
Re: mal wieder StayOnTop
wenn man das weg lässt, ist es nicht wirklich immer im vordergrund. mache ich den tasbareintrag weg, auch nicht mehr....
|
Re: mal wieder StayOnTop
das, das fenster dann nicht im Vordergrund liegt hängt höchstwahrscheinlich damit zusammen das, das fenster nochmal neu creiert wird (RecreateWnd). Man sollte also sicherstellen das solche Sachen wie "FormStyle", "Position" etc. des Formulars auf Standard stehen damit eben sowas nicht passiert. Oder eben diese Anweisungen erst dann ausführen wenn all diese Sachen abgearbeitet wurden (also frühestens nach dem ersten OnShow)
|
Re: mal wieder StayOnTop
das ist ein fenster, was je nach wunsch angezeigt werden kann. es wird mit .Hide versteckt und mit .Show wieder angezeigt...
|
Re: mal wieder StayOnTop
Liste der Anhänge anzeigen (Anzahl: 1)
also bin bald am verzweifeln :?
habe mal ein bspprog angehängt. die form1 hat keinen taskbareintrag. ruft man Form2.Show auf, hat ist es zwar "Immer im Vordergrund", aber hat einen Taskbareintrag. dieser taskbareintrag soll jedoch auch nicht vorhanden sein. Kann mir jemand helfen? |
Re: mal wieder StayOnTop
Von meinen
![]()
Delphi-Quellcode:
Da das aber mein erster richtiges Projekt mit direkter WinAPI-Nutzung war, bin ich mir nicht sicher, ob ich dieser damit nicht irgendwie ans virtuelle Schienbein trete :stupid: .
procedure TBlobForm.FormShow(Sender: TObject);
begin // Setzt Fenster an die vorderste Front SetWindowPos(Handle, HWND_TOPMOST, Left, Top, Width, Height, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE); // Setzt Parent auf den Desktop SetWindowLong(Handle, GWL_HWNDPARENT, 0); // Versteckt das Fenster in der Taskleiste SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW); end; Funktionieren tut es aber. |
Re: mal wieder StayOnTop
hm. habs versucht aber genau das gleiche prob.... :(
[Edit] Die Viecher sind genial :D |
Re: mal wieder StayOnTop
Hallo,
liest denn keiner mein Posting oben dazu? Ich hatte 2 Links gepostet... :roll: Zitat von dem einen Link: You may try adding Application->RestoreTopMosts(); to the OnDeactivate event handler. Also, bei TApplication.OnDeactivate sollte ein Application.RestoreTopMosts ausgeführt werden. Dann reicht auch
Delphi-Quellcode:
bei der Form2 und es gibt keinen Eintrag in der Taskbar. Hab das so bei meinem Programm
SetWindowPos(Handle, HWND_TOPMOST, Left, Top, Width, Height,
SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE); ![]() Gruß Patrick |
Re: mal wieder StayOnTop
naja,
das funktioniert innerhalb der Anwendung aber nicht überall. mit diesem Code ist Form2 innerhalb der Anwendung StayonTop und das auch ohne Taskbareintrag, aber damit ist nicht das forumlar für windows "Immer im Vordergrund".... habs eben getestet |
Re: mal wieder StayOnTop
Hi n0b0dy,
hast Du denn beim
Delphi-Quellcode:
ein
TApplication.OnDeactivate
Delphi-Quellcode:
ausgeführt?
Application.RestoreTopMosts
|
Re: mal wieder StayOnTop
ja hab ich. will trotzdem net. ich habe die befürchtung dass meine style komponente (sry, vergessen zu erwähnen) das irgendwie verändert...
ich mach den style mal weg und teste es nochmal. |
Re: mal wieder StayOnTop
also, habs nochmal probiert und holliesoft's lösung funzt einwandfrei.
das lag an meinem style, der das wieder rückgängig gemacht hat. also einfach im OnShow folgendes ausführen ...
Delphi-Quellcode:
... und im Application.OnDeactivate das hier ausführen:
SetWindowPos(Handle, HWND_TOPMOST, Left, Top, Width, Height,
SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
Delphi-Quellcode:
Application.RestoreTopMosts
Ciao |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 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