Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - 2-D dynamische Arrays
FinnO - Mo 13.07.09 19:28
Titel: 2-D dynamische Arrays
Hi leute!
Ich habe ein Problem mit dem Längensetzen von 2Dimensionalen arrays:
Delphi-Quelltext
1: 2: 3: 4:
| SetLength(Area,Width); for i := 0 to length(Area) - 1 do SetLength(Area[i],Height); |
wobei
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| type TPhysicPixelArea = Array of Array of TPhysicPixel;
type foo
public property Area : TPhysicPixelArea read FArea write FArea; end; |
Dabei erhalte ich immer die Fehlermeldung
Quelltext
1:
| [Pascal Fehler] destructable.pas(52): E2197 Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden |
Was mache ich denn falsch? *festestelldasseskeinenheulsmiliegibt:'(*
jaenicke - Mo 13.07.09 19:35
Du kannst eine Eigenschaft nicht als Variable benutzen. ;-)
Du müsstest also ein Array definieren wie du es brauchst und kannst dieses dann als Ganzes an die Eigenschaft zuweisen.
Besser wäre, wenn du einfach einen Setter für die Größe des Arrays einführst oder so.
Regan - Mo 13.07.09 19:36
FinnO hat folgendes geschrieben : |
*festestelldasseskeinenheulsmiliegibt:'(* |
Und ob: :bawling:
FinnO - Mo 13.07.09 19:43
danke, klappt super. Mir ist nur noch nicht ganz klar, warum man eine property nicht als parameter angeben darf.
Idee: Liegt daran, dass hinterher die Länge in den Parameter geschrieben wird?!
jaenicke - Mo 13.07.09 19:47
Eine Eigenschaft ist anders als eine Variable nicht direkt eine Adresse im Speicher. Und deshalb wird die Eigenschaft jeweils gelesen und gesetzt.
Das ist auch der Grund, weshalb der Zugriff auf Memo1.Text[i] extrem langsam ist. Dabei wird jeweils der String Text geholt und dann dort auf den Buchstaben zugegriffen. Bei einer Variablen könnte man direkt auf das i-te Zeichen zugreifen, das eben soundsoviel Byte vom Start des Speicherbereichs im Speicher liegt.
FinnO - Mo 13.07.09 20:05
okay, ich muss meine Aussage nochmal zurückziehen...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure SetAreaSize(X,Y : Integer; Area : TPhysicPixelArea); var i: Integer; begin SetLength(Area,X); for i := 0 to length(Area) - 1 do SetLength(Area[i],Y); end; |
bringt gar nichts, bzw. ist
length(Area) immer 0 :'-(
Hat jemand einen heißen Tipp?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!