![]() |
(Dynamisch erzeugte) Form immer im Vordergrund dargestellen
Moin.
Wie kann ich erreichen, das eine (dynamisch erzeugte) Form immer im Vordergrund dargestellt wird? Mit diesem Code wird die Form nicht mehr im Vordergrund dargestellt wenn ich den Fokus auf einen andere Applikation setze:
Delphi-Quellcode:
Wer weiß Rat?FPasswordForm := TPasswordForm.Create(self); FPasswordForm.FormStyle := fsStayOnTop; ret := FPasswordForm.ShowModal; Vielen Dank |
AW: (Dynamisch erzeugte) Form immer im Vordergrund dargestellen
Hi,
hier ein bisschen Code um diese StayOnTop-Feature ein und auszuschalten.
Delphi-Quellcode:
procedure TForm_Main.spbStayOnTopClick(Sender: TObject);
begin if spbStayOnTop.Down then begin SetWindowPos(Handle, HWND_TOPMOST, Left, Top, Width, Height, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE); end else begin SetWindowPos(Handle, HWND_NOTOPMOST, Left, Top, Width, Height, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE); end; end; |
AW: (Dynamisch erzeugte) Form immer im Vordergrund dargestellen
Oder etwas kürzer:
Delphi-Quellcode:
procedure TForm_Main.spbStayOnTopClick(Sender: TObject);
const IsDown: array[Boolean] of Cardinal = (HWND_NOTOPMOST, HWND_TOPMOST); begin SetWindowPos(Handle, IsDown[spbStayOnTop.Down], Left, Top, Width, Height, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE); end; |
AW: (Dynamisch erzeugte) Form immer im Vordergrund dargestellen
Das funktioniert leider nicht :(
So hab ich es versucht:
Delphi-Quellcode:
Was (interessanterweise) teilweise funktioniert, ist der code den ich unter #1 gepostet habe und wenn ich in der Form folgendes mache:
FPasswordForm := TPasswordForm.Create(self);
SetWindowPos(FPasswordForm.Handle,HWND_TOPMOST,Left, Top, Width, Height,SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE); ret := FPasswordForm.ShowModal;
Delphi-Quellcode:
Wenn ich allerdings folgendes hinzufüge bzw. den Fokus zu Laufzeit mit der Maus auf das Edit setzte, bleibt das Fenster nicht mehr im Vordergrund :shock:
procedure TPasswordForm.FormActivate(Sender: TObject);
begin Position := poScreenCenter; end;
Delphi-Quellcode:
procedure TPasswordForm.FormShow(Sender: TObject);
begin EditPassword.SetFocus; end; |
AW: (Dynamisch erzeugte) Form immer im Vordergrund dargestellen
Pack doch mal den SetWindowPos-Aufruf mit ins FormActive des Passwortforms, das sollte helfen.
|
AW: (Dynamisch erzeugte) Form immer im Vordergrund dargestellen
Zitat:
|
AW: (Dynamisch erzeugte) Form immer im Vordergrund dargestellen
Hilft leider auch nicht.
Habe das in FormShow, FormActivate und FormCreate versucht. |
AW: (Dynamisch erzeugte) Form immer im Vordergrund dargestellen
Zitat:
|
AW: (Dynamisch erzeugte) Form immer im Vordergrund dargestellen
Komisch, ich habe das eben ausprobiert, bei mir geht das :gruebel:
[edit] @GPRSNerd: Solange SWP_NOMOVE und SWP_NOSIZE gesetzt sind, ist es vollkommen wurscht, wie die Koordinaten belegt sind, da sie schlicht ignoriert werden. [/edit] |
AW: (Dynamisch erzeugte) Form immer im Vordergrund dargestellen
@DeddyH: Ich werde mal ein Minimal Beispiel machen und das posten. Wird aber wahrscheinlich erst morgen früh was werden :)
|
AW: (Dynamisch erzeugte) Form immer im Vordergrund dargestellen
Liste der Anhänge anzeigen (Anzahl: 1)
Ich war schneller ;)
|
AW: (Dynamisch erzeugte) Form immer im Vordergrund dargestellen
Liste der Anhänge anzeigen (Anzahl: 1)
So... Okay, Dein Beispiel funktioniert und das Beispiel welches ich zuerst programmiert funktionierte auch.
Dann habe ich geschaut wieso das in meinem eigentlichen Projekt nicht funktioniert und habe gesehen, dass ich wohl die entscheidende Info unterschlagen habe :oops: Es ist so, dass mein Hauptfenster nicht sichtbar ist und die zweite Form durch einen Doppelklick auf das Trayicon der Anwendung erzeugt und dargestellt wird. Und hier tritt nun besagtes Verhalten auf. Das unsichtbar machen des Hautfensters habe ich so erreicht:
Delphi-Quellcode:
Dann hänge ich jetzt noch das Minimalbeispiel an, welches meiner Situation ehr entspricht und hoffe, dass mit da jemand weiterhelfen kann :)
program TopMost;
uses Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2}; {$R *.res} begin Application.Initialize; Application.MainFormOnTaskbar := True; Application.ShowMainForm := False; // <-- Hauptfenster unsichtbar Application.CreateForm(TForm1, Form1); // Application.CreateForm(TForm2, Form2); Application.Run; end. |
AW: (Dynamisch erzeugte) Form immer im Vordergrund dargestellen
OK, jetzt kann ich das Problem nachvollziehen, habe aber im Moment noch keine Lösung, da mir die Ursache noch nicht ganz klar ist.
|
AW: (Dynamisch erzeugte) Form immer im Vordergrund dargestellen
*push*
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 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 by Thomas Breitkreuz