![]() |
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 |
Re: MainForn StayOnTop
Sollte gehen, wenn die anderen Formulare die Hauptform nicht als Owner haben.
|
Re: MainForn StayOnTop
Zitat:
Gruß oki |
Re: MainForn StayOnTop
Push :oops:
|
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:
Wobei ich nicht weis, ob bei D2007 die Application noch als Fenster angelegt ist. Bei D5 geht das noch so...
SetWindowPos(Application.Handle, HWND_TOPMOST, 0,0,0,0, SWP_NOSIZE or SWP_NOMOVE or SWP_SHOWWINDOW);
|
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 |
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:
|
Re: MainForn StayOnTop
Zitat:
oki |
Re: MainForn StayOnTop
Ich hab deinen Code
Delphi-Quellcode:
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.
SetWindowPos(Application.Handle, HWND_TOPMOST, 0,0,0,0, SWP_NOSIZE or SWP_NOMOVE or SWP_SHOWWINDOW);
Das wars nicht, oder bei mir läuft was richtig schief. Gruß oki |
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 06:09 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