Autor Beitrag
Tastaro
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 413
Erhaltene Danke: 23



BeitragVerfasst: Di 09.02.21 15:32 
Hallo,

ich habe in meinem Programm u.a. ein nicht-modales Fenster, das mit show angezeigt wird.
Wenn sie dann sichtbar sind und ich wieder auf das Hauptfenster klicke, dann kommt das Hauptfenster in den Vordergrund und das nicht-modale Fenster verschwindet nach hinten.

Das wollte ich nun auch in einer anderen Anwendung machen. Leider bin ich dabei auf ein Problem gestoßen
Das nicht-modale Fenster wird angezeigt. Wenn ich dann das Hauptfenster anklicke bekommt dieses zwar den Eingabefokus, aber es kommt nicht in den Vordergrund. Statt dessen bleibt es hinten und wird weiterhin von dem nicht-modalen Fenster verdeckt.

Ich habe wild gesucht was der Unterschied zwischen meinen beiden Anwendungen ist, bin aber leider nicht fündig geworden.
Habt ihr zufällig eine Idee woran es liegen könnte, dass das Fenster vorne bleibt?

Beste Grüße
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8488
Erhaltene Danke: 451

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 09.02.21 15:47 
Um das Verhalten zu ändern (d.h. andere Fenster können hinter das Hauptfenster rutschen), kann man entweder in der Projektdatei entweder
Application.MainFormOnTaskBar := False; setzen (das war in älteren Delphi-Versionen standard). Das hat aber ggf. noch andere Nebeneffekte.

Eine andere Möglichkeit ist es, die CreateParams überschreiben, per
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TMyOtherForm.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.WndParent := Application.Handle;
end;

_________________
We are, we were and will not be.

Für diesen Beitrag haben gedankt: Tastaro
Tastaro Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 413
Erhaltene Danke: 23



BeitragVerfasst: Di 09.02.21 15:55 
user profile iconGausi hat folgendes geschrieben Zum zitierten Posting springen:
Um das Verhalten zu ändern (d.h. andere Fenster können hinter das Hauptfenster rutschen), kann man entweder in der Projektdatei entweder
Application.MainFormOnTaskBar := False; setzen (das war in älteren Delphi-Versionen standard). Das hat aber ggf. noch andere Nebeneffekte.

Eine andere Möglichkeit ist es, die CreateParams überschreiben, per
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TMyOtherForm.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.WndParent := Application.Handle;
end;


Danke schonmal!

Ich guck mal ob ich eins davon in meiner anderen Applikation finde. Mich macht ja verrückt, dass es da geht und ich nicht weiß warum.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4507
Erhaltene Danke: 929


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 09.02.21 19:39 
Bin mittlerweile völlig unbewandert in der VCL aber im allgemeinen kommt es drauf an ob der Parent einer Form gesetzt ist oder nicht.
Mit Parent wird diese Form immer vor seinem Parent angezeigt ohne Parent ist die Stapelreihenfolge frei änderbar.

Für diesen Beitrag haben gedankt: Tastaro
Tastaro Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 413
Erhaltene Danke: 23



BeitragVerfasst: Mi 10.02.21 07:05 
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Bin mittlerweile völlig unbewandert in der VCL aber im allgemeinen kommt es drauf an ob der Parent einer Form gesetzt ist oder nicht.
Mit Parent wird diese Form immer vor seinem Parent angezeigt ohne Parent ist die Stapelreihenfolge frei änderbar.


Auch dir vielen Dank für den Hinweis.
Wenn ich Parent des Fensters auf nil setze, dann geht es in der Hintergrund. Auch die Methode von user profile iconGausi mit dem Überschreiben von CreateParam funktioniert.

Korrektur: Parent auf nil geht doch nicht. Hatte noch zusätzlich das CreateParams drin. :roll:


Das "alte Programm" in dem das schon seit ein paar Jahren klappt enthält aber keines von beiden. Ich habe auch die Properties der Fenster verglichen und keinen Unterscheid gefunden.
Ich HASSE es wenn etwas funktioniert und ich nicht weiß warum.
Für weitere Fenster kann ich jetzt natürlich auf eure Tipps zurückgreifen. Aber ich glaube ich werde heute trotzdem nochmal Zeit in die "Forschung" investieren, um herauszubekommen warum das in der anderen Software geht. Verf*ckt nochmal! :)