Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#11

Re: schon wieder ein Problem mit globale Variablen...

  Alt 30. Jun 2009, 14: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.
  Mit Zitat antworten Zitat