03. juli 2000 - 15:03Der er
8 kommentarer og 1 løsning
Dyn. 2 dim. array - igen
Hej
Jeg spurgte for et par dage siden om, hvordan man satte længden på et 2 dim. array (altså dynamisk :) Der skulle man feks. skrive
SetLength(MitArray, 100, 100);
Men så hedder den første plads i arrayet 0. Det er også tit godtnok, men jeg er ved at lave et komponent, hvor det er rimelig vigtigt at den starter på 1. Er det muligt ?? Hvis ja hvordan ??
Så vidt jeg husker kan du angive et eller andet sted om dine arrays starter med 0 eller med 1 når du ikke selv angiver arrayet. Det bør hedde noget med BASE(0) eller BASE(1), men jeg er ikke helt sikker på hvor, eller hvordan, du skal gøre det.
Prøv at se om du kan finde noget omkring "base" (el. arraybase eller noget i den stil)
Kan du ikke "bare" lavet en Property der læser dit array "som om" de started med 1. Det vil sige at dit fysiske array går fra 0 til 99 men når du tager fat i det via Property'en "ser det ud som om" det gik fra 1 til 100 ???
Vi "springer over hvor der er hul i hegnet" og beskriver således kun indholdet af GetArray/SetArray:
<SNIP> Function TWhatever.GetArray(iIdx : Integer) : String; begin if iIdx < 1 then iIdx := 1; // "God vane" if iIdx > 100 then iIdx := 100; Result := FArray[iIdx-1]; end;
Procedure TWhatever.SetArray(iIdx : Integer; szValue : String); begin if iIdx < 1 then iIdx := 1; // "God vane" if iIdx > 100 then iIdx := 100; FArray[iIdx+1] := szValue; end; </SNIP>
Når du skal "bruge data" så glemmer du alt om FArray og læser/sætter alt gennem din property.
<SNIP> var Whatever : TWhatever; szTest : String; begin Whatever := TWhatever.Create; Whatever.ArrayValue[35] := 'Test': szTest := Whatever.ArrayValue[35]; Whatever.Free; </SNIP>
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.