Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   MainFormOnTaskBar / Modale Fenster / StayOnTop (https://www.delphipraxis.net/143496-mainformontaskbar-modale-fenster-stayontop.html)

ChrisE 17. Nov 2009 07:26


MainFormOnTaskBar / Modale Fenster / StayOnTop
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich habe folgendes Problem mit MainFormOnTaskbar und die Suche brachte mich nicht wirklich weiter. Ich nutzte RAD Studio 2007.

Vereinfachtes Problem (Dummy-Projekt):
Ein Hauptformular hat zwei weitere Fenster. Eines wird mit FormStyle fsStayOnTop erstellt (im OI). Das Hauptformular hat drei Buttons. Einer zeigt das StayOnTop-Child der andere ruft das zweite Child mit ShowModal auf, der dritte zeigt einen MessageDialog.

Problembeschreibung:
Wird in der dpr der Parameter MainformOnTaskbar auf TRUE gesetzt (default) können modale Fenster und Dialoge hinter dem StayOnTop-Child landen und die Anwendung wird unbedienbar. Wird MainformOnTaskbar auf FALSE gesetzt landen modale Fenster und Dialog immer vor dem StayOnTop-Child.

Da MainformOnTaskBar ja wichtig ist für Vista etc. stellt sich die Frage wie man das jetzt Regeln soll?

Im Anhang das Dummy-Projekt.

Danke für Eure Hilfe.

Gruß ChrisE

ChrisE 18. Nov 2009 08:52

Re: MainFormOnTaskBar / Modale Fenster / StayOnTop
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

damit das nicht nur ein Pushen wird hier noch ein paar Erkenntnisse zu dem Problem:

1.
mit Überschreiben von CreateParams in jedem Form gibt es durchaus erste Erfolge. Das ganze habe ich hier her und sieht dann exemplarisch so aus
Delphi-Quellcode:
procedure TMainForm.CreateParams(var params: TCreateParams);
begin
  inherited;
//  params.ExStyle := params.ExStyle or WS_EX_APPWINDOW;
  if Application.MainFormOnTaskbar then
  begin
    params.WndParent := Application.Handle;
  end;
end;
Dadurch wird zuerst einmal das Problem behoben, dass modale Dialoge hinter anderen Dialogen auftauchen.

2.
Aber es entsteht desweiteren ein Z-Order-Problem wenn MainformOnTaskbar an ist. Sobald [Alt+TAB] oder [Windows+TAB] gedrückt werden kann es sein, dass die Fenster nicht mehr in der richtigen Reihenfolge auftauchen.

Es bleibt als weiter unbefriedigend gegenüber MainformOnTaskBar -> FALSE

Ich habe nochmals eine aufgebohrtes Beispielprojekt angehängt.

Ich bitte euch weiter um Unterstützung.

THX, ChrisE

blauweiss 18. Nov 2009 09:49

Re: MainFormOnTaskBar / Modale Fenster / StayOnTop
 
Hallo ChrisE,

nach meiner Erfahrung ist generell von der Verwendung von FormStyle (fsStayOnTop) abzuraten. Es funktioniert nicht zuverlässig.

Stattdessen würde ich folgendes probieren:
Delphi-Quellcode:
  SetWindowLong(aStayOnTopForm.Handle, GWL_HWNDPARENT, Application.MainForm.Handle);
Oder hier statt Application.MainForm.Handle direkt das Handle Deines Hauptformulars angeben.

Grüße,
blauweiss

ChrisE 20. Nov 2009 06:32

Re: MainFormOnTaskBar / Modale Fenster / StayOnTop
 
Hallo alle miteinander,

leider findet sich immer noch keine Lösung um MainFormOnTaskBar richtig zu nutzen.

Hat niemand eine Lösung?

ChrisE 23. Nov 2009 10:21

Re: MainFormOnTaskBar / Modale Fenster / StayOnTop
 
:duck:
*push*

toms 23. Nov 2009 10:37

Re: MainFormOnTaskBar / Modale Fenster / StayOnTop
 
Hallo

Bitte beschreibe nochmals anhand des Demos, was wann bei dir nicht funktioniert.

z.B. Button "Child -> StayOnTop" -> Button "Second Show" -> Fenster "Second Modal" wird hinter "Child On Top" angezeigt.

ChrisE 23. Nov 2009 11:21

Re: MainFormOnTaskBar / Modale Fenster / StayOnTop
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo Toms,

danke das du dich meinem Problem annimmst.

Also:
Mainform -> ChildStayOnTop
ChildStayOnTop -> ChildModal
ChildModal -> SecondModal

Das ist der Ausgangszustand (1.Bild).

Unter Vista jetzt entweder zweimal auf den Eintrag unten in der Taskleiste klicken (Programmeintrag) oder per <Windows>+<Tab> umschalten bis du wieder bei dem Programm bist.
Dadurch entsteht das zweite Bild (siehe Anhang).

Das ganze passiert nur, wenn in der dpr
Delphi-Quellcode:
MainFormOnTaskbar := TRUE
gesetzt wird. Mit FALSE kommt die Anwendung immer wieder so "zurück" wie sie "verlassen" wurde.

Ich hoffe das erklärt mein Problem besser :-)

Greez, Chris

EditP.S.: Es kann auch passieren das alle Fenster hinter dem MainForm liegen nach dem zurückschalten (zweimal wechseln)

ChrisE 25. Nov 2009 06:53

Re: MainFormOnTaskBar / Modale Fenster / StayOnTop
 
:duck:

Es tut mir echt Leid, dass ich schon wieder pushen muss. Aber kann es sein, dass dies einfach ein VCL-Bug ist? Wie verhalten sich Programme bei Delphi 2009/2010. Gibt es da diese Probleme immer noch?

Gruß, Chris

toms 27. Nov 2009 04:48

Re: MainFormOnTaskBar / Modale Fenster / StayOnTop
 
Unter D2010 scheint es dieses Problem nicht zu geben. Da ich D2007 nicht installiert habe, kann ich es dort leider nicht testen.

ChrisE 27. Nov 2009 06:08

Re: MainFormOnTaskBar / Modale Fenster / StayOnTop
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo toms,

danke für die Antwort. Warst ja früh wach :-)

Kannst du mir einen Gefallen tun und das Projekt mit D2010 kompilieren und vorher noch folgende Änderungen vornehmen:
  • MainFormOnTaskBar := TRUE in der dpr
  • CreateParams in jedem Form auskommentieren
oder alterbnativ das Projekt im Anhang kompilieren :-)
Ich würde das gerne mit eigene Augen sehen :shock:

Danke Dir für Deine Hilfe, ich forsche weiter.

Gruß, Chris

toms 29. Nov 2009 05:10

Re: MainFormOnTaskBar / Modale Fenster / StayOnTop
 
Liste der Anhänge anzeigen (Anzahl: 1)
Voilà...

ChrisE 29. Nov 2009 11:59

Re: MainFormOnTaskBar / Modale Fenster / StayOnTop
 
:shock:
Das sind ja gut Aussichten.

Danke Dir. Damit scheint es klar, dass es ein reines Problem von Delphi 2007 ist :-(

Gruß, Chris

ChrisE 30. Nov 2009 05:49

Re: MainFormOnTaskBar / Modale Fenster / StayOnTop
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier mein Gegenbeispiel. Der Quelltext von #10 kompiliert mit Delphi 2007.

Greez, Chris

ralfiii 2. Mär 2011 15:06

AW: Re: MainFormOnTaskBar / Modale Fenster / StayOnTop
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von toms (Beitrag 974646)
Unter D2010 scheint es dieses Problem nicht zu geben. Da ich D2007 nicht installiert habe, kann ich es dort leider nicht testen.

Ich sitz hier gerade völlig sprachlos vor meinem Delphi2010.
Der Fehler ist auch hier drin!!!

Also, ganz simpel zum Ausprobieren:

* Neue Anwendung
* MainForm.FormStyle auf fsStayOnTop setzen
* zweite Form erzeugen
* Button auf erste Form setzen der Form1 mit ShowModal anzeigt.
* Button auf erste Form der ein TForm erzeugt und mit ShowModal anzeigt.

(Delphi2007+ setzt automatisch MainFormOnTaskBar im ProjektFile auf True, das braucht's um dem Fehler zu reproduzieren)

Ich häng ein Mini-Projekt zum Probieren an.
Peinlicher Bug!!!! Böses Emba/Codegear/Whoever!


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