![]() |
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:
b)
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;
Delphi-Quellcode:
c)
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;
Delphi-Quellcode:
Die nicht modale
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; 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:
ich benutze zuzeit die Form a und 1, und leider habe ich es mit:
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; 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:
Ich hoffe das jemand hier ein wenig Licht rein bringen kann, schon mal im Dank im vorraus
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; |
Re: Form Create?
Delphi-Quellcode:
Nach einem Free ist das Objekt nicht unbedingt NIL!
if tmpf <> nil then tmpf.Close;
Musst dir irgendwie den Zustand dazu merken und ggf. dann neu erzeugen. |
Re: Form Create?
Nimm mal bei a) folgendes:
Delphi-Quellcode:
P.S. Lesen/Schreiben von Adresse 00000.. weist oft auf einen Zeiger hin, der nil ist, wo aber noch drauf zugegriffen wird ;)
with Tform2.create(nil) do
try if ShowModal = mrOk then // ... finally Free; end; |
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 |
Re: Form Create?
Zitat:
|
Re: Form Create?
Hallo,
so gehts:
Delphi-Quellcode:
Du brauchst einen parent für deine Form.
//erzeuge die Form
fo:=tform.Create(self); fo.parent:=self; //eventuell auch übergeordnete Form Rainer |
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...
|
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 |
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; |
Re: Form Create?
allo,
erstmals Danke an alle für die beiträge, bei barf00s muss ich noch ein wenig nach fragen :)
Delphi-Quellcode:
Wieso jetzt gerade mit application anfangen, welche vorteile hat es dadurch oder welche nachteile hat es wenn man es so nicht mal.
Application.CreateForm(TMyForm, myForm);
Wieso deklariert man eine neue variable?
Delphi-Quellcode:
wenn man genau so gut den Name aus der Form benutzen kann? oder sollte man es besser sein lassen?
var
myForm: TMyForm;
Delphi-Quellcode:
Könnte dies ein grund sein wieso ich die fehler Meldung: Adresse 00000 bekomme?
procedure TForm1.Button4Click(Sender: TObject);
begin Form3:=Tform3.Create(nil); <-- Ohne Variable Form3.show; end; Danke Robert |
Re: Form Create?
Zitat:
|
Re: Form Create?
Hai rocksoft,
beschreibe doch einmal was Du ereichen möchtest. Möchtest Du mit einer Procedure verschiedene Forms anzeigen (übergabe durch parameter) oder etwas ganz anderes? |
Re: Form Create?
Zitat:
Und statt dem Free nimmst noch en Release, sofern Du das in Eventroutinen machst :) |
Re: Form Create?
Danke Sharky,
so drehe ich mich nicht mehr im kreis :) was ich erreichen will ist, das ich die Forms bei bedarf erzeuge, benutze und wieder freigebe, die Forms lade ich in LMDFormDisplay, keine modale Forms. Es kommt da vor das hin und wieder die fehler Meldung: Adresse 00000 kommt und das blöde ist, es ist nicht immer bei der gleiche form, sondern nach zufall, daher wollte ich wissen wie ich es besser, sichere machen kann das diese fehler meldung nicht mehr kommt. Ich habe 5-6 Forms die immer geladen sind und die andere bei bedarf und gebe die frei mit cafree. hier mit steuer ich das laden von den Forms:
Delphi-Quellcode:
was kann ich machen?
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 tmpc := Artikel; <--- wir gleich am anfang erzeugt und wird nur am schluss entfernt end; 1: begin Form3 := TForm3.Create(nil); <--- bei bedarf tmpc := Form3; end; .... .... 33: begin Form33 := TForm33.Create(nil);<--- bei bedarf tmpc := Form33; end; else tmpc := nil; end; if tmpc <> nil then begin FD.AddForm(tmpc, true); end else FD.AddForm(Artikel, true); end; danke |
Re: Form Create?
Liste der Anhänge anzeigen (Anzahl: 1)
Hai rocksoft,
ich habe noch nie mit diesem LFDFormDisplay gearbeitet ;-) Du möchtest also in deiner MainForm andere Forms anzeigen? Und es wird immer nur eine andere Form gezeigt? Ich mache das mit einem anderen Lösungsansatz. Du kannst Dir ja mal das Beispiel im Anhang ansehen. Das arbeit mit den Standardfunktionen von Delphi. Ich bin mir aber nicht 100% sicher ob es das macht was Du genau möchtest. |
Re: Form Create?
Hallo Stephan,
ja genau das macht auch LFDFormDisplay auch und ich sehe der aufbau ist fast gleich, daher bin ich der meinung musste es bei mir ohne fehler meldung funktionieren, das komische ist bei mir lauft es 100% nur bei andere nicht, ob es mit AMD zu tun hat?. Ich werde es mal umstellen mal sehen ob die problem dann weg sind. Vielen dank es mal an alle für die hilfe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz