Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Topmost die Zweite (https://www.delphipraxis.net/87082-topmost-die-zweite.html)

Guido Eisenbeis 23. Feb 2007 01:30


Topmost die Zweite
 
Die Frage aus meinem Thread "Topmost für Form2" blieb unbeantwortet (zumindest hat niemand die eigentliche Frage des Threads beantwortet). Ich dachte eigentlich, hier im Forum bekäme man Antworten. Ich buche das mal unter Fastnachts-Verschleißerscheinungen ab.

Hier der zweite Versuch:

Wie um alles in der Welt stellt man ein Form topmost, das NICHT das Mainform ist? Also Form2, Form3, ...

Zusatzfrage:

Derzeit trage ich gezwungenermaßen das Form, das topmost sein soll, als Mainform im Projekt ein und stelle "FormStyle" auf "fsStayOnTop". Aber dennoch verschwindet es ab und zu, ohne dass ich einen konkreten Grund dafür finden kann. (Und glaubt mir, ich habe gesucht!)

Warum verlässt das Mainform ab und zu den topmost-Modus?

Guido.

holliesoft 23. Feb 2007 05:35

Re: Topmost die Zweite
 
Guten Morgen,

Zitat:

Zitat von Guido Eisenbeis
Die Frage aus meinem Thread "Topmost für Form2" blieb unbeantwortet (zumindest hat niemand die eigentliche Frage des Threads beantwortet). Ich dachte eigentlich, hier im Forum bekäme man Antworten. Ich buche das mal unter Fastnachts-Verschleißerscheinungen ab.

Hier im Forum gibt es auch eine Suchfunktion ;-)
Ich habe die Lösung (s.u.) schon in 2 Threads gepostet.

Zitat:

Zitat von Guido Eisenbeis
Hier der zweite Versuch:

Wie um alles in der Welt stellt man ein Form topmost, das NICHT das Mainform ist? Also Form2, Form3, ...

Du musst beim TApplication.OnDeactivate die Prozedur "Application.RestoreTopmosts" aufrufen.

Zitat:

Zusatzfrage:

Derzeit trage ich gezwungenermaßen das Form, das topmost sein soll, als Mainform im Projekt ein und stelle "FormStyle" auf "fsStayOnTop". Aber dennoch verschwindet es ab und zu, ohne dass ich einen konkreten Grund dafür finden kann. (Und glaubt mir, ich habe gesucht!)

Warum verlässt das Mainform ab und zu den topmost-Modus?

Das Phänomen kenne ich, habe aber leider keine Antwort darauf.
Kann nur bestätigen, dass das selbe ab und zu mit der Uhr aus der Vista Sidebar passiert, die hier StayOnTop läuft.

Grüße
Patrick

Guido Eisenbeis 24. Feb 2007 00:07

Re: Topmost die Zweite
 
Hallo Patrick.

Zitat:

Zitat von holliesoft
Hier im Forum gibt es auch eine Suchfunktion ;-)
Ich habe die Lösung (s.u.) schon in 2 Threads gepostet.

Die Suchfunktion habe ich natürlich schon benutzt (und auch schon ganz Google-Land abgesucht). Leider wird man (insbesondere bei Google) mit (unützen) Ergebnissen erschlagen. Und jetzt, wo ich von deinen beiden Threads wusste, hab ich sie auch gefunden. :-D


Zitat:

Zitat von holliesoft
Zitat:

Zitat von Guido Eisenbeis
... dennoch verschwindet es ab und zu, ohne dass ich einen konkreten Grund dafür finden kann. (Und glaubt mir, ich habe gesucht!)
Warum verlässt das Mainform ab und zu den topmost-Modus?

Das Phänomen kenne ich, habe aber leider keine Antwort darauf.
Kann nur bestätigen, dass das selbe ab und zu mit der Uhr aus der Vista Sidebar passiert, die hier StayOnTop läuft.

Das werden jetzt "Langzeit-Tests" zeigen. :wink:


Zitat:

Zitat von holliesoft
Du musst beim TApplication.OnDeactivate die Prozedur "Application.RestoreTopmosts" aufrufen.

Dies war der entscheidende Hinweis! Vielen Dank dafür!

Ich hatte schon eine andere Lösung getestet, die in CreateParams() das Topmost setzt und den Desktop als Parent für Form2 zuweist. Das würde ansich auch ganz gut funktionieren, hat aber in meinem Fall den Nachteil, dass für Form2 ein weiterer Eintrag in der Taskbar erstellt wird. Wenn ich den mit Params.ExStyle beseitige, wird aber auch im Fenster-Manager ("Alt + Tab") kein Eintrag mehr angezeigt. Das alles lässt sich mit deinem Tip lösen!

Eine Frage zum TApplication.OnDeactivate: wo bekomme ich das her? Derzeit benutze ich eine TApplicationEvents-Komponente, die auch in der Delphi-Hilfe erwähnt wird. Wie hast du das Event erstellt?

Viele Grüße,
Guido.

holliesoft 24. Feb 2007 09:19

Re: Topmost die Zweite
 
Hallo Guido,

Zitat:

Zitat von Guido Eisenbeis
Eine Frage zum TApplication.OnDeactivate: wo bekomme ich das her? Derzeit benutze ich eine TApplicationEvents-Komponente, die auch in der Delphi-Hilfe erwähnt wird. Wie hast du das Event erstellt?

Ich benutze die TApplicationEvents Komponente, die bei der VCL dabei ist. Man könnte den Event zwar auch manuell in den Code aufnehmen:

Einfach eine Prozedur mit dem entsprechenden Code erstellen, z.B.

Delphi-Quellcode:
 procedure TForm1.AppDeactivate(Sender: TObject);
 begin
  Application.RestoreTopMosts;
 end;
und im TForm.Create Deiner Mainform einfach

Delphi-Quellcode:
 Application.OnDeactivate := AppDeactivate;
...wie gesagt, könnte man. Ich selbst bin aber oft so stinkend faul, dass ich einfach TApplicationEvents benutze ;-)

Gruß,
Patrick

Guido Eisenbeis 25. Feb 2007 00:13

Re: Topmost die Zweite
 
Hallo Patrick.

Vielen Dank für die Erklärung! Das beruhigt doch ungemein, wenn man weiß dass man nicht mit Kanonen (TApplicationEvents-Komponente) auf Spatzen schießt.

Übrigens, das Selbsterstellen des Events habe ich versucht. Ich habe dann natürlich noch in der Deklaration von Form1 die Deklaration von AppDeactivate(Sender: TObject); eingefügt. Versucht habe ich es unter private, protected und public. Doch es gab immer irgendwelche Exeptions. Deshalb hab ich dann die VCL-Komponente benutzt.

Vielen Dank und viele Grüße,
Guido.


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