Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Frames Problem (https://www.delphipraxis.net/109667-frames-problem.html)

DoktorD 5. Mär 2008 16:31


Frames Problem
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi. Habe eben das erste Mal mit Frames gearbeitet und ich glaube ich habe schon wieder einen Fall erwischt, der nicht geht.
Das was ich vorhabe kann man auch mit MDI Forms lösen, will ich aber nicht.

Zu den beiden Programmen die im Anhang sind:

Das erste Programm funktioniert (Programm 1 im Anhang). Und zwar will ich das Frame dynamisch auf einer Form erzeugen (Align = alClient).
Das mache ich so:
Delphi-Quellcode:
procedure TFrmMain.Button1Click(Sender: TObject);
var
  MeineFrame : TMeineFrame;
begin
  MeineFrame := TMeineFrame.Create(self);
  MeineFrame.Parent := FrmMain;
end;
Wie schon erwähnt, das funktioniert auch.
Nun will ich das aber in meinem Projekt (Programm 2 im Anhang) einfügen und da funktioniert genau diese Vorgehensweise nicht. Der einzigste Unterschied ist, dass die Frame in einem anderen Fenster erzeugt wird (ist ein modales Fenster).

Warum geht das nicht? Erzeugt wird die Frame, nur angezeigt wird sie nicht.

Larsi 5. Mär 2008 16:42

Re: Frames Problem
 
viellcht solltest du in form2 beim anzeigen form1.meinframe oder so. Oder es liegt daran dass du sie immer neu erstellst oder willst du das auch^^

DoktorD 5. Mär 2008 16:50

Re: Frames Problem
 
Zitat:

Zitat von Larsi
viellcht solltest du in form2 beim anzeigen form1.meinframe oder so. Oder es liegt daran dass du sie immer neu erstellst oder willst du das auch^^

Wie meinst du das? Ich will ja erstmal, das die Frame angezeigt wird.

Will sie nicht immer neu erstellen (nur einmal).

Die Muhkuh 5. Mär 2008 16:54

Re: Frames Problem
 
Hi,

wenn Du sowieso nur einmal erstellen willst, kannst Du den Frame doch direkt auf die Form legen und brauchst ihn nicht dynamisch zu erzeugen.

[edit] Und, btw., Du öffnet in Deinem Beispiel kein modales Fenster. ;-) [/edit]
[edit2] Falls Du es doch dynamisch machen willst, schreib anstatt:

Delphi-Quellcode:
MeineFrame.Parent := FrmModalesFenster;
das hier:

Delphi-Quellcode:
MeineFrame.Parent := Self;

DoktorD 5. Mär 2008 16:56

Re: Frames Problem
 
Zitat:

Zitat von Die Muhkuh
Hi,

wenn Du sowieso nur einmal erstellen willst, kannst Du den Frame doch direkt auf die Form legen und brauchst ihn nicht dynamisch zu erzeugen.

[edit] Und, btw., Du öffnet in Deinem Beispiel kein modales Fenster. ;-) [/edit]

Nein, da ich unterschiedliche Frames erzeugen will (20 Unterschiedliche). Aber ich will die nicht alle geleichzeitig auf der Form (durch Visible True/False oder ähnliches)

Die Muhkuh 5. Mär 2008 16:57

Re: Frames Problem
 
Hi,

alles klar, ich hab die Lösung bereits in Edit im Post oben dran geschrieben :)

DoktorD 5. Mär 2008 17:00

Re: Frames Problem
 
Tatsächlich mit

Delphi-Quellcode:
MeineFrame.Parent := Self;
gehts. Kannst du mir vielleicht noch erklären, was dabei der Unterschied ist?


Vielen vielen Dank

Die Muhkuh 5. Mär 2008 17:04

Re: Frames Problem
 
Klar, kann ich das.

Du erzeugst Dein Fenster hiermit:

Delphi-Quellcode:
procedure TFrmMain.ModalesFensterffnen1Click(Sender: TObject);
var
  ModalesFenster : TFrmModalesFenster;
begin
  ModalesFenster := TFrmModalesFenster.Create(self);
  ModalesFenster.Show;
end;
Beachte, dass Du hier die Variable ModalesFenster deklarierst und damit das Fenster erstellst und aufrufst.

In Deinem modalen Fenster erzeugst Du damit Deinen Frame (das ist der alte Code!):

Delphi-Quellcode:
procedure TFrmModalesFenster.btnAnzeigenClick(Sender: TObject);
var
  MeineFrame : TMeineFrame;
begin
  MeineFrame := TMeineFrame.Create(self);
  MeineFrame.Parent := FrmModalesFenster;
end;
Du setzt den Parent auf FrmModalesFenster, welches aber, da Du oben eine eigene Variable definiert hast, gar nicht initialisiert ist.

Das heißt, Du setzt den Parent auf eine nicht initialisierte Variable, demnach wird das Fenster nicht angezeigt.

Um das Problem zu lösen, kannst Du entweder mit Self arbeiten, oder Du änderst den Code zum Erstellen des Fenster wie folgt ab:

Delphi-Quellcode:
procedure TFrmMain.ModalesFensterffnen1Click(Sender: TObject);
begin
  FrmModalesFenster := TFrmModalesFenster.Create(self);
  FrmModalesFenster.Show;
end;
So klappt es dann auch wieder.

DoktorD 5. Mär 2008 17:06

Re: Frames Problem
 
Achsooo. Mist, da hätte ich selber drauf kommen müssen.
Nochmals vielen Dank.

Die Muhkuh 5. Mär 2008 17:07

Re: Frames Problem
 
Kein Problem. ;-)

Ich würde übrigens die "Self"-Variante bevorzugen, erspart solche Unannehmlichkeiten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:29 Uhr.

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