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 fsStayOnTop funktioniert nicht (https://www.delphipraxis.net/84285-fsstayontop-funktioniert-nicht.html)

DevilsCamp 14. Jan 2007 19:57


fsStayOnTop funktioniert nicht
 
Ich habe ein Programm, bei dem ich per Checkbox ein weiteres Fenster (Form2) anzeigen lassen kann. Dabei ist
Delphi-Quellcode:
  Form2.FormStyle := fsStayOnTop;
(im OI eingetragen)


Die OnClick-Methode der Checkbox hat folgenden Code:
Delphi-Quellcode:
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  if CheckBox1.Checked then
  begin
    Application.CreateForm(TForm2, Form2);
    Form2.Show;
  end
  else
  begin
    Form2.Close;
    Form2.Free;
  end;
end;
Doch leider wird dieses zweite Fenster NICHT fsStayOnTop. D.h. wenn ich ein anderes Programm aktiviere, bleibt Form2 leider nicht im Vordergrund.
Ich habe auch schon den Versuch unternommen und Form2 direkt bei Programmstart laden zu lassen. Ebenfalls ohne Erfolg. Habe ich irgendwas übersehen?

mkinzler 14. Jan 2007 20:02

Re: fsStayOnTop funktioniert nicht
 
Die Eigenschaft wirkt m.W. nur für Fenster der selben Anwendung

DevilsCamp 14. Jan 2007 20:07

Re: fsStayOnTop funktioniert nicht
 
Gibt es eine Möglichkeit, dies Systemweit zu machen?

DGL-luke 14. Jan 2007 21:48

Re: fsStayOnTop funktioniert nicht
 
MSDN-Library durchsuchenSetWindowPos.

Allerdings steht überall dabei, dass man sich nicht 100%ig drauf verlassen kann.

Delphi Star 15. Jan 2007 05:03

Re: fsStayOnTop funktioniert nicht
 
fsStayOnTop wirkt nur auf alle Fenster, wenn es im Hauptformular eingestellt ist.
Delphi-Quellcode:
form2.BringToFront;
Damit kann man das Formular in den Vordergrund bringen. Man muss es nur immer wieder wiederholen.

DevilsCamp 15. Jan 2007 07:21

Re: fsStayOnTop funktioniert nicht
 
Zitat:

Zitat von Delphi Star
fsStayOnTop wirkt nur auf alle Fenster, wenn es im Hauptformular eingestellt ist.
Delphi-Quellcode:
form2.BringToFront;
Damit kann man das Formular in den Vordergrund bringen. Man muss es nur immer wieder wiederholen.

Ist das nicht ein bisschen umständlich? Es funktioniert zwar, aber trotzdem sollte es doch einfacher gehen...

Reinhard Kern 15. Jan 2007 10:00

Re: fsStayOnTop funktioniert nicht
 
Zitat:

Zitat von DevilsCamp
Zitat:

Zitat von Delphi Star
fsStayOnTop wirkt nur auf alle Fenster, wenn es im Hauptformular eingestellt ist.
Delphi-Quellcode:
form2.BringToFront;
Damit kann man das Formular in den Vordergrund bringen. Man muss es nur immer wieder wiederholen.

Ist das nicht ein bisschen umständlich? Es funktioniert zwar, aber trotzdem sollte es doch einfacher gehen...

Hallo,

du must dir nur vor Augen halten, dass andere Programmierer ihr Fenster auch als Top-Fenster sehen wollen und dazu auch das gleiche tun können - es kann aber nur eines geben. Das ist dann wie beim Einkaufen, wer sich am brutalsten nach vorne drängelt, hat Erfolg.

Egal welche Funktion angewandt wird, ein Konkurrent könnte ja das Gleiche tun. Dann ist das letzte nach vorne gebrachte Fenster vorne, weil das logisch gesehen die einzig sinnvolle Konsequenz aus der Patt-Situation ist.

Gruss Reinhard

DevilsCamp 15. Jan 2007 10:11

Re: fsStayOnTop funktioniert nicht
 
Das verstehe ich ja. Aber wie kommt es, dass ein Topmost Fenster von Nicht-Topmost Fenstern überlagert wird. DAS ist es, was mich wundert.

DGL-luke 15. Jan 2007 10:13

Re: fsStayOnTop funktioniert nicht
 
Danke für das konsequente ignorieren meiner posts.

Zitat:

Zitat von DGL-luke
MSDN-Library durchsuchenSetWindowPos.

Allerdings steht überall dabei, dass man sich nicht 100%ig drauf verlassen kann.


Reinhard Kern 15. Jan 2007 14:12

Re: fsStayOnTop funktioniert nicht
 
Zitat:

Zitat von DGL-luke
Danke für das konsequente ignorieren meiner posts.
...

Hallo Luke,

das Aneinander-Vorbei-Posten ist halt fester Bestandteil der Internet-Kultur. Betrachte es einfach als Vorbereitung für eine Politiker-Karriere.

Gruss Reinhard

DevilsCamp 15. Jan 2007 14:19

Re: fsStayOnTop funktioniert nicht
 
Zitat:

Zitat von DGL-luke
Danke für das konsequente ignorieren meiner posts.

- "Herr Doktor, Herr Doktor. Ständig werde ich übersehen!"
- "Der Nächste bitte..."
;)


Aber mal Spaß beiseite:
Ich habe deinem Post nicht ignoriert, aber da DelphiStar nach Dir gepostet hatte (mit einer möglichen Lösung) und ich zu faul war mir den englischen Text von der MS-Seite durchzulesen, ist es einfach in der Prioritäts-Liste nach unten gefallen.

Aber inzwischen habe ich den Text nun doch gelesen und für eine "schwachsinnige" Meinung Microsofts befunden, dass ein Topmost-Fenster zu einem Non-Topmost Fenster wird, wenn es in der Z-Reihenfolge nach unten gesetzt wird (wie auch immer).
Allerdings frage ich mich, wie es Programme wie Dexpot schaffen, Fenster PERMANENT als Topmost zu setzen.

Reinhard Kern 15. Jan 2007 17:46

Re: fsStayOnTop funktioniert nicht
 
Zitat:

Zitat von DevilsCamp
...
Allerdings frage ich mich, wie es Programme wie Dexpot schaffen, Fenster PERMANENT als Topmost zu setzen.

Hallo,

ich habe solche Lösungen schon gesehen: einfach brutal, z.B. mit einem Timer die Z-Ordnung prüfen und bei Bedarf sich selbst wieder ganz nach vorne setzen. Aber wie ich ja schon geschrieben habe - im Prinzip könnte das ja jeder so machen. Am Ende beträgt die CPU-Belastung 95% für die Änderungen der Fensteranordnung.

Editiert:
Ausserdem kann man noch die Messages WM_WINDOWPOSCHANGING und WM_WINDOWPOSCHANGED abfangen und bearbeiten.

Gruss Reinhard

holliesoft 16. Jan 2007 12:27

Re: fsStayOnTop funktioniert nicht
 
Hi,

schau mal hier, dort habe ich am 12.09.2005 zwei Links gepostet.
Du musst im Application.OnDeactivate einfach

Delphi-Quellcode:
 
Application.RestoreTopmosts
ausführen.

Gruß
Patrick

DevilsCamp 17. Jan 2007 15:00

Re: fsStayOnTop funktioniert nicht
 
Zitat:

Zitat von holliesoft
Hi,

schau mal hier, dort habe ich am 12.09.2005 zwei Links gepostet.
Du musst im Application.OnDeactivate einfach

Delphi-Quellcode:
 
Application.RestoreTopmosts
ausführen.

Gruß
Patrick

Danke. :thumb:
Ich nutze die Methode aus dem zweiten Link und habe bisher keine Probleme mehr


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