Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zugriffsverletzung bei dynamisch erstellten Forms (https://www.delphipraxis.net/21526-zugriffsverletzung-bei-dynamisch-erstellten-forms.html)

Delix 4. Mai 2004 10:32


Zugriffsverletzung bei dynamisch erstellten Forms
 
Ich habe folgendes Problem:

Ich will Forms dynamisch in einer Prozedur wie folgt erstellen:

Delphi-Quellcode:
procedure TFMain.ShowFM(FormName);
var FFormClass: TFormClass;
    FForm: TForm;
begin
  FFormClass := TFormClass(FindClass('T'+FormName));
  FForm.Name:=FormName;
  ...
  FForm.Visible:=True;
end;
Das funktioniert auch.

Diese Forms wurden bisher in der klassischen Form erstellt:

Application.createForm(TFSTL,FSTL);

In dieser Form lief bisher alles. In der dynamischen Form habe ich das Problem, dass ich eine Zugriffsverletzung bekomme, wenn ich ein Control innerhalb des Forms anspreche (Edit1.Text:='blah..'), der Rest funktioniert.

Woran kann das liegen.

[edit=sakura] [delphi]-Tags. Mfg, sakura[/edit]

shmia 4. Mai 2004 10:40

Re: Zugriffsverletzung bei dynamisch erstellten Forms
 
Zitat:

Zitat von Delix
Ich will Forms dynamisch in einer Prozedur wie folgt erstellen:
Delphi-Quellcode:
Procedure TFMain.ShowFM(FormName);
var FFormClass: TFormClass;
    FForm: TForm;
begin
  FFormClass := TFormClass(FindClass('T'+FormName));
  FForm.Name:=FormName;
  ...
  FForm.Visible:=True;
end;
Das funktioniert auch.

Nicht wirklich :zwinker:
Dir fehlt was:
Delphi-Quellcode:
Procedure TFMain.ShowFM(FormName);
var FFormClass: TFormClass;
    FForm: TForm;
begin
  FFormClass := TFormClass(FindClass('T'+FormName));
  FForm := FFormClass.Create(nil); // <=================================
  FForm.Name:=FormName;
  ...
  FForm.Visible:=True;
end;

Delix 4. Mai 2004 10:56

Re: Zugriffsverletzung bei dynamisch erstellten Forms
 
Sorry, hab natürlich einen Befehl vergessen! :oops:

Delphi-Quellcode:
Procedure TFMain.ShowFM(FormName);
var FFormClass: TFormClass;
    FForm: TForm;
begin
  FFormClass := TFormClass(FindClass('T'+FormName));
  Application.createForm(FFormClass,fForm);
  FForm.Name:=FormName;
  ...
  FForm.Visible:=True;
end;
Mit deiner Variante klappts aber auch nicht.

[edit=sakura] [delphi]-Tags Mfg, sakura[/edit]

sakura 4. Mai 2004 11:03

Re: Zugriffsverletzung bei dynamisch erstellten Forms
 
@Delix: zur Info: 2.3.1 - Quellcode im Beitrag? So geht's

...:cat:...

roderich 4. Mai 2004 11:30

Re: Zugriffsverletzung bei dynamisch erstellten Forms
 
Zitat:

In dieser Form lief bisher alles. In der dynamischen Form habe ich das Problem, dass ich eine Zugriffsverletzung bekomme, wenn ich ein Control innerhalb des Forms anspreche (Edit1.Text:='blah..'), der Rest funktioniert.

Wo greifst Du denn auf die Controls zu ? Wenn FForm eine lokale Variable ist, muß es wohl in einem Ereignis sein. Schau dir doch mal im Debugger an, wie Self an dieser Stelle ausschaut (ob Assigned, welche Klasse, Name, ComponentCount etc.).

Roderich

Delix 4. Mai 2004 12:48

Re: Zugriffsverletzung bei dynamisch erstellten Forms
 
Das scheint die richtige Spur zu sein. Ich kann zwar auf FForm zugreifen aber self ist nil!!

Was sehr merkwürdig ist: Ein anderes Form, welches auf die gleiche Weise aufgerufen wird, funktioniert und self ist im Zugriff :gruebel:


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