Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - type-Deklaration und Variablen in allen Projektunits


bf109g.01 - Do 25.08.11 14:17
Titel: type-Deklaration und Variablen in allen Projektunits
Hallo, ich habe zwei verschiedene Recordtypen. Und zwei jeweils dazugehörige Arraytypen für diese Records angelegt.
Außerdem existieren natürlich noch mehrere Arrays, welche diesen Typen entsprechen.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
//Unit1
type  TFrage = record
                [...]
              end;
 FragenArray = array[1..150of TFrage;

var AFragen, AFilter: FragenArray;

//Unit2
type  TKategorie = record
                    [...] 
                   end;
 KategArray = array[1..50of TKategorie;

var AKateg, Löschliste: KategArray;

Mein Problem ist, dass ich von 2 (uns später vllt 3) verschiedenen Units auf ein und dieselben Record-Arrays Zugriff benötige.
Alternative wäre den gleichen Programmcode in jeder Unit neu einzufügen, nach jedem Zugriff in einer Datei auf der Festplatte zu speichern und von dort mit einer anderen Unit weiterzuarbeiten.
Meiner Meinung nach ist das weder elegant noch effizient, deshalb wüsste ich gerne, wo/wie ich das deklarieren kann, damit alle Units Zugriff auf die RecorsTypen, die Arraytypen und die unter var deklarierten Arrays mit den Daten haben.


Narses - Do 25.08.11 15:17

Moin!

Packe die gemeinsamen Deklarationen in eine eigene Unit und die bindest du dann per uses da ein, wo du sie brauchst. :idea:

cu
Narses


bf109g.01 - Do 25.08.11 15:22

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Packe die gemeinsamen Deklarationen in eine eigene Unit und die bindest du dann per uses da ein, wo du sie brauchst. :idea:


Schon probiert, klappte nicht.
Wie/ unter welchem Punkt muss ich die Infos in die Unit schreiben?

So sieht meine Deklarationsunit aus, die anderen Units erkennen die ArrayTypen nicht.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
unit Deklaration;

interface

uses Forms, Classes, Graphics;
type  TKategorie = record
                   [...]
                   end;
 KategArray = array[1..50of TKategorie;


type  TFrage = record
               [...]
               end;
 FragenArray = array[1..150of TFrage;

implementation

end.


Narses - Do 25.08.11 17:25

Moin!

user profile iconbf109g.01 hat folgendes geschrieben Zum zitierten Posting springen:
Schon probiert, klappte nicht.
Was heißt das als Fehlermeldung? :lupe: ;)

user profile iconbf109g.01 hat folgendes geschrieben Zum zitierten Posting springen:
Wie/ unter welchem Punkt muss ich die Infos in die Unit schreiben?
Ist schon richtig so. :zustimm:

cu
Narses


Xion - Do 25.08.11 22:25

user profile iconbf109g.01 hat folgendes geschrieben Zum zitierten Posting springen:
die anderen Units erkennen die ArrayTypen nicht.

Du musst in deinen andren Units die Unit "Deklaration" bei uses einbinden :nixweiss:

user profile iconbf109g.01 hat folgendes geschrieben Zum zitierten Posting springen:

Mein Problem ist, dass ich von 2 (uns später vllt 3) verschiedenen Units auf ein und dieselben Record-Arrays Zugriff benötige.

In dem Fall müsstest du natürlich auch die Arrays selbst in eine Unit packen (also bei "Deklaration" mit rein)


Bergmann89 - Fr 26.08.11 14:59

Hey,

so wie das aussieht willst du die Arrays als globale Variable definieren. Das sollte man aber vermeiden, weil man bei globalen Varaiblen schnell den Überblick verliert. Wenn du uns beschreibst, was genau du vor hast, dann könn wir dir vlt eine besser Lösung für dein Problem geben ;) Aber um erstma deine Frage zu beantworten:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
unit uTypes;

interface

type
  TTestArray = array of Integer;

var
  MyTestArray: TTestArray;

implementation

end.



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to High(MyTestArraydo
    Memo1.Lines.Add(IntToStr(MyTestArray[i]));
end;

end.




MfG Bergmann.