Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Eine neue Form in einem neuen Fenster erstellen


hungrycoder - Sa 16.02.13 13:27
Titel: Eine neue Form in einem neuen Fenster erstellen
Hallo, irgendwie stehe ich heute total auf dem Schlauch. Was ich will: Ich habe eine Hauptform Form1. Aus Form1 möchte ich eine Form2 createn. Diese Form2 soll unabhängig von Form1 zu schließen sein und auch in einem eigenen Windowsfenster laufen.
Mein Problem ist jetzt, dass ich nach dem erstellen der Form2 keinen Zugriff auf jegliche Klicks auf die Buttons von Form2 habe.
Das ganze habe ich so geschrieben:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
Form2 := TForm2.Create(nil);
Form2.Parent := nil;
Form2.ParentWindow := GetDesktopWindow;
Form2.ControlStyle := ControlStyle + [csAcceptsControls];
Form2.ControlStyle := ControlStyle + [csCaptureMouse];
Form2.ControlStyle := ControlStyle + [csClickEvents];
Form2.Show;


Ich verzweifele hier. Hat jemand einen besseren Vorschlag oder weiß was ich hier falsch mache, dann BITTE immer her damit.

Viele Grüße

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt


Gausi - Sa 16.02.13 16:10

Wenn die Form nicht automatisch erzeugt wird (was ja standardmäßig der Fall ist), dann geht das in der Regel so:


Delphi-Quelltext
1:
2:
3:
if not assigned(Form2) then // testen, ob die Form bereits erzeugt wurde
    Application.CreateForm(TForm2, Form2);  // ggf. erzeugen
Form2.Show; // anzeigen


hungrycoder - Sa 16.02.13 17:29

Danke dir für deine Antwort, diese Art kannte ich noch nicht, dennoch löst sie nicht mein Problem, da es ja genau dasselbe ist wie:

Form2 := TForm2.Create(nil);
Form2.Show;

Ich hätte gerne aber, dass die neu erstellte Form in einem eigenen Windwosfenster angezeigt wird. Es wäre auch ok, wenn es nur in einem Windowsfenster wäre nur geht das irgendwie nicht weil meine Form1 kleiner ist als Form2. Form2 sollte dabei dann aber im Hintergrund sein. Wäre klasse, wenn du noch weitere Ideen hättest.


Gausi - Sa 16.02.13 21:04

Was ist denn ein eigenes Windowsfenster? :gruebel: Meinst du so MDI-Fenster?


hungrycoder - So 17.02.13 00:51

Ok ich gebe zu ich hab mich schlecht ausgedrückt. Nein MIDI meine ich nicht. Wenn ich mein Programm starte sehe ich ja in der Taskleiste das Fenster meines Programmes. Hat dieses Programm aber jetzt eine zweite Form erstellt ist es bei mir so, dass diese beiden Forms das gleiche Fenster haben. Da meine Form1 aber kleiner als die Form2 ist kann ich zwischen den beiden nicht umschalten, sondern muss Form2 erst mal schließen. Was ich gerne hätte ist also zwei Forms und zwei Fenster.


Stundenplan - So 17.02.13 09:59

Wenn ich das richtig verstanden habe, möchtest du also mehrere Formulare in der Taskleiste anzeigen lassen [http://www.swissdelphicenter.ch/de/showcode.php?id=775]?


bummi - So 17.02.13 11:18

Ich vermute Dich stört die "Verdrahtung" des neuen Forms mit dem bestehenden.
Dies lässt sich abschalten indem man per Projekt>Quelltext anzeigen die Zeile

Delphi-Quelltext
1:
  // Application.MainFormOnTaskbar := True;                    

auskommentiert


oder indem man Popupmode und PopupParent des anzuzeigenden Forms ändert


Delphi-Quelltext
1:
2:
3:
  Form3.PopupMode := pmExplicit;
  Form3.PopupParent := nil;
  Form3.Show;


hungrycoder - So 17.02.13 12:52

@bummi und StundenPlan
Danke genau das habe ich gemeint. Klappt wunderbar.