Witam,
jak w Delphi 7 enumerować listę, która jest indeksowana za pomocą stringa? Z tego co się naszukałem to w nowszych wersjach delphi można zastosować pętlę for ... in ... do ale nie mogę nic wymyślić jakby to można zrobić w D7.
Witam,
jak w Delphi 7 enumerować listę, która jest indeksowana za pomocą stringa? Z tego co się naszukałem to w nowszych wersjach delphi można zastosować pętlę for ... in ... do ale nie mogę nic wymyślić jakby to można zrobić w D7.
A co to jest za lista, jakiego typu?
w jakim sensie lista jest indeksowana za pomoca stringa ?
Mozesz pokazac kawalek kodu ?
interfejs tej listy jest zadeklarowany w ten sposób:
PointList = interface(IDispatch)
procedure Add(const PointToAdd: PIPoint); safecall;
property Count: Integer read Get_Count;
property Item[var Index: string]: PIPoint read Get_Item; default;
...
end;
i odwołać się mogę do konkretnego obiektu tylko po jego indeksie, który jest stringiem - czyli w taki sposób
myPoints.item['jakasnazwa'].value;
myPoints.item['inna_nieznana_nazwa'].value;
itd.
jeśli nie indeksujesz jej typem wyliczeniowym (byte, int, char, enum) to se ne da - musisz dodać indekser
oczywiscie - gdyby to byla tablica dynamiczna - mozna zrobic for Low(tablica) to High(tablica) - ale to i tak z automatu odwoluje sie do wewnetrznego indeksu elementow.
generalnie nie spotkalem sie z konstrukcja (mowa o natywnym mechanizmie Delphi, a nie klasie, czy innej konstrukcji "wyzszego rzedu"), ktora pozwalalaby sie odwolywac do elementow listy bezposrednio po nazwie elementu.
Oczywiscie - moge byc na to za glupi.
Owszem - spotkalem sie z czyms takim w SQL - to znaczy tam klucz glowny oparty na konkretnym, unikalnym polu jest rzecza normalna, ale w Delphi - nie widze takiego mechanizmu.
Jeśli możesz mieć wpływ na tę klasę, to dodaj po prostu numerowanie po indeksie. Zresztą żeby działało for..in z nowszych Delphi dla twojej klasy, i tak musiałbyś coś tego typu zadeklarować.
Po długich poszukiwaniach znalazłem działające rozwiązanie. Opis zamieściłem w gotowcach Implementacja Foreach