Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Formulare


realAndy - Mi 02.11.11 17:15
Titel: Formulare
Hi,
ich habe in Delphi eine VCL-Formularanwendung erstellt. Auf dem Mainformular habe ich einen Button.
Wenn dieser geklickt wird, wird mit formular.show ein weiteres Formular geöffnet. Wenn ich nun mit der Maus auf das Mainformular klicke, dann bleibt trotzdem das zweite Formular im Fordergrund.
Wie bekomme ich es aber hin, dass dann das Mainformular nach vorne kommt?

Vielleicht sollte ich dazu noch sagen, dass ich das FormStyle bei der MainForm auf fsNormal gesetzt habe.

Danke für eure Hilfe
Andy


Delete - Mi 02.11.11 21:29

Und der FromStyle des zweiten Fensters? Weil so wie du es beschreibst, dürfte das nicht der Fall sein.


realAndy - Do 03.11.11 08:54

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Und der FromStyle des zweiten Fensters? Weil so wie du es beschreibst, dürfte das nicht der Fall sein.


Auch bei dem zweiten Fenster ist formStyle auf fsNormal gesetzt. Kann es sein, dass dies so kommt, weil ich eine MDI Anwendung erstellt habe und keine SDI?
Gibt es denn eine Möglichkeit aus einer MDI Anwendung eine SDI Anwendung zu machen?
Ich dachte, wenn ich das fomStyle auf fsNormal setzte, dann geht das. Scheint aber nicht so zu sein. :(


Andreas L. - Do 03.11.11 09:07

Ich habe das gerade nachgebaut: Neues VCL-Projekt, 2 Forms hinzufügen (keine Eigenschaft ändern), Button auf form 1 und im OnClick form2.Show; und gestartet. Tatsächlich bleibt Form2 im Vordergrund obwohl durch den Klick auf Form1 es den Fokus bekommen hat. :shock:


realAndy - Do 03.11.11 09:19

user profile iconAndreas L. hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe das gerade nachgebaut: Neues VCL-Projekt, 2 Forms hinzufügen (keine Eigenschaft ändern), Button auf form 1 und im OnClick form2.Show; und gestartet. Tatsächlich bleibt Form2 im Vordergrund obwohl durch den Klick auf Form1 es den Fokus bekommen hat. :shock:


Es scheint wirklich daran zu liegen, dass es eine MDI Anwendung ist. Bei einer SDI Anwendung kommt die form1 in den Vordergrund. Das würde aber nun bedeuten, dass ich meine Mainform komplett neu machen muss. Jedenfalls hab ich noch keine Möglichkeit gefunden aus der MDI Anwendung eine SDI Anwendugn zu machen.
Vielleicht kann mir ja hier jemand weiterhelfen?


Delete - Do 03.11.11 11:02

user profile iconrealAndy hat folgendes geschrieben Zum zitierten Posting springen:
Es scheint wirklich daran zu liegen, dass es eine MDI Anwendung ist.

Meinst du nicht auch, dass diese Information schon in deinem ersten Beitrag sinnvoll gewesen wäre?


realAndy - Do 03.11.11 11:43

user profile iconAndreas L. hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe das gerade nachgebaut: Neues VCL-Projekt, 2 Forms hinzufügen (keine Eigenschaft ändern), Button auf form 1 und im OnClick form2.Show; und gestartet. Tatsächlich bleibt Form2 im Vordergrund obwohl durch den Klick auf Form1 es den Fokus bekommen hat. :shock:



user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconrealAndy hat folgendes geschrieben Zum zitierten Posting springen:
Es scheint wirklich daran zu liegen, dass es eine MDI Anwendung ist.

Meinst du nicht auch, dass diese Information schon in deinem ersten Beitrag sinnvoll gewesen wäre?


OK, um es noch mal richtig zu sagen. Wie ich in meinem ersten Beitrag geschrieben habe, habe ich eine neue VCL Anwendung erstellt. Ich denke mal das eine VCL Anwendung sich offenbar wie eine MDI Anwendung verhält. Oder liege ich da falsch?
Was ich brauche ist ein Mainform aus welcher ich weitere Forms öffnen kann, welche aber nicht innerhalb der Mainform geöffnet werden sollen.
Dabei soll es aber möglich sein, dass Mainform auch wieder in den Fordergrund zu holen, also vor die geöffneten weiteren Forms zu bekommen. Genau das scheint mit einer VLC Formularanwendung nicht zu gehen.


Delete - Do 03.11.11 11:48

VLC oder VCL? VLC sagt mir jetzt nichts, aber wenn damit automatisch eine MDI Anwendung verknüpft ist, dann will ich nichts gesagt haben.


realAndy - Do 03.11.11 11:52

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
VLC oder VCL? VLC sagt mir jetzt nichts, aber wenn damit automatisch eine MDI Anwendung verknüpft ist, dann will ich nichts gesagt haben.


Entschuldigung, VCL meinte ich...
Wichtig währe sicher auch noch zu erwähnen, dass ich das ganze unter Delphi 2010 mache...


Delete - Do 03.11.11 12:01

user profile iconrealAndy hat folgendes geschrieben Zum zitierten Posting springen:
Ich denke mal das eine VCL Anwendung sich offenbar wie eine MDI Anwendung verhält.

Nur, wenn man eine erstellt.


realAndy - Do 03.11.11 12:10

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconrealAndy hat folgendes geschrieben Zum zitierten Posting springen:
Ich denke mal das eine VCL Anwendung sich offenbar wie eine MDI Anwendung verhält.

Nur, wenn man eine erstellt.


Wie meinst du das?
Ich habe eine neue VCL Formularanwendung erstellt. Dabei wird ja das Mainform automatisch mit angelegt. Dann habe ich weitere Formulare erstellt, welche ich über Buttons auf der Mainform mit form2.show öffne. Nach dem öffnen von weiteren Forms bekomme ich aber das Mainform nicht mehr in den Fordergrund. Das ist mein Problem. Form2 z.B. verdeckt immer das Mainform.


Delete - Do 03.11.11 12:18

Ich weiß nicht, was du machst.


realAndy - Do 03.11.11 12:22

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconrealAndy hat folgendes geschrieben Zum zitierten Posting springen:
Ich denke mal das eine VCL Anwendung sich offenbar wie eine MDI Anwendung verhält.

Nur, wenn man eine erstellt.



user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Ich weiß nicht, was du machst.


Welche Delphiversion verwendest du? Delphi 7?
Möglicherweise verhält es sich dort anders als wie unter Delphi 2010.

Andreas L. hat ja etwas weiter oben das gleiche Ergebnis wie ich.


Delete - Do 03.11.11 12:26

Ja, Delphi 7. Aber auch bei mehreren ist es kein Problem:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.btn2Click(Sender: TObject);
var
  i: Integer;
  frm: TForm2;
begin
  for i := 0 to 9 do
  begin
    frm := TForm2.Create(self);
    frm.Show;
  end;
end;


realAndy - Do 03.11.11 12:33

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

ich habe deinen Code gerade genau so ausprobiert. Die Mainform kommt bei Delphi 2010 nicht wieder in den Vordergrund, bekommt aber den Focus bei anklicken.


Horschdware - Do 03.11.11 12:35

user profile iconrealAndy hat folgendes geschrieben Zum zitierten Posting springen:
Es scheint wirklich daran zu liegen, dass es eine MDI Anwendung ist.

user profile iconrealAndy hat folgendes geschrieben Zum zitierten Posting springen:
OK, um es noch mal richtig zu sagen. Wie ich in meinem ersten Beitrag geschrieben habe, habe ich eine neue VCL Anwendung erstellt. Ich denke mal das eine VCL Anwendung sich offenbar wie eine MDI Anwendung verhält.

Was hast du nun erstellt? MDI Anwendung oder nicht? Siehe hier:

neuesProjekt

Wenn du dir sicher bist, dass du keine MDI Anwendung gewählt hast und auch kein showModal nutzt o.ä. dann lade bitte einmal hier ein leeres Projekt hoch, in dem dieses Phänomen zu beobachten ist.


realAndy - Do 03.11.11 12:47

Ich habe eine VCL Formularanwendung erstellt.
Habe dies auch gerade noch mal mit einem kleinen Testprojekt getestet.

Moderiert von user profile iconMartok: Doppelposting entfernt.

So, habe jetzt auch mal das Testprojekt hochgeladen...


Moderiert von user profile iconMartok: Fullquote des vorigen Beitrags entfernt


Delete - Do 03.11.11 13:05

Kompiliert mit D7 verhält es sich wie erwartet und gewünscht.


realAndy - Fr 04.11.11 09:00

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Kompiliert mit D7 verhält es sich wie erwartet und gewünscht.


hmm, also mit D7 scheint es wirklich zu gehen. Mit D2010 hat sich da offenbar was geändert.
Eine Idee woran das nun liegen könnte bzw. wie man das ändern kann, hat aber niemand zufällig?
Ich habs nach längeren probieren jedenfalls noch nicht hinbekommen


Nersgatt - Fr 04.11.11 09:30

Ich dann dieses komische Verhalten mit D2010 auch bestätigen. Ist mir bisher nie aufgefallen. Wohl, weil wir so gut wie immer Modale Formulare verwenden. Keine Idee, woran das liegen könnte.


bummi - Fr 04.11.11 10:13

der Übeltäter ist

Delphi-Quelltext
1:
  Application.MainFormOnTaskBar := true;                    

im Projekt ....


realAndy - Fr 04.11.11 10:28

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

cool :) danke :)
Daran hat es gelegen.


Delete - Fr 04.11.11 10:43

Wozu ist das eigentlich gut? Ich habe dazu das hier http://www.stevetrefethen.com/blog/ThenewVCLpropertyTApplicationMainFormOnTaskbarinDelphi2007.aspx gefunden, aber ich werde nicht so ganz schlau daraus.


realAndy - Fr 04.11.11 10:53

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

In der Delphi Hilfe steht dazu:
Zitat:
Steuert, wie Taskleisten-Schaltflächen von Windows von der VCL behandelt werden.
Die Eigenschaft MainFormOnTaskBar steuert, wie Taskleisten-Schaltflächen von Windows von der VCL behandelt werden.
Wenn die Eigenschaft true ist, repräsentiert eine Taskleisten-Schaltfläche das Hautformular einer Anwendung und zeigt dessen Titel an. Bei false repräsentiert eine Taskleisten-Schaltfläche das (verborgene) Hauptfenster einer Anwendung und zeigt den Anwendungstitel an.

MainFormOnTaskBar muss true sein, damit die Aero-Effekte aus Windows Vista verwendet werden können. Dazu zählen: LiveTaskbar-Miniaturansichten, dynamische Fenster, Windows-Flip und Windows-Flip-3D.

Bedeutet also dass bei meiner Anwendung dann der Aero-Efekt nicht mehr geht.

Moderiert von user profile iconNarses: I- durch Quote-Tags ersetzt


bummi - Fr 04.11.11 11:18

Zitat:

Bedeutet also dass bei meiner Anwendung dann der Aero-Efekt nicht mehr geht.


kann ich nicht bestätigen ....


realAndy - Fr 04.11.11 11:34

user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:

kann ich nicht bestätigen ....


habs unter Windows 7 getestet. Der Aero-Efekt Windows-Flip funktioniert bei mir z.B. nicht mehr mit der Applikation.


Delete - Fr 04.11.11 11:34

user profile iconrealAndy hat folgendes geschrieben Zum zitierten Posting springen:
In der Delphi Hilfe steht dazu:

Danke, ich habe zu Hause nur D2006, da gab es die Eigenschaft noch nicht.


Andreas L. - Fr 04.11.11 11:53

user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
Zitat:

Bedeutet also dass bei meiner Anwendung dann der Aero-Efekt nicht mehr geht.


kann ich nicht bestätigen ....


DITO, mit Delphi 2009 und Vista habe ich trotz MainFormOnTaskBar := False die LiveTaskbar-Miniaturansichten, Aero-Effekte und Windows-Flip.


Stread - Mo 28.11.11 01:44

Da ich genau das gleiche Problem hatte, hier mein Ergebnis mit Delphi XE und Windows 7
Application.MainFormOnTaskBar := False; gesetzt Aero funktioniert,Mini-Vorschau funktioniert, 3D-Flip funktioniert aber nicht.
Das meine MainForm nicht immer im Hintergrund ist, ist mir wichtiger als 3D-Flip.