Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > доступ к свойствам объектов в TList


Автор: dtp 22.7.2009, 15:03
Подскажите, пожалуйста, забыл как это делал.
Создаю список объектов. Нужен доступ к свойствам объектов, чтобы можно было бы их редактировать. Как-то делал, но не могу найти прежний код.
Вот код, который позволяет читать, но не позволяет редактировать - присваивать значение:
 
Код


 TapSite=Record
  Empty:Boolean;
  BuildingID:Integer;
 End;

TSite=class
  Info: TapSite;
 end;
 
  TListSite=class
    private
    FItem:TList;
    FCount:Integer;
    public
    constructor Create;
    function AddSite:Integer;
    function Delete(ID:Integer):Boolean;
    function Items(ID:Integer):TapSite;
    procedure Clear;
    property Count:Integer read FCount;
  end;
 
 
{ TListSite }
//--------------------------SITE LIST ADD------------------------------------------------------
function TListSite.AddSite: Integer;
begin
 self.FItem.Add(TSite.Create);
 FCount:=FItem.Count;
 Result:= FItem.Count-1;
end;
//--------------------------SITE LIST CLEAR------------------------------------------------------
procedure TListSite.Clear;
begin
 FItem.Clear;
 FCount:=FItem.Count;
end;
//--------------------------SITE LIST CREATE------------------------------------------------------
constructor TListSite.Create;
begin
 inherited;
 FItem:=TList.Create;
 FCount:=FItem.Count;
end;
//--------------------------SITE LIST DELETE------------------------------------------------------
function TListSite.Delete(ID: Integer): Boolean;
begin
 Result:=FALSE;
 if (FItem.Count=0) or (ID>FItem.Count) then exit
  else  FItem.Delete(ID);
 FCount:=FItem.Count;
 Result:=TRUE;
end;
//--------------------------SITE LIST ITEMS------------------------------------------------------
function TListSite.Items(ID: Integer): TapSite;
begin
  if (ID>0) and (ID<FItem.Count) then
   Result:=TSite(FItem.Items[ID]).Info;
end; 


Нужна такая реализация (чтобы скрыть типы классов):
 
Код

SitesList.Items(loop).Empty:=TRUE; //запись какого-то свойства объекта в списке


Автор: niteo 22.7.2009, 16:03
Чет ты перемудрил...
юзай property

Автор: dtp 22.7.2009, 16:26
TList.Items:[index:Intger]:Pointer
а мне нужно возвращать запись (Record).. то есть, для работы с property нужно создавать 2 функции (Set/Get), но присваивать придется всю запись (Record), а не ее элемент 


Уже решил! Возвращаю ссылку на объект, а не саму запись.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)