Delphi-PRAXiS
Seite 1 von 2  1 2      

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 MainForn StayOnTop (https://www.delphipraxis.net/133168-mainforn-stayontop.html)

oki 27. Apr 2009 07:44


MainForn StayOnTop
 
Moin Leute,

ich möchte folgendes erreichen:

Meine Anwendung besteht aus mehreren Fenstern, wobei das MainForm die Haupt-ToolBar hält. Jetzt möchte ich, dass mein MainForm StayOnTop wird, damit die anderen Fenster nicht das MainForm überlagern können (eine MDI-Anwendung kommt nicht in frage!).

Jetzt habe ich folgendes Problem. Wenn ich meinem MainForm die Eigenschaft StayOnTop zuweise, dann scheinen alle meine Anwendungsformulare diese Eigenschaft auch zu bekommen. Nicht nur, das alle Formulare gegenüber anderen Anwendungen StayOnTop werden, sondern in der Anwendung etabliert sich eine "feste Hirarchie". Das zeigt sich darin, dass ein Fenster, dass in der Z-Liste meiner Anwendung weiter unten steht nicht mehr durch Anclicken vor ein anderes Fenster gebracht werden kann.

Kennt jemand eine Lösung, wie ich das MainForm meiner Anwendung StayOnTop bekomme, ohne dass alle anderen Fenster meiner Anwedung davon betroffen sind?

Gruß oki

Tyrael Y. 27. Apr 2009 08:12

Re: MainForn StayOnTop
 
Sollte gehen, wenn die anderen Formulare die Hauptform nicht als Owner haben.

oki 27. Apr 2009 09:28

Re: MainForn StayOnTop
 
Zitat:

Zitat von Tyrael Y.
Sollte gehen, wenn die anderen Formulare die Hauptform nicht als Owner haben.

Ähmm :gruebel: sollten sie nicht haben, werden alle mittels Application.CreateForm creiert. Entweder ich hab da einen Denkfehler oder das wars nicht.

Gruß oki

oki 28. Apr 2009 09:36

Re: MainForn StayOnTop
 
Push :oops:

Satty67 28. Apr 2009 10:23

Re: MainForn StayOnTop
 
Ich hoffe, ich hab' dich richtig verstanden.

Deine Anwendung soll gegenüber anderen Anwendungsfenstern TopMost sein, aber seine eigenen fenster normal ohne Hirarchy behandeln?

Alle Fenster auf fsNormal, denn Application ist dann das TopMost-Fenster:
Delphi-Quellcode:
SetWindowPos(Application.Handle, HWND_TOPMOST, 0,0,0,0, SWP_NOSIZE or SWP_NOMOVE or SWP_SHOWWINDOW);
Wobei ich nicht weis, ob bei D2007 die Application noch als Fenster angelegt ist. Bei D5 geht das noch so...

oki 28. Apr 2009 10:26

Re: MainForn StayOnTop
 
HiSatty67,

ja, so soll es sein. Zusätzlich soll keins meiner anderen Anwendungsfenster mein Main überlagern.

Ich teste mal deinen Code.

Dank und Gruß oki

Satty67 28. Apr 2009 10:30

Re: MainForn StayOnTop
 
Top, Left und CO kann natürlich auf 0 gesetzt werden (Copy&Paste Error).

Was ich festgestellt hab', das beim ersten öffnen einer neuen Anwendung sich ein Fenster drüber schieben kann, danach aber wieder das gewünschte Verhalten. Als evtl. bei Focus-Verlust noch ein SetForegroundWindow.

Zudem kann man es in <MainForm>.OnActivate reinsetzen, dann wird es immer wieder erneuert, falls ein anderes Fenster den TopMost-Status schnappen wollte.
Zitat:

Zitat von oki
Zusätzlich soll keins meiner anderen Anwendungsfenster mein Main überlagern.

Dann statt Application.Handle doch MainForm.Handle

oki 28. Apr 2009 10:34

Re: MainForn StayOnTop
 
Zitat:

Zitat von Satty67
Zudem kann man es in <MainForm>.OnActivate reinsetzen, dann wird es immer wieder erneuert, falls ein anderes Fenster den TopMost-Status schnappen wollte.

wird OnActivate auch aufgerufen wenn das Fenster den Focus verliert?

oki

oki 28. Apr 2009 10:39

Re: MainForn StayOnTop
 
Ich hab deinen Code
Delphi-Quellcode:
SetWindowPos(Application.Handle, HWND_TOPMOST, 0,0,0,0, SWP_NOSIZE or SWP_NOMOVE or SWP_SHOWWINDOW);
in mein OnActivate aufgenommen. Bezüglich des Verhaltens des MainForm hat sich zwar was geändert, aber nicht was ich wollte :mrgreen: Das Main ist weiterhin nicht stayonTop, reagiert jetzt aber nicht mehr auf MausClicks. Ich sehe an der Toolbar den HotTrack, wenn ich mit der Maus darüber fahre, Clicks werden aber nicht verarbeitet.

Das wars nicht, oder bei mir läuft was richtig schief.

Gruß oki

Satty67 28. Apr 2009 10:41

Re: MainForn StayOnTop
 
OnActivate bzw. onDeactivate wenn das Fenster den Focus bekommt bzw. verliert. Allerdings glaube ich nur beim Wechsel der Fenster innerhalb der Anwendung.

Für Wechsel aus/in die Anwendung des Focis wird man wohl ApplicationEvent (Komponente) und dort das onActivate/onDeactivate nehmen müssen.


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