Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   MDI Child Public Variable (https://www.delphipraxis.net/195686-mdi-child-public-variable.html)

albertMichel 17. Mär 2018 16:30

MDI Child Public Variable
 
Ich verstehe nicht warum ich einer Public Variable in einem fsMDIChild nichts zuweisen kann.

procedure TMainForm.mnu_Child1Click(Sender: TObject);
begin
// FormStyle = fsMDIChild
frm_Child := Tfrm_Child.create(Self);
frm_Child.sText := 'Hallo Welt';
frm_Child.Show;
end;

procedure TMainForm.nmu_Form1Click(Sender: TObject);
begin
// FormStyle = fsNormal
frm_Normal := Tfrm_Normal.create(nil);
frm_Normal.sText := 'Hallo Welt';
frm_Normal.Show;
end;

In beiden Formulare gibt es eine Public-Deklarationen
sText: String;

In beiden Forms wird im .FormShow die
edt1.Text := sText; //Public-Deklarationen übergeben.

Doch nur in frm_Normal hat die "sText" den übergebenen Wert.
Was macht das fsMDIChild anders das die sText; //Public-Deklarationen keinen Wert übernimmt?

Danke
Albert

Redeemer 17. Mär 2018 20:11

AW: MDI Child Public Variable
 
Tfrm_Child.Visible ist True, damit wird dein OnShow-Event entweder zu früh oder überhaupt nicht ausgelöst. Es hat an der Stelle eigentlich auch nichts zu suchen sondern gehört in eine eigene Methode, die man nach der Erstellung aufruft. Anders ausgedrückt, die letzte Zeile in deiner Methode mnu_Child1Click hat keinerlei Funktion.

Forms erstellt man übrigens nicht mit Delphi-Referenz durchsuchenTForm.Create sondern mit Delphi-Referenz durchsuchenApplication.CreateForm.

albertMichel 18. Mär 2018 02:49

AW: MDI Child Public Variable
 
Aha
Ist das dann so richtig?
Zumindest erhalte ich im Child nun die übergebene Werte.

procedure TMainForm.mnu_Child1Click(Sender: TObject);
begin
// FormStyle = fsMDIChild;
// frm_Child: Tfrm_Child; //fr_Child

Application.CreateForm(Tfrm_Child, frm_Child);
frm_Child.Set_Var('Hallo Welt');

end;

Redeemer 18. Mär 2018 10:38

AW: MDI Child Public Variable
 
So ist es richtig, ja.

albertMichel 18. Mär 2018 12:46

AW: MDI Child Public Variable
 
Danke

himitsu 18. Mär 2018 13:13

AW: MDI Child Public Variable
 
Zitat:

Zitat von Redeemer (Beitrag 1396487)
Forms erstellt man übrigens nicht mit Delphi-Referenz durchsuchenTForm.Create sondern mit Delphi-Referenz durchsuchenApplication.CreateForm.

Falsch, bzw. nein, dass muss man nicht.

Dass Einzige, was CreateForm macht, ist die hässliche globale Variable vor dem Ausführen von Constructor und OnCreate zu setzen.

Und gerade wenn man Forms dynamisch/manuell erstellt, würde ich auch von der Verwendung dieser globalen Variable abraten.

KodeZwerg 18. Mär 2018 13:29

AW: MDI Child Public Variable
 
Was würde gegen diesen Aufruf hier sprechen?
Delphi-Quellcode:
procedure TMainForm.AboutMenuClick(Sender: TObject);
var
  Form : TAboutForm;
begin
  Form := TAboutForm.Create(Self);
  Try
    Form.ShowModal;
  Finally
    Form.Free;
  End;
end;

Ralf Kaiser 19. Mär 2018 06:01

AW: MDI Child Public Variable
 
Zitat:

Zitat von KodeZwerg (Beitrag 1396532)
Was würde gegen diesen Aufruf hier sprechen?

Da spricht überhaupt nichts dagegen. Im Gegenteil, genau so muss es aussehen.

KodeZwerg 19. Mär 2018 09:17

AW: MDI Child Public Variable
 
Ralf, Danke für die Bestätigung, ich war ehrlich gesagt eher auf eine Antwort von Redeemer aus bzw gespannt was er/sie dazu sagt.


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