(Gast)
n/a Beiträge
|
Re: schon wieder ein Problem mit globale Variablen...
30. Jun 2009, 15:31
Zitat von JBJHJM:
Ziel: Ich will auf eine Variable einer anderen Unit zugreifen, der Einfachheit halber erstmal mit showmessage(Form1.variable).
Problem: Der genannte Befehl erzeugt einfach nur eine leere Meldung.
Da du mit Form1.variable kommst und man deshalb nicht weiß wo du deine Variable deklariert hast, hier ein kleines 1 x 1 der Variablen. Ich habe 10 Variablen in verschiedenen Bereichen deklariert. Fünf in Unit2, fünf in Unit1. Je nachdem von wo man sie abrufen will, klappt es entweder nicht oder man muß etwas beachten. Zuerst Unit1 mit der Abfrage, dann Unit2:
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 }
Variable1a: String;
public
{ Public-Deklarationen }
Variable2a: String;
end;
var
Form1: TForm1;
Variable3a: String;
implementation
{$R *.dfm}
uses
Unit2;
var
Variable4a: String;
procedure TForm1.FormCreate(Sender: TObject);
var
Variable5a: String;
begin
Variable1a := ' Hallo Welt 1 A!';
Variable2a := ' Hallo Welt 2 A!';
Variable3a := ' Hallo Welt 3 A!';
Variable4a := ' Hallo Welt 4 A!';
Variable5a := ' Hallo Welt 5 A!';
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Variable6a: String;
begin
Variable6a := ' Hallo Welt 6 A!';
//## Fremde Unit ##
//ShowMessage(Variable1b); //klappt nicht - privat und andere Unit
//ShowMessage(Variable2b); //klappt so nicht, trotz public
ShowMessage(Form2.Variable2b); //klappt, aber nur mit Form2 davor
ShowMessage(Variable3b); //klappt, wenn Unit eingetragen. Globale Variable
//ShowMessage(Variable4b); //klappt nicht, global nur innerhalb der eigenen Unit
//ShowMessage(Variable5b); //klappt nicht, lokale Variable
//## Eigene Unit ##
ShowMessage(Variable1a); //klappt, so aber nur in Form1-Prozeduren
ShowMessage(Form1.Variable1a); //in normalen Prozeduren Form1 davor setzten
ShowMessage(Variable2a); //klappt, so aber nur in Form1-Prozeduren
ShowMessage(Form1.Variable2a); //in normalen Prozeduren Form1 davor setzten
ShowMessage(Variable3a); //klappt überall in der eigenen Unit und in fremden Units
ShowMessage(Variable4a); //klappt überall in der eigenen Unit
//ShowMessage(Variable5a); //klappt nicht in fremder Prozedur, lokale Variable
ShowMessage(Variable6a); //klappt, lokale Variable
end;
procedure Test; // normale Prozedur
begin
//## Fremde Unit ##
//ShowMessage(Variable1b); //klappt nicht - privat und andere Unit
//ShowMessage(Variable2b); //klappt so nicht, trotz public
ShowMessage(Form2.Variable2b); //klappt, aber nur mit Form2 davor
ShowMessage(Variable3b); //klappt, wenn Unit eingetragen. Globale Variable
//ShowMessage(Variable4b); //klappt nicht, global nur innerhalb der eigenen Unit
//ShowMessage(Variable5b); //klappt nicht, lokale Variable
//## Eigene Unit ##
//ShowMessage(Variable1a); //klappt nicht so...
ShowMessage(Form1.Variable1a); //...in normalen Prozeduren Form1 davor setzten
//ShowMessage(Variable2a); //klappt nicht so...
ShowMessage(Form1.Variable2a); //in normalen Prozeduren Form1 davor setzten
ShowMessage(Variable3a); //klappt überall in der eigenen Unit und in fremden Units
ShowMessage(Variable4a); //klappt überall in der eigenen Unit
//ShowMessage(Variable5a); //klappt nicht in fremder Prozedur, lokale Variable
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Test;
end;
end.
Unit2
Delphi-Quellcode:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm2 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
Variable1b: String;
public
{ Public-Deklarationen }
Variable2b: String;
end;
var
Form2: TForm2;
Variable3b: String;
implementation
{$R *.dfm}
var
Variable4b: String;
procedure TForm2.FormCreate(Sender: TObject);
var
Variable5b: String;
begin
Variable1b := ' Hallo Welt 1 B!';
Variable2b := ' Hallo Welt 2 B!';
Variable3b := ' Hallo Welt 3 B!';
Variable4b := ' Hallo Welt 4 B!';
end;
end.
|
|
Zitat
|