Autor Beitrag
madigeMade
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Do 27.03.03 20:47 
Hi @ all!
Hab ein saublödes Problem. Ich nutze in meinem Programm ein dreidimensionales Array. Da ich es öfters verändern will, aber immer wieder gleich hab ich mir eine Unit zurechtgeschrieben. Jetzt hab ich das Problem, wie übergebe ich dieses Array vom Formular in die Unit??

Thx de Made

_________________
Ich kam, sah und schrieb ein Prog.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 27.03.03 20:54 
Ein Array kannst Du (fast) so benutzen, wie eine "normale" Variable. Du kannsst es auch als Parameter an Funktionen bzw. Prozeduren übergeben. Jedoch kannst Du dann in diesem Funktionen / Prozeduren nicht die Funktion SetLength aufrufen!

<edit>
Du kannst das Problem so umgehen:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
type
  my_type = Array of Integer;

var
  array1 : Array of Integer;
  array2 : my_type;

implementation

procedure laenge_setzen1 (test : Array of Integer);
begin
  SetLength(test,10); //<-- geht nicht
end;

procedure laenge_setzen2 (test : my_type);
begin
  SetLength(test,10); //<-- geht, da mit Typ gearbeitet
end;


</edit>

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
madigeMade Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Do 27.03.03 21:28 
Thx Peter!
Hab aber immernoch ein Problem, vielleicht kannst du mir weiterhelfen.

Hier ist mein Code im Formular
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
type
  feld = array[1..5,1..5,1..5] of integer;

implementation
{$R *.dfm}

procedure schreiben ( test : feld);
begin
  a( test );
end;


und hier der von meiner unit
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
interface
type
  feld = array[1..5,1..5,1..5] of integer;
procedure a(test : feld);
implementation
procedure a(test : feld);
begin
  test[1,1,1]:=1;
end;
end.


Sieht für mich richtig aus, die Fehlermeldung lautet aber [Error] Unit1.pas(29): Incompatible types: 'Unit1.feld' and 'Unit2.feld'
Wieso?

Thx de Made

_________________
Ich kam, sah und schrieb ein Prog.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 27.03.03 21:33 
Wahrscheinlich mag er es nicht, dass Du zwei Typen mit dem gleichen Namen deklariert hast. Ich würde mal aus einer der beiden Units die Typdefinition rausnehmen. Das sollte gehen.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
madigeMade Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Do 27.03.03 22:18 
Also Typdefinition rausgenommen, aber wie soll ich den Procedureparameter deklarieren?
procedure a(test: ??? ) in der unit, da ja kein type mehr da is

Thx de Made

_________________
Ich kam, sah und schrieb ein Prog.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 27.03.03 22:36 
Aber über die USES-Klausel sollte die Typdefiniton doch auch für die andere Unit gelten!
Wenn ich also in Unit1 meine Form1 deklariere und dort mein Hauptprogramm habe und in Unit2 meine Procedure und die Typdefinition, dann schreibe ich Unit2 in die USES-Klausel von Unit1 und kann Procedure und Typdefinition verwenden. In Unit1 brauche ich keins von beidem mehr. Nur die Unit2 in der USES-Klausel!

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".