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 3 von 4     123 4   
Benutzerbild von Sir Rufo
Sir Rufo

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

AW: 2. Form schliessen Variable=Nil

  Alt 23. Aug 2011, 08:25
Ich weiß ja nicht mit welchem Delphi du programmierst, aber wenn ich einfach mal ein Formular neu erstelle, dann habe ich da folgenden Code
Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm2 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

end.
und nun rat mal, was die Variable "Form2" ist ... ein globale

Und um von einer anderen Form diese steuern zu können muss ich ja idR dort die Unit einbinden:
Delphi-Quellcode:
unit Unit1;

interface

...

implementation

uses
  Unit2;

...

end.
und somit kennt die Unit1 auch die Variable "Form2"
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 Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.855 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#22

AW: 2. Form schliessen Variable=Nil

  Alt 23. Aug 2011, 08:31
Hallo,

für nichtmodale Forms müssen meiner Meinung eine globale Variabel erzeugt werden, wie soll das sonst funktionieren?

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
 
#23

AW: 2. Form schliessen Variable=Nil

  Alt 23. Aug 2011, 08:33
@Sir Rufo,

die 2. Form soll dynamisch erzeugt werden und steht in den Optionen nicht unter automatisch erzeugen. Ist es dann wirklich so, dass dann die Variable Form2 in der unit1 direkt ansprechbar ist und wenn sie nil ist dass dann in unit1 übergibt? Was ist mit mehreren Instanzen von der Form2, wenn diese auch aus anderen Units genutzt wird?

@Chemiker habe das ja auch schon gelöst, siehe Post 6
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.459 Beiträge
 
Delphi 11 Alexandria
 
#24

AW: 2. Form schliessen Variable=Nil

  Alt 23. Aug 2011, 08:36
Das hat ja nichts damit zu tun, ob es sich um ein Formular handelt oder nicht. Globale Variablen im interface-Abschnitt sind generell von überall erreichbar, sofern die enthaltende Unit eingebunden wird. Willst Du mehrere Instanzen erzeugen, solltest Du Dir diese unbedingt in einer Liste (TObjectList, Array etc.) merken, da die eine Variable ja sonst mit jeder weiteren Instanz überschrieben und die alte Instanz somit unerreichbar wird.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  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
 
#25

AW: 2. Form schliessen Variable=Nil

  Alt 23. Aug 2011, 08:40
Das hat ja nichts damit zu tun, ob es sich um ein Formular handelt oder nicht. Globale Variablen im interface-Abschnitt sind generell von überall erreichbar, sofern die enthaltende Unit eingebunden wird. Willst Du mehrere Instanzen erzeugen, solltest Du Dir diese unbedingt in einer Liste (TObjectList, Array etc.) merken, da die eine Variable ja sonst mit jeder weiteren Instanz überschrieben und die alte Instanz somit unerreichbar wird.
Ja schon aber aus verschiedenen units, daher lohnt sich eine Liste nicht, da die unit2 nur temporär und im Bedarfsfall genutzt wird!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.459 Beiträge
 
Delphi 11 Alexandria
 
#26

AW: 2. Form schliessen Variable=Nil

  Alt 23. Aug 2011, 08:41
Dann nimm doch einfach verschiedene Variablen vom Typ TForm2.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  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
 
#27

AW: 2. Form schliessen Variable=Nil

  Alt 23. Aug 2011, 08:42
Hallo,

für nichtmodale Forms müssen meiner Meinung eine globale Variabel erzeugt werden, wie soll das sonst funktionieren?

Bis bald Chemiker
Nein, muss nicht ... ist aber bei den meisten Einsatzzwecken schon erforderlich und darum auch als Default so implementiert.
(Zudem die automatische Erstellung des Formulars genau diese Variable benötigt -> s.u. )
Es reicht ja, wenn alle, die darauf zugreifen wollen den Zugriff haben und wenn diese Zugriffe nur innerhalb einer Unit passieren, dann würde ich keine globale Variable benötigen.

@Sir Rufo,

die 2. Form soll dynamisch erzeugt werden und steht in den Optionen nicht unter automatisch erzeugen. Ist es dann wirklich so, dass dann die Variable Form2 in der unit1 direkt ansprechbar ist und wenn sie nil ist dass dann in unit1 übergibt? Was ist mit mehreren Instanzen von der Form2, wenn diese auch aus anderen Units genutzt wird?

@Chemiker habe das ja auch schon gelöst, siehe Post 6
Die automatisch angelegte globale Variable "Form2" kann genau nur eine Instanz beinhalten.
Wenn du mehrere Instanzen benötigst, dann musst du dich um die Verwaltung dieser selber kümmern.
Und ja, wird die Instanz von TForm2 nicht automatisch beim Start erzeugt, dann ist Form2 NIL.

Delphi-Quellcode:
program Test;

uses
  Forms,
  Unit1 in 'Unit1.pas{Form1},
  Unit2 in 'Unit2.pas{Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1); // <- da passiert die Zuweisung
  Application.CreateForm(TForm2, Form2); // <- und da auch
  Application.Run;
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 ibp
ibp

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

AW: 2. Form schliessen Variable=Nil

  Alt 23. Aug 2011, 08:49
eben und sie soll ja nicht automatisch erzeugt werden, sondern dynamisch im Bedarfsfall!

Spricht denn etwas gegen die Lösung in Post 6?

Ja ich bekenne mich schuldig, ich hätte die Variablennamen anders benennen sollen!
  Mit Zitat antworten Zitat
Benutzerbild von FaTaLGuiLLoTiNe
FaTaLGuiLLoTiNe

Registriert seit: 3. Jul 2004
Ort: NRW
55 Beiträge
 
Delphi XE Enterprise
 
#29

AW: 2. Form schliessen Variable=Nil

  Alt 23. Aug 2011, 08:50
Wenn von dem Formular tatsächlich immer nur eine Instanz zur gleichen Zeit angezeigt werden soll macht der Vorschlag in Beitrag #19 für mich am ehesten Sinn. Das sieht mir wie eine abgewandelte Form des Singleton-Patterns aus.
Christian
<< FaTaLGuiLLoTiNe >>
Rhinoceroses don't play games!
  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
 
#30

AW: 2. Form schliessen Variable=Nil

  Alt 23. Aug 2011, 09:02
Was passiert, wenn Form2 zwischen Close und Destroy angezeigt werden soll?

Wieso nicht Form2 nicht einfach im FormClose auf Nil setzen?

Weiterhin sollte das Anzeigen und die Logik, ob Form2 schon da ist, in TForm2 selbst implementiert werden. Entweder in einer Class Procedure 'ShowNonModal', oder in einer Funktion, die den Zugriff auf Form2 steuert (Ich würde Letzteres vorziehen)
<CODE>
Nun kann ich Form2 auch dann anzeigen, wenn es gerade geschlossen, aber noch nicht freigegeben wurde.

[edit]Oh, die Verfeinerung von Sir Rufo fehlt[/edit]
Damit kann ich auch leben - hat sogar ein Hauch mehr Charme als meine Variante
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
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 07:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf