Lista tablic przy uzyciu TList

0

Witam,
musze stworzyc liste tablic - przy uzyciu TList, bo najwygodniej. W przypadku odczytu danych z listy ktore sa pojedyncze lub nawet sa rekordami, nie ma problemu. Wskaznik na zmienna/rekord a potem Lista.Items[index]^. Ale musze stworzyc liste tablic. Wiem jak ustawic sie na tej tablicy i odczytac pierwszy element tablicy - dodanie do listy tej tablicy ustawia sie przeciez na pierwszym elemencie. Ale jak mam sie dostac do pozostalych elementow tablicy?
pozdrawiam

0

Zadeklaruj typ danych dla listy np.

type
  TMyItem = array of Integer;

potem zrob klase z identycznym wygladem co TList (nie dziedzcz TList). Oczywisce zmien typ z Pointer na TMyItem np.

type
  TMyArrayList = class
  private
    FList: TList;

    function GetItem(): TMyItem;
    procedure SetItem(Index: Integer; const Item: TMyItem);
  public
    ...

    property Item[Index: Integer]: TMyItem read GetItem write SetItem; default;
  end;

teraz chyba wiesz oco mi lata :P

potem uzywasz to poprastu

  
MyArrayList[ItemIndex][IndexInArray]

powinno latac :P

albo ja juz nichce ci sie robic klasy mozesz zrobic to bardziej skomplikowanie :P

np.

  TMyItem(MyArrayList[ItemIndex])[IndexInArray]

choc moim zdaniem lepiej zrobic klase i potem sie nie przejmowac.

Jak nie rozumiesz to napisz wytlumacze lepiej :P.

0
sasio napisał(a)

albo ja juz nichce ci sie robic klasy mozesz zrobic to bardziej skomplikowanie :P

np.

  TMyItem(MyArrayList[ItemIndex])[IndexInArray]

choc moim zdaniem lepiej zrobic klase i potem sie nie przejmowac.

Jak nie rozumiesz to napisz wytlumacze lepiej :P.

Wiem, ze lepiej zrobic klase, ale po pierwsze nie ma chyba az takiej potrzeby, bo jedyne co ja bede potrzebowal, to dodawanie danych do listy i pobieranie ich, a po drugie czaje idee, co napisales, ale czuje, ze nie poradzilbym sobie z ta klasa :P

Jesli mozesz, to wyjasnij dokladniej druga metode. Bo wydaje mi sie, ze ja zostosowalem, ale nie do konca dziala (kompiluje) :P
dzieki ;)

0

Gdyz mam takie cos:

Buffer     : array of string;
BufferList : TList;

...
Dodaje dane do tablicy:

Buffer[index] := 'jakies dane';

i do listy:

BufferList.Add(Buffer);

No i teraz sie sypie przy odczycie:

zm_typu_string := Buffer(BufferList[0]^)[0]

[Error] TB_main.pas(181): Missing operator or semicolon

Mniemam ze nie chodzi o zaden srednik ;)</b>

0

usun znak ^

edit: aha jak rzutujesz to na typ a nie na zmienna :-/

0

Ok, dziala :)
Wystarczylo zrobic cos takiego:

type
  strArray  = array of string;

a potem juz:

  tmpstr := strArray(BufferList[0])[0];

dzieki sasiu ;) [browar]

1 użytkowników online, w tym zalogowanych: 0, gości: 1