Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Form Create? (https://www.delphipraxis.net/47210-form-create.html)

rocksoft 7. Jun 2005 21:49


Form Create?
 
Hallo,

ich werde einfach nicht ganz schlau, hab schon den Forum schon par mal hoch und runter durchgesucht,
aber bin mir dann immer noch nicht sicher wie es richtig oder besser gemacht wird.

Modales Fenster öffnen:

a)
Delphi-Quellcode:
procedure TForm1.Btn_Showmodal1Click(Sender: TObject);
begin
  form2 := Tform2.create(nil); <<- - mit nil
  try
    if form2.showmodal = mrok then
    begin
      //.. irgenwas
    end;
  finally
    form2.free;
  end;
end;
b)
Delphi-Quellcode:
procedure TForm1.Btn_Showmodal2Click(Sender: TObject);
begin
  form2 := Tform2.create(self); <<-- hier mal mit self
  try
    if form2.showmodal = mrok then
    begin
      //.. irgenwas
    end;
  finally
    form2.free;
  end;
end;
c)
Delphi-Quellcode:
procedure TForm1.Btn_Showmodal3Click(Sender: TObject);
var
MeineForm:Tform2;                  <-- mit Variablen
begin
  MeineForm := Tform2.create(self); <-- könnte auch (nil) sein
  try
    if MeineForm.showmodal = mrok then
    begin
      //.. irgenwas
    end;
  finally
    MeineForm.free;
  end;
end;
Die nicht modale
1)
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
begin
 Form3:=Tform3.Create(nil); <-- Ohne Variable
 Form3.show;
end;
--
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Action := caFree
end;


2)
Delphi-Quellcode:
procedure TForm1.Button5Click(Sender: TObject);
var
neuesfenster:Tform3; <-- mit Variable
begin
 neuesfenster:=Tform3.Create(nil);
 neuesfenster.show;
end;
--
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Action := caFree
end;
ich benutze zuzeit die Form a und 1, und leider habe ich es mit:
Zugriffsverletzung bei Adresse 00000000. Lesen von Adresse 00000000. zu tun.
Es ist aber nicht immer, hängt es vom zufall ab? daher denke ich da lauft was falsch, und so rufe ich die Forms auf bei nicht modalen Forms

Delphi-Quellcode:
procedure Tform1.DisplayForm(i: Byte); //LMDFormDisplay VLC
var                                           // ist änlich wie frames  
  tmpc: TForm;
  tmpf: TCustomForm;

begin
  tmpf := fd.ActiveForm;
  if tmpf <> nil then tmpf.Close;

  case I of
   0: begin
        Form2 := TForm2.Create(nil);
        tmpc := Form2;
      end;
   1: begin
        Form3 := TForm3.Create(nil);
        tmpc := Form2;
      end;
   2: begin
        Form4 := TForm4.Create(nil);
        tmpc := Form2;
      end;
   3: begin
        Form5 := TForm5.Create(nil);
        tmpc := Form2;
      end;
  else
    tmpc := nil;
  end;
  if tmpc <> nil then
  begin
    FD.AddForm(tmpc, true);
  end
  else
    FD.AddForm(Form10, true);
end;
Ich hoffe das jemand hier ein wenig Licht rein bringen kann, schon mal im Dank im vorraus

_Sebastian_ 7. Jun 2005 21:55

Re: Form Create?
 
Delphi-Quellcode:
if tmpf <> nil then tmpf.Close;
Nach einem Free ist das Objekt nicht unbedingt NIL!
Musst dir irgendwie den Zustand dazu merken und ggf. dann neu erzeugen.

jfheins 7. Jun 2005 21:59

Re: Form Create?
 
Nimm mal bei a) folgendes:
Delphi-Quellcode:
with Tform2.create(nil) do
try
  if ShowModal = mrOk then
    // ...
finally
  Free;
end;
P.S. Lesen/Schreiben von Adresse 00000.. weist oft auf einen Zeiger hin, der nil ist, wo aber noch drauf zugegriffen wird ;)

rocksoft 8. Jun 2005 02:43

Re: Form Create?
 
Hi Sebastian & Julius,


@ _Sebastian_: Es wird aber immer nil werden, wenn keine form zugeordned wird, oder mach ich da ein denk fehler?

Und wie mach ich es am besten mit nicht Modalen Forms? oder besser gesagt wie verhindere ich den Adresse 00000.. fehler?

Besten Dank
Robert

supermuckl 8. Jun 2005 02:51

Re: Form Create?
 
Zitat:

@ _Sebastian_: Es wird aber immer nil werden,
nein. aber mit freeandnil(); schon

runger 8. Jun 2005 06:12

Re: Form Create?
 
Hallo,

so gehts:
Delphi-Quellcode:
  //erzeuge die Form
  fo:=tform.Create(self);
  fo.parent:=self; //eventuell auch übergeordnete Form
Du brauchst einen parent für deine Form.

Rainer

SirThornberry 8. Jun 2005 07:05

Re: Form Create?
 
wenn das form einen parent bekommt dann dann ist es nicht mehr frei schwebend sondern liegt auf dem anderen form fest drauf. Es genügt eigentlich schon den Owner anzugeben (form1) damit form2 beim schließen des gesammt programmes frei gegeben wird. Wenn die AV manchmal kommt und manchmal nicht scheinst du irgendwo anders einen fehler zu haben...

runger 8. Jun 2005 07:13

Re: Form Create?
 
Hallo Thornberry,

ich weiss nicht was du für eine Delphiversion hast, aber bei mir geht ohne parent garnichts.
Du siehst ja auch an dem Beispiel, dass parent auf self gesetzt ist, also nicht an der übergeordneten Form hängt.
Ohne parent bekomme ich eine Fehlermeldung.

Rainer

barf00s 8. Jun 2005 08:10

Re: Form Create?
 
Delphi-Quellcode:
var
  myForm: TMyForm;

begin
  try
    Application.CreateForm(TMyForm, myForm); // oder die params vertauschn, ich verwexel das ständig
    myForm.ShowModal;
  finally
    FreeAndNil(myForm);
  end;
end;

rocksoft 11. Jun 2005 01:58

Re: Form Create?
 
allo,

erstmals Danke an alle für die beiträge, bei barf00s muss ich noch ein wenig nach fragen :)

Delphi-Quellcode:
Application.CreateForm(TMyForm, myForm);
Wieso jetzt gerade mit application anfangen, welche vorteile hat es dadurch oder welche nachteile hat es wenn man es so nicht mal.

Wieso deklariert man eine neue variable?

Delphi-Quellcode:
var
  myForm: TMyForm;
wenn man genau so gut den Name aus der Form benutzen kann? oder sollte man es besser sein lassen?

Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
begin
Form3:=Tform3.Create(nil); <-- Ohne Variable
Form3.show;
end;
Könnte dies ein grund sein wieso ich die fehler Meldung: Adresse 00000 bekomme?

Danke
Robert


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:10 Uhr.
Seite 1 von 2  1 2      

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