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 Form kommt nicht in den Vordergrund, neuer VCL Bug in D2009? (https://www.delphipraxis.net/124860-form-kommt-nicht-den-vordergrund-neuer-vcl-bug-d2009.html)

Assertor 26. Nov 2008 14:07


Form kommt nicht in den Vordergrund, neuer VCL Bug in D2009?
 
Hi,

kurze Frage, hat jemand anders auch mit D2009 ein Problem mit übereinanderliegenden Forms?

Testlauf:
- Projekt mit D2009 defaults, Form1 und Form2 erzeugen
- Button auf Form1, der Form2.Show aufruft
- starten

In D2006 wäre es jetzt so, daß wenn Form2 offen ist und man zwischen den Forms hin- und herklickt (aktives Form also wechselt), daß das jeweils andere in den Hintergrund geht.

Bei D2009 bleiben beide Forms im Vordergrund, es ändert sich nur der aktive Zustand.

Hat jemand hierzu einen QC? Betrifft das nur meine Installation?

Gruß Assertor

divBy0 26. Nov 2008 14:22

Re: Form kommt nicht in den Vordergrund, neuer VCL Bug in D2
 
Ist mir bis jetzt noch nicht aufgefallen. D2009 und Vista 64.

Assertor 26. Nov 2008 14:36

Re: Form kommt nicht in den Vordergrund, neuer VCL Bug in D2
 
Hi divBy0,

Zitat:

Zitat von divBy0
Ist mir bis jetzt noch nicht aufgefallen. D2009 und Vista 64.

Ok, danke fürs Feedback. Hast Du das gerade getestet oder bloß bisher (noch) nicht bemerkt? Ich kann das (leider) hier jedesmal reproduzieren... In einem leeren, neuen Projekt.

Gruß Assertor

divBy0 26. Nov 2008 14:53

Re: Form kommt nicht in den Vordergrund, neuer VCL Bug in D2
 
Auf der Arbeit haben wir noch D2007, zu Hause habe ich D2009 und abends bastel ich gerade an einer kleinen DMX-Controller-Software, da hab' ich mehrere Forms, da ist der Fehler nicht aufgetreten.

Assertor 26. Nov 2008 14:55

Re: Form kommt nicht in den Vordergrund, neuer VCL Bug in D2
 
Liste der Anhänge anzeigen (Anzahl: 4)
Ok, ich hab jetzt mal ein paar Screenshots gemacht... Die verdeutlichen das Problem besser.

Gruß Assertor

divBy0 26. Nov 2008 15:05

Re: Form kommt nicht in den Vordergrund, neuer VCL Bug in D2
 
:shock:
Das probiere ich heute Abend mal aus.

EDIT:

:shock: :shock: :shock: Gleicher Fehler auch bei D2007 und XP pro SP2. Gerade getestet. :shock: :shock: :shock:

Assertor 26. Nov 2008 15:26

Re: Form kommt nicht in den Vordergrund, neuer VCL Bug in D2
 
Zitat:

Zitat von divBy0
:shock:
Das probiere ich heute Abend mal aus.

EDIT:

:shock: :shock: :shock: Gleicher Fehler auch bei D2007 und XP pro SP2. Gerade getestet. :shock: :shock: :shock:

Ok, danke Dir! Ich bin gleich auch erstmal weg und schau dann nachher wieder rein.

Übrigens: Falls jemand sagt, es läge an MainFormOnTaskbar - nein, das ist es nicht :)

Gruß Assertor

GPRSNerd 26. Nov 2008 15:37

Re: Form kommt nicht in den Vordergrund, neuer VCL Bug in D2
 
Hi,

hast du mal die Ide/VCL Fix Packs von Andreas ausprobiert?
Da sind ein paar Fixes für ähnliche Probleme drin...
Speziell:
# QC #59963: Closing non-modal forms after a task switch can deactivate the application (2007-2009)
# QC #66892: Closing forms deactivates the application (missing “stdcall”) (2009)

http://andy.jgknet.de/blog/?p=308

Gruß,
Stefan

jbg 26. Nov 2008 17:33

Re: Form kommt nicht in den Vordergrund, neuer VCL Bug in D2
 
Zitat:

hast du mal die Ide/VCL Fix Packs von Andreas ausprobiert?
Da geht es um das Schließen von Formularen. Hier geht es aber um die z-order der Formulare.


Zitat:

Zitat von Assertor
Hat jemand hierzu einen QC? Betrifft das nur meine Installation?

Mach einen auf, und ich schließe den mit "As Designed".

Zitat:

Übrigens: Falls jemand sagt, es läge an MainFormOnTaskbar - nein, das ist es nicht
Sorry, dass ich dich enttäuchen muss, aber es liegt daran.

divBy0 26. Nov 2008 17:59

Re: Form kommt nicht in den Vordergrund, neuer VCL Bug in D2
 
Jetzt hast du mich aber durcheinander gebracht. :-D

Ist doch ganz normal, setz

Delphi-Quellcode:
Application.MainFormOnTaskbar := False;
,dann geht es auch.

Assertor 26. Nov 2008 18:20

Re: Form kommt nicht in den Vordergrund, neuer VCL Bug in D2
 
Hi Andreas,

Zitat:

Zitat von jbg
Zitat:

Zitat von Assertor
Hat jemand hierzu einen QC? Betrifft das nur meine Installation?

Mach einen auf, und ich schließe den mit "As Designed".

Entschuldige mal, aber das wäre nicht der richtige Weg.

MainFormOnTaskbar war ja in D2007 grob vereinfacht gesagt ja dazu gedacht, Delphi Vista UI tauglich zu bekommen. Das UI Problem mit Delphi < D2007 und der Hidden Application Form ist ja auch lösbar über andere Ansätze (InstallationExcellence z.B.). Mit diesen Workarounds war es auch möglich, ein korrektes Verhalten zu implementieren.

Peter Below hat afaik vor einigen Jahren mal etwas gesagt - frei übersetzt "Leg dich nicht mit der VCL Logik der Forms an". Das stimmt, aber wenn es um den übliche Verhalten von Windows Fenstern geht, ist diese Lösung von MainFormOnTaskBar ein Bug.

Höchstens, "As Designed" ... "but it's Design is poor".

Es kann nicht sein, daß ein zweites Fenster trotz Aktivierung des MainForm im Vordergrund bleibt. Das entspricht nicht dem jahrelangen Look-And-Feel der UI. Punkt.

Ich habe andere Informationen dazu, die ich Dir gleich per PN schicke.

Gruß Assertor

jbg 26. Nov 2008 18:45

Re: Form kommt nicht in den Vordergrund, neuer VCL Bug in D2
 
Zitat:

Zitat von Assertor
über andere Ansätze (InstallationExcellence z.B.). Mit diesen Workarounds war es auch möglich, ein korrektes Verhalten zu implementieren.

Hast du das ausprobiert? 3D Flip und die Taskbar funktionierten damit, aber es gab einige Nebeneffekte, da das Hauptformular nun nicht mehr im z-order Stack des Application.Handle war.

Zitat:

aber wenn es um den übliche Verhalten von Windows Fenstern geht, ist diese Lösung von MainFormOnTaskBar ein Bug.
Das sehe ich ganz anders. Das Verhalten von Delphi 1-2006 war nicht Windows-üblich. Mach mal in Word, Excel oder einer anderen MFC Anwendung deiner Wahl ein nicht-modales Fenster auf. Die liegen alle über dem Hauptfenster. Und warum ist das so? Weil dem CreateWindowEx ein HwndParent mitgegeben wird.

Wenn du das verhalten unter Delphi 2007/2009 samt Windows Vista Unterstützung haben willst musst du CreateParams überschreiben und dort Params.ExStyle |= WS_EX_TOOLWINDOWS; und Params.WndParent := HWND_DESKTOP; einstellen.


Zitat:

Es kann nicht sein, daß ein zweites Fenster trotz Aktivierung des MainForm im Vordergrund bleibt. Das entspricht nicht dem jahrelangen Look-And-Feel der UI. Punkt.
... nicht dem jahrelangen Delphi Look-And-Feel der UI.

Assertor 26. Nov 2008 19:05

Re: Form kommt nicht in den Vordergrund, neuer VCL Bug in D2
 
Zitat:

Zitat von jbg
Zitat:

Zitat von Assertor
über andere Ansätze (InstallationExcellence z.B.). Mit diesen Workarounds war es auch möglich, ein korrektes Verhalten zu implementieren.

Hast du das ausprobiert? 3D Flip und die Taskbar funktionierten damit, aber es gab einige Nebeneffekte, da das Hauptformular nun nicht mehr im z-order Stack des Application.Handle war.

Ja, hatte ich im produktiven Einsatz samt einiger eigenen Anpassungen. Damit war das Verhalten identisch zu anderen Anwendungen, z.B. Firefox (zweite Fenster z.B. von Favoriten-Library) und allem, was man täglich so im Einsatz hat.

Zitat:

Zitat von jbg
Zitat:

aber wenn es um den übliche Verhalten von Windows Fenstern geht, ist diese Lösung von MainFormOnTaskBar ein Bug.
Das sehe ich ganz anders. Das Verhalten von Delphi 1-2006 war nicht Windows-üblich. Mach mal in Word, Excel oder einer anderen MFC Anwendung deiner Wahl ein nicht-modales Fenster auf. Die liegen alle über dem Hauptfenster. Und warum ist das so? Weil dem CreateWindowEx ein HwndParent mitgegeben wird.

Mir ist das nie aufgefallen. Bei Delphi 2009 Anwendungen im Pre-Release Test aber sofort.

Zitat:

Zitat von jbg
Wenn du das verhalten unter Delphi 2007/2009 samt Windows Vista Unterstützung haben willst musst du CreateParams überschreiben und dort Params.ExStyle |= WS_EX_TOOLWINDOWS; und Params.WndParent := HWND_DESKTOP; einstellen.

Stimmt, Danke nochmal für den Hinweis. Habe ich direkt vor Deinem Post schon selbst eingebaut ;) Zum Glück hab verwende ich eine Form-Vorlage für sowas :)

Zitat:

Zitat von jbg
Zitat:

Es kann nicht sein, daß ein zweites Fenster trotz Aktivierung des MainForm im Vordergrund bleibt. Das entspricht nicht dem jahrelangen Look-And-Feel der UI. Punkt.
... nicht dem jahrelangen Delphi Look-And-Feel der UI.

:lol: Ja, Du triffst - wie immer - den Nagel mit dem Kopf, äh auf den Kopf ;) Ja, das schicke Hidden App Window und Form Behaviour. War bestimmt auch toll für etwas vor oder um Win95 herum. Inzwischen sollte das mal gehörig redesigned werden.

Das grundlegende Änderungen möglich sind, zeigt ja Delphis .NET Geschichte. Oder BDE, Interbase, oder, oder...

Trotzdem vielen Dank fürs Brainstorming. Dein Ansatz ist das, was ich jedem empfehlen würde, der vor diesem "Problem" steht bzw. damit durch Kunden konfrontiert wird. Wie so oft entstehen Pseudo-Standards durch Gewöhnung, Anwendungen die hier aus der Reihe tanzen fallen auf - nicht immer positiv. Mit dem Überschreiben von CreateParams läßt sich für wichtige, untergeordnete aber sachlich eigenständige Forms eine eigene Desktop-Zugehörigkeit erreichen.

Zusätzlich ließe sich per WS_EX_APPWINDOW ja noch ein eigener Taskbar Button dafür spendieren, ich nutze daher
Delphi-Quellcode:
Params.ExStyle := Params.ExStyle and not WS_EX_TOOLWINDOW or WS_EX_APPWINDOW;
im CreateParams override.

Das reicht mir und hilft vielleicht allen, die ebiges wollen.

Gruß und herzlichen Dank,
Assertor

:dp:

jbg 26. Nov 2008 19:10

Re: Form kommt nicht in den Vordergrund, neuer VCL Bug in D2
 
Zitat:

Zitat von Assertor
Zusätzlich ließe sich per WS_EX_APPWINDOW ja noch ein eigener Taskbar Button dafür spendieren, ich nutze daher
Delphi-Quellcode:
Params.ExStyle := Params.ExStyle and not WS_EX_TOOLWINDOW or WS_EX_APPWINDOW;
im CreateParams override.

Das reicht mir und hilft vielleicht allen, die ebiges wollen.

Und genau dafür könnte CodeGear ein neues Property einführen, dass das automatisch macht. Müsste man denen mal per QC für Commodore64 vorschlagen.

Assertor 26. Nov 2008 19:35

Re: Form kommt nicht in den Vordergrund, neuer VCL Bug in D2
 
Hi Andreas,

Gute Idee! Dann wären alle glücklich und ich müsste nicht gleich mit der QC-Bugentry-Pistole zielen ;)

Zitat:

Zitat von jbg
Commodore64 vorschlagen.

Lol! Den kannte ich noch nicht. Des Problems Lösung liegt wohl irgendwo zwischen 42 und SYS65535...

Mach doch ein Enhancement Request, dann vote ich für Dich :)

Gruß Assertor

hronny 2. Jul 2009 07:50

Re: Form kommt nicht in den Vordergrund, neuer VCL Bug in D2
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich weis das der Thread schon etwas alt ist, aber ich kann das Problem unter Delphi 2007 nicht lösen. Vielleicht habe ich auch etwas übersehen. Aber trotz der veränderten Routine CreateParam klappt es bei mir nicht, das die Hauptform in den Vordergrund kommt. Ich hänge mal das Musterprojekt an.

samso 2. Jul 2009 10:57

Re: Form kommt nicht in den Vordergrund, VCL Bug in D2007+
 
Hallo,
ich habe Dein Beispiel nachvollzogen. Es spielt, wenn man das Gedöns bei Form2 statt bei Form1 macht.

An alle die vielleicht auch zwischenzeitlich mal den Faden verloren haben:
Es geht um das Umschalten zwischen Hauptformular und zweitem Formular. Zwischen dem Zweiten und einem dritten Formular kann man so umschalten, wie bisher (<2007) auch.


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