Citat:
Sortiranje zapisa po imenu bi napravilo konfuziju jer se menja redni broj svakog zapisa, a on je osnova za pristup određenom zapisu.
U ovome je koska. Pod 'niz' pretpostavljam da mislis na staticki array, a pod 'zapis' na record. Kako bih ja to uradio:
1) definisi pointer na tvoj record, ovako nesto
Code:
type
PMyRec = ^TMyRec;
TMYRec = record
// neki podaci o vezanim/zavisnim recordima
SubRec: PMyRec;
end;
2) umesto niza, koristi listu i u nju ubacuj novokreirane recorde
Code:
var
NewRec: PMyRec;
begin
MyList := TList.Create; // ovo ne ide ovde, pojasnjavamo STA JE
// dodajemo novi record
new(NewRec);
MyList.Add(NewRec); // ili Insert, kako god
end;
3) umesto rednih brojeva upisuj upravo pointere na recorde iz liste (mozes napraviti neke metode za to)
Code:
var
OldRec, NewRec: PMyRec; // takodje ne ide ovde, cisto da se zna sta je sta
begin
OldRec^.SubRec := NewRec; // umesto rednog broja stavljamo pointer
end;
Obrati paznju kako prilazis dinamicki kreiranom recordu iz liste - dereferenciranjem (OldRec^.)
Kod je malo nabacan, ali ideja je sledeca. Sa listom mozes da radis sta hoces, pointeri/elementi liste uvek zadrzavaju svoje vrednosti, sto ce reci da se ne gube veze koje si vec napravio. A to nije slucaj kad radis sa statickim nizom recorda i rednim brojevima recorda.
Ako ne volis da radis sa pointerima, onda umesto recorda koristi klase. Delphi automatski radi dereferenciranje objekta. Znaci ono pod 1) i 2) bi bilo nekako ovako
Code:
type
TMyZapis = class
// neki podaci o vezanim/zavisnim objektima
SubZapis: TMyZapis;
end;
// ----------------------------
var
NewZapis: TMyZapis;
begin
// dodajemo novi record
NewZapis := TMyZapis.Create;
MyList.Add(NewZapis); // ili Insert, kako god
end;
// ----------------------------
OldZapis.SubZapis := NewZapis; // umesto rednog broja stavljamo objekat
U oba slucaja, moras da radis sam unistavanje zauzete memorije - bilo recorda (sa Dispose(AnyRec)) bilo objekata (sa AnyZapis.Free).
Uh... mozda te ovo malo zbuni, ako nisi pre radio dinamicki sa memorijom. Ali ovako nekako funkcionise citav Delphi, i nije tako slozeno kako se cini.
Pozz