Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Классы на базе TList...


Страницы:   1 2 3

Knight ©   (2007-04-27 14:20:00) 

Сколько раз хотел разобраться с этим вопросом, но всё время что-то отвлекало... но надоело, хочу таки разобраться! Мож поможите? :)

Допустим есть какой-то тип
TMyItem=record
Str1:String;
...
end;

Надо загнать эти итемсы в лист так чтобы обрачаться с ним
MyList[i].Str1
а не
PMyItem(MyList[i])^.Str1
Мож кто накидает скелет класса?

TMyList=class(TList)

end;


default   (2007-04-27 14:57:00) [41]

Knight ©   (27.04.07 14:45) [4]
ну ты можешь внутри класса своей специализированной коллекции использовать тот же TList, а в интерфейс своего класса добавить методы типа Add(item: TYourItemType); Remove(item: TYourItemType)....
и будет типа

....
Private List: TList;
...
типами элементов коллекции я тут считаю записи(как у тебя в сабже)
procedure TYourCollection.Add(item: TYourItemType);
begin
  List.Add(@item)
end;

function TYourCollection.Contains(item: TYourItemType): Boolean;
var
 i: Integer;
begin
  for i := 0 to List.Count-1 do
     if PYourItemType(List(i))^ = item then begin
          Result := True;
          Exit;
      end;
    Result := False;
 end;
end;


Knight   (2007-04-27 14:45:00) [42]

> [1] clickmaker ©   (27.04.07 14:22)
> таких скелетов целый склад в Classes.pas VCL


Вот там как-паз окромя самого TList и нет ничего... а без интерфейсов никак?


Knight   (2007-04-27 14:36:00) [43]

> [2] Сергей М. ©   (27.04.07 14:30)

"какой-то" для примера.. а так будет вполне определённый для конкретной задачи.


Сергей М.   (2007-04-27 14:30:00) [44]


> Допустим есть какой-тотип


При условии "какой-то" (а не заранее определенный) готового решения нет и быть не может, если это только не диспинтерфейс.


clickmaker   (2007-04-27 14:22:00) [45]

таких скелетов целый склад в Classes.pas VCL

function Get(Index: Integer): IInterface;
procedure Put(Index: Integer; const Item: IInterface);

property Items[Index: Integer]: IInterface read Get write Put; default;


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо