Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Mehrdimensionales Array variable auslegen (https://www.delphipraxis.net/133052-mehrdimensionales-array-variable-auslegen.html)

EWeiss 24. Apr 2009 12:47


Mehrdimensionales Array variable auslegen
 
Wie kann ich das Array variabel auslegen?
Delphi-Quellcode:
ia:      array [0..767, 0..100] of byte;
Das ich die werte also zur laufzeit ändern kann.

gruss Emil

mkinzler 24. Apr 2009 12:49

Re: Mehrdimensionales Array variable auslegen
 
Als dynamischen Array:

Delphi-Quellcode:
ia: Array of Array of Byte;
oder
Delphi-Quellcode:
Type
    ByteArray = Array of Byte;
...
   ia: array of ByteArray;

EWeiss 24. Apr 2009 12:51

Re: Mehrdimensionales Array variable auslegen
 
Zitat:

Zitat von mkinzler
Als dynamischen Array:

Delphi-Quellcode:
ia: Array of Array of Byte;
oder
Delphi-Quellcode:
Type
    ByteArray = Array of Byte;
...
   ia: array of ByteArray;

Wie wird dann die neue länge als beispiel bei 100 zugewiesen ?

sorry wenn die frage was dumm daher kommt.

Danke schön ..

gruss Emil

mkinzler 24. Apr 2009 12:53

Re: Mehrdimensionales Array variable auslegen
 
Delphi-Quellcode:
SetLength( ia, 100);

himitsu 24. Apr 2009 12:55

Re: Mehrdimensionales Array variable auslegen
 
Delphi-Quellcode:
ia = Array of Array of Byte;
// oder einfach nur
ia = Array of {Types.}TByteDynArray;
Delphi-Quellcode:
// ia: Array[0..767, 0..100] of Byte;

SetLength(ia, 768);
For i := 0 to High(ia) do
  SetLength(ia[i], 101);

// oder

SetLength(ia, 768, 101);

EWeiss 24. Apr 2009 12:56

Re: Mehrdimensionales Array variable auslegen
 
Zitat:

Zitat von mkinzler
Delphi-Quellcode:
SetLength( ia, 100);

Ja bei eindimensional oder ?
Das ist was ich nicht verstehe... in dem zusammenhang

Delphi-Quellcode:
var
  ia : array of byte
länge zuweisen..
Delphi-Quellcode:
Setlength(ia, 100);
Habe hier aber 2 einträge ..
Delphi-Quellcode:
ia: array [0..767, 0..100] of byte;
Muss ja in dem fall wissen welcher seite ich den neuen wert zuweise.

gruss Emil

EWeiss 24. Apr 2009 12:59

Re: Mehrdimensionales Array variable auslegen
 
Zitat:

Zitat von himitsu
Delphi-Quellcode:
ia = Array of Array of Byte;
// oder einfach nur
ia = Array of {Types.}TByteDynArray;
Delphi-Quellcode:
// ia: Array[0..767, 0..100] of Byte;

SetLength(ia, 768);
For i := 0 to High(ia) do
  SetLength(ia[i], 101);

// oder

SetLength(ia, 768, 101);

Ahh High wäre dann der zweite eintrag
Danke schön.

EDIT:
warum dann einen wert mehr ?
aus 767 wird 768 ?

gruss Emil

mkinzler 24. Apr 2009 13:01

Re: Mehrdimensionales Array variable auslegen
 
Nein Heigh ermittelt die obere Grenze des 1. Wertes

himitsu 24. Apr 2009 13:02

Re: Mehrdimensionales Array variable auslegen
 
[info] hab oben was editiert :angel2:

vielleicht fällst es so besser auf, wenn man das trennt ... ergibt Beides das Selbe
Delphi-Quellcode:
ia: Array[0..767, 0..100] of Byte;

ia: Array[0..767] of Array[0..100] of Byte;
und nu erkennt man auch, warum man es wie mit SetLength bearbeiten kann.

PS: hier kann man natürlich auch jedem Unterarray eine eigene Länge verpassen
(nicht alle Arrays der selben Ebene müssen gleich groß sein)

[add]
Zitat:

Zitat von EWeiss
EDIT:
warum dann einen wert mehr ?
aus 767 wird 768 ?

weil 0 bis 767 nunmal 768 Felder sind? :zwinker:


[add2]
hier nochmal das Ganze mit 3 Ebenen ... dürfte do dann hoffentlich klarer werden lassen
Delphi-Quellcode:
ia: Array[0..99, 0..199, 0..299] of Byte;

ia: Array[0..99] of Array[0..199] of Array[0..299] of Byte;

ia: Array of Array of Array of Byte;

SetLength(ia, 100, 200, 300);

SetLength(ia, 100);
For i1 := 0 to High(ia) do Begin { 0 to Length(ia) - 1 }
  SetLength(ia[i1], 200);
  For i2 := 0 to High(ia[i1]) do { 0 to Length(ia[i1]) - 1 }
    SetLength(ia[i1, i2], 300); // SetLength(ia[i1][i2], 300);
End;

EWeiss 24. Apr 2009 13:15

Re: Mehrdimensionales Array variable auslegen
 
Hab es jetzt so gemacht..
Delphi-Quellcode:
var
ia : Array of Array of byte;
Delphi-Quellcode:
nHeight:= PicBB.Height;
nImageSize:= (256*nHeight)*3;
SetLength(ia, 768, nHeight + 1);
jetzt springt er in System.pas rein und meldet
Delphi-Quellcode:
function LoadResString(ResStringRec: PResStringRec): string;
Zugriffsverletzng .. schreiben von Adresse.

Übergebe ich das Array normal
Delphi-Quellcode:
ia: array [0..767, 0..100] of byte;
dann funktioniert es.

gruss Emil


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:07 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz