Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Array's übergeben


madigeMade - Do 27.03.03 20:47
Titel: Array's übergeben
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


Christian S. - 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:

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>


madigeMade - Do 27.03.03 21:28

Thx Peter!
Hab aber immernoch ein Problem, vielleicht kannst du mir weiterhelfen.

Hier ist mein Code im Formular

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

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


Christian S. - 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.


madigeMade - 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


Christian S. - 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!