Form im Vordergrund halten funktioniert nicht
-
Hallo Leute,
habe ein Programm mit mehreren Forms geschrieben und nun soll das Form5 immer im Vordergrund stehen und die anderen Forms ganz normal bleiben. Wenn ich dem FormStyle zur Entwurfszeit die Eigenschaft StayOnTop gebe, hilft das nix, es steht trotzdem nicht im Vordergrund. Erst wenn ich auch Form1 die Eigenschaft StayOnTop verpasse steht Form5 auch im Vordergrund. Wie kann ich das machen, dass beide unabhängig voneinander reagieren?
Viele Grüße
Striker
-
Eigentlich sollte es so funktionieren, daß wenn du nur genau bei einer Form fsStayOnTop gesetzt hast, dieses dauerhaft im Vordergrund angezeigt wird.
Bei zweien sollte sich sogar die Wirkung wieder aufheben, s. Hilfe:fsStayOnTop Das Formular bleibt immer im Vordergrund, es sei denn, bei anderen Fenstern ist FormStyle auch auf fsStayOnTop gesetzt. Wenn ein fsStayOnTop-Formular ein anderes fsStayOnTop-Formular aufruft, bleibt keines der beiden dauerhaft im Vordergrund.
Hinweis:
Der Wert von FormStyle sollte nicht zur Laufzeit geändert werden.Welche BCB-Version hast du denn?
-
Hallo,
Man kann auch diese Eigenschaft zur Laufzeit mittels WinAPI setzen (und wieder zurück). Das geht so
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); //setzen SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); //zurücksetzen
-
Besten Dank für die Antworten, aber hilft irgendwie nix.
Habe die Möglichkeit von Braunstein mal so probiert, sogar mal mit nem Timerereignis, aber das Fenster bleibt trotzdem nicht im Vordergrund.
Ich nutze den BCB 6.
Habe auch extra noch mal geschaut, kein anderes Form hat die Eigenschaft StayOnTop.
Das Form, was im Vordergrund sein soll, ist so ne Art Benachrichtigungsfenster. Es hat kein SystemMenü und BorderStyle steht auch auf None. Aber das dürfte doch nix mit dem StayOnTop zu tun haben.
-
Hast du den korrekten Handle übergeben? Lass evtl. auch mal SWP_NOACTIVATE weg.
-
- Füge eine neue leere Form deinen Projekt hinzu.
- Deklariere diese als Hauptform, indem du sie unter Projektoptionen->Formulare als oberste Form angibst.
- Gib dieser Form den FormStyle "StayOnTop"
- Baue in der Methode "OnCreate" folgenden Code ein:[code] void __fastcall TForm3::FormCreate(TObject *Sender) { MoveWindow(Handle,0,0,0,0,false); } [/code]Nun dürften deine anderen Forms wie du es möchtest reagieren.

-
So, habe gerade noch mal eure Vorschläge getestet.
Also zum Verständnic, das richtige Handle übergebe ich doch so:SetWindowPos(Form5->Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
oder?
Auf diese Art und Weise habe ich es erstmal in den Vordergrund bekommen, aber nur, wenn Form1 minimiert ist und somit durch das Tray Icon im Tray liegt. Wenn Form1 geöffnet ist liegt mein Form5 zwar über dem Form1, aber nicht über anderen Progs wie Explorer und so. Bekomme ich das vielleicht acuh noch hin, dass es trotz dem Form1 im Vordergrund ist?
Die Lösung von Burkhi habe ich auch mal probiert, aber hat mir nicht ganz so geholfen und dadurch bekomme ich ja noch ein weiteres Form mit rein.Besten Dank schon mal
-
Codeschreiber schrieb:
..dadurch bekomme ich ja noch ein weiteres Form mit rein...
Das ist richtig, aber diese Form siehst du nicht, weil sie die Ausdehung 0 hat.