AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

2. Form schliessen Variable=Nil

Ein Thema von ibp · begonnen am 22. Aug 2011 · letzter Beitrag vom 28. Aug 2011
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.054 Beiträge
 
Delphi 12 Athens
 
#1

AW: 2. Form schliessen Variable=Nil

  Alt 22. Aug 2011, 17:08
Setze Form2 einfach in OnDestroy von TForm2 auf nil.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#2

AW: 2. Form schliessen Variable=Nil

  Alt 22. Aug 2011, 17:52
Setze Form2 einfach in OnDestroy von TForm2 auf nil.
haut nicht hin.. Bekomme ich beim Aufruf eine AV. Assigned(Form2)<>Nil!
  Mit Zitat antworten Zitat
WM_CLOSE

Registriert seit: 12. Mai 2010
Ort: königsbronn
398 Beiträge
 
RAD-Studio 2009 Pro
 
#3

AW: 2. Form schliessen Variable=Nil

  Alt 22. Aug 2011, 18:38
setze in OnCreate/OnDestroy eine Klassenvariable auf true/false. Die kannst du dann abfragen.
Delphi programming
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: 2. Form schliessen Variable=Nil

  Alt 22. Aug 2011, 19:45
Hallo,

das Form2 ist in den Optionen auf verfügbar eingestellt?

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#5

AW: 2. Form schliessen Variable=Nil

  Alt 22. Aug 2011, 19:51
das Form2 ist in den Optionen auf verfügbar eingestellt?
Ja ... ich kann leider nicht nur mit "Ja" antworten, da es anscheinend eine zu kurze Antwort ist!

Habe das jetzt so gelöst...

Delphi-Quellcode:
unit1;
..
type
  TForm1 = class(TForm)
    btnCreate: TButton;
    btnTest: TButton;
    procedure FormDestroy(Sender: TObject);
    procedure btnCreateClick(Sender: TObject);
    procedure btntestClick(Sender: TObject);
  private
    { Private-Deklarationen }
    Form2:TForm2;
  public
    { Public-Deklarationen }
  end;

..

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Form2.free;
end;

procedure TForm1.btnCreateClick(Sender: TObject);
begin
  if Assigned(Form2) then
  begin
    Form2.BringToFront;
  end
  else
  begin
    Form2 := TForm2.Create(nil);
    Form2.PFree := @Form2;
    Form2.Show;
  end;
end;

////////////////////////////////////////////////////////

unit2;
..
type
  TForm2 = class(TForm)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    PFree: ^TForm; // Adresse von
  end;

..

procedure TForm2.FormCreate(Sender: TObject);
begin
  PFree:=nil;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:=caFree;
end;

procedure TForm2.FormDestroy(Sender: TObject);
begin
  if Assigned(PFree) then
  begin
    PFree^:=nil;
  end;
end;

Geändert von ibp (22. Aug 2011 um 19:58 Uhr)
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.403 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: 2. Form schliessen Variable=Nil

  Alt 22. Aug 2011, 21:04
Hi,

Zitat von ibp;1118694
[DELPHI
:
unit1;
..
type
TForm1 = class(TForm)
btnCreate: TButton;
btnTest: TButton;
procedure FormDestroy(Sender: TObject);
procedure btnCreateClick(Sender: TObject);
procedure btntestClick(Sender: TObject);
private
{ Private-Deklarationen }
Form2:TForm2;
public
{ Public-Deklarationen }
end;

..
[/DELPHI]
das dürfte das Problem sein - vermutlich hast Du in Unit2 auch Form2:TForm2 irgend wo stehen und dann hast Du an der Stelle in Unit 1 an der du auf NIL testest 2 Variablen mit dem selben Namen. Das kann dann nur schief gehen..

Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: 2. Form schliessen Variable=Nil

  Alt 22. Aug 2011, 22:16
So wie du das machst wird die Form TForm2 immer doppelt im Speicher vorhanden sein.

Einmal automatisch beim Programmstart und dann immer wieder beim Aufruf.
Irgendwie nicht logisch.

Also das Formular nicht automatisch erzeugen lassen.

Um TForm2 Modal aufzurufen folgender Code:
Delphi-Quellcode:
Procedure TForm1.OpenForm2Modal( Sender : TObject );
Var
  ModForm2 : TForm2;
begin
  ModForm2 := TForm2.Create( Self );
  Try
    ModForm2.ShowModal;
  Finally
    ModForm2.Free;
  end;
end;
Um die globale Variable "Form2" aus der Unit2 beim Free auf Nil zu setzen folgender Code
Delphi-Quellcode:
procedure TForm2.FormDestroy( Sender : TObject );
begin
  If Form2 = Self then
    Form2 := nil;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.054 Beiträge
 
Delphi 12 Athens
 
#8

AW: 2. Form schliessen Variable=Nil

  Alt 22. Aug 2011, 19:56
Setze Form2 einfach in OnDestroy von TForm2 auf nil.
haut nicht hin.. Bekomme ich beim Aufruf eine AV. Assigned(Form2)<>Nil!
Keine Ahnung wie du das machst, bei mir geht das problemlos. Siehe Anhang.

Aber eine andere Frage: Wozu zerstörst du das Formular eigentlich immer wieder? Es reicht doch, es bei der ersten Verwendung zu erstellen und danach einfach sichtbar oder unsichtbar zu machen.
Angehängte Dateien
Dateityp: zip Form2 = nil Demo.zip (527,4 KB, 13x aufgerufen)
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

AW: 2. Form schliessen Variable=Nil

  Alt 22. Aug 2011, 20:01
Na ja, wenn ich es schon dynamisch erstelle, dann auch richtig. Ansonsten kann ich in den Projektoptionen ja auch einstellen, dass es gleich erzeugt werden soll. Aber warum den Speicher unnütz belasten, wenn es nicht gebraucht wird?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#10

AW: 2. Form schliessen Variable=Nil

  Alt 22. Aug 2011, 20:04
Setze Form2 einfach in OnDestroy von TForm2 auf nil.
haut nicht hin.. Bekomme ich beim Aufruf eine AV. Assigned(Form2)<>Nil!
Keine Ahnung wie du das machst, bei mir geht das problemlos. Siehe Anhang.
Ja, der Unterschied liegt wohl bei den Optionen und den verfügbaren Formularen (Danke @Chemiker!)

Bei mir stehen die Formulare in den Optionen auf verfügbar!

Zitat von jaenicke:
Aber eine andere Frage: Wozu zerstörst du das Formular eigentlich immer wieder? Es reicht doch, es bei der ersten Verwendung zu erstellen und danach einfach sichtbar oder unsichtbar zu machen.
Weil sie nicht immer gebraucht werden! Es kann sein, dass jemand das Fenster 10 mal beim arbeiten benutzt oder aber auch überhaupt nicht!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 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-2025 by Thomas Breitkreuz