Delphi-PRAXiS
Seite 1 von 2  1 2      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:42 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz