Delphi-PRAXiS
Seite 3 von 3     123   

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 Variable aus anderer Unit kann nicht richtig ausgelesen werd (https://www.delphipraxis.net/136436-variable-aus-anderer-unit-kann-nicht-richtig-ausgelesen-werd.html)

DeddyH 1. Jul 2009 15:30

Re: Variable aus anderer Unit kann nicht richtig ausgelesen
 
Zitat:

Delphi-Quellcode:
unit ErsteUnit
type
  TForm1 = class(TForm)
...
  private
    WichtigerString: String;
  public
    property Instanz: string read WichtigerString write WichtigerString;
  end;

var
  Form1: TForm1;
  //WichtigerString: string; Weg damit
   
implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  WichtigerString:= 'A1CW5d3f';
end;

Zugreifen kannst Du dann über Form1.Instanz. Wobei es sich eingebürgert hat, die privaten Variablen wie die Property zu nennen, nur mit einem "F" (für Feld) davor.

himitsu 1. Jul 2009 15:30

Re: Variable aus anderer Unit kann nicht richtig ausgelesen
 
Delphi-Quellcode:
type
  TForm1 = class(TForm)
  private
    WichtigerString: String;
  public
    property Instanz: string read WichtigerString write WichtigerString;
  end;

var
  Form1: TForm1;
  WichtigerString: string;

begin
  WichtigerString:= 'A1CW5d3f';
end.
Delphi-Quellcode:
showmessage(form1.instanz);
form1.instanz greift auf ErsteUnit.Form1.WichtigerString aka TForm1.WichtigerString zu, wärend
WichtigerString:='A1CW5d3f'; auf ErsteUnit.WichtigerString zugreift ...
es sind also unterschiedliche Variablen und demnach auch unterschiedliche Inhalte.

also ersrmal entferne eine der beiden Variablen.

1: entweder die in TForm1 entfernen, einen Getter/Setter für .Instanz erstellen und die globlae Variable auslesen/beschreiben

2: siehe mein Vorredner

oder 3: eine Klassen-Variable erstellen
Delphi-Quellcode:
unit ErsteUnit

type
  TForm1 = class(TForm)
...
  private
    class var WichtigerString: String;
  public
    class property Instanz: string read WichtigerString write WichtigerString;
  end;

var
  Form1: TForm1;
   
implementation
...
begin
  TForm1.WichtigerString:= 'A1CW5d3f';
end.

JBJHJM 1. Jul 2009 18:48

Re: Variable aus anderer Unit kann nicht richtig ausgelesen
 
Ok, habe jetzt Klassenvariablen verwendet, funktioniert.
Hätte mir doch bloss einer *z.B. mein Lehrer :shock: * den Unterschied zwischen Unit.Form1.variable und Unit.variable erklärt...

Vielen Dank, von meiner Seite wars das dann mit Fragen!

himitsu 1. Jul 2009 19:26

Re: Variable aus anderer Unit kann nicht richtig ausgelesen
 
Zitat:

Hätte mir doch bloss einer *z.B. mein Lehrer Shocked * den Unterschied zwischen Unit.Form1.variable und Unit.variable erklärt...
der Unterschied ist erstmal egal ... du hattest 2 Variablen mit dem selben Namen, also jede Variable hatte ihren eigenen Inhalt.


bei den Klassen-Variablen gibt es aber Einiges zu beachten
Delphi-Quellcode:
type
  TMyClass = class(...)
    abc: Integer;
    var def: Integer;
    class var xyz: Integer;
  end;

var a, b: TMyClass;
abc und def stellen erstmal grundsätzlich das Gleiche dar
> Variablen innerhalb einer Klasseninstanz (nur daß man innerhalb einer Klasse das VAR nicht unbedingt angeben muß)

xyz ist eine Variable innerhalb der Klasse (Achtung: nicht Klasseninstanz)

also
Delphi-Quellcode:
a.abc <> b.abc  {TMyClass.abc ist nicht möglich}

a.xyz = b.xyz = TMyClass.xyz
heißt also, xyz ist bei allen Instanzen einer Klasse genau das Selbe,
es ist also überall genau der gleiche Inhalt drin und man kann auch ohne eine vorhandene Instanz der Klasse drauf zugreifen.

Popov 1. Jul 2009 19:31

Re: Variable aus anderer Unit kann nicht richtig ausgelesen
 
JBJHJM, unabhängig davon ob globale Variablen nun schön sind oder nicht, das klappt auf jeden Fall:

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  WichtigerString: string;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  WichtigerString := 'A1CW5d3f';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // oder auch hier: WichtigerString := 'A1CW5d3f';
  Form2.ShowModal;
end;

end.
Delphi-Quellcode:
unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

uses
  Unit1;

procedure TForm2.Button1Click(Sender: TObject);
begin
  showmessage(WichtigerString);
end;

end.
Du kannst durchaus die zuletzt genannten Lösungen mit property nehmen - wenn du es willst - du kannst es aber auch normal wie oben lösen. Beides funktioniert.

DeddyH 1. Jul 2009 19:38

Re: Variable aus anderer Unit kann nicht richtig ausgelesen
 
Damit verzichtest Du allerdings auf die u.a. in #17 genannten Vorteile.

Popov 1. Jul 2009 19:40

Re: Variable aus anderer Unit kann nicht richtig ausgelesen
 
Zitat:

Zitat von JBJHJM
Hätte mir doch bloss einer *z.B. mein Lehrer :shock: * den Unterschied zwischen Unit.Form1.variable und Unit.variable erklärt...

Ist aber nicht unbedingt nötig, denn das eine ist das normale Pascal, das andere schon objektorientierte Programmierung.

Popov 1. Jul 2009 19:45

Re: Variable aus anderer Unit kann nicht richtig ausgelesen
 
Zitat:

Zitat von DeddyH
Damit verzichtest Du allerdings auf die u.a. in #17 genannten Vorteile.

Ich sag ja auch nicht, daß es schlecht oder Unsinn ist, sondern, daß bevor man bei a, b und c, zuerst b verstehen sollte bevor man sich c zuwendet.

DeddyH 1. Jul 2009 19:46

Re: Variable aus anderer Unit kann nicht richtig ausgelesen
 
Wir haben die Unterschiede ja nun lang und breit erläutert, der TE muss nur noch die für ihn beste Möglichkeit umsetzen ;)

JBJHJM 1. Jul 2009 21:02

Re: Variable aus anderer Unit kann nicht richtig ausgelesen
 
Naja hab mich etwas ungenau ausgedrückt - ich hätte sagen sollen "... dass es da überhaupt einen Unterschied gibt..."
Das erklärt doch einiges über das ich mich wunderte, und nicht wirklich eine Antwort bekam - naja halt ein normaler Informatiklehrer.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:17 Uhr.
Seite 3 von 3     123   

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