Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.23;
Скачать: CL | DM;

Вниз

добавить свойство классу TListColumn ?   Найти похожие ветки 

 
alo   (2004-12-27 00:25) [0]

делается компонент-наследник TCustomListView. нужно добавить новое свойство элементам Columns.
пока я думаю, что нужно сделать вот что:
1. создать класс-наследник TListColumn (TmyListColumn) и добавить туда новое свойство
2. создать класс-коллекцию, продублировав реализацию класса TListColumns с использованием TmyListColumn вместо TListColumn
3. в реализации TmyListView переопределить тип свойства Columns с TListColumns на TmyListColumns.

это правильный подход? если нет -- то как нужно делать правильно?


 
Юрий Зотов ©   (2004-12-27 13:48) [1]

1. Да.

2. Можно, но не обязательно. Достаточно передать свой класс элемента в конструктор коллекции.

3. Тоже можно, но надо убедиться, что не возникнут глюки (свойства невиртуальны, поэтому код VCL будет по-прежнему работать с оригинальным свойством предка, а не с новым свойством потомка).

К сожалению, в TCustomListView не предусмотрены виртуальные методы типа "CreateColumn" и "CreateColumns" (по аналогии с CreateListItem и CreateListItems), которые позволили бы легко подключать свои колонки. Но, поскольку свойство Columns имеет прямой способ доступа по чтению (и имело его во всех версиях Delphi, и вряд ли он когда-нибудь станет другим), можно использовать "хакерский" метод.

type
 PListColumns = ^TListColumns;

constructor TMyListView.Create(AOwner: TComponent);
var
 P: PListColumns;
begin
 inherited;
 P := @Columns; // Получили адрес поля FListColumns
 Colums.Free;
 P^ := TMyListColumns.Create(Self, TMyListColumn)
end;

Есть небольшое неудобство - чтобы добраться до новых свойств колонки, приходится использовать приведение типа.


 
alo   (2004-12-28 21:27) [2]

что-то в двух соснах запутался...
а как TMyListColumns-то написать?

Достаточно передать свой класс элемента в конструктор коллекции.

как это сделать?


 
alo   (2005-01-01 15:57) [3]

уважаемый ЮЗ, подскажите что делать.
сначала я обалдел от object pascal по причине его простоты (так показалось), теперь я в нем ничего не понимаю. где почитать в сети? (книги купить не могу, потому что их нет).
чтение исходников тоже не помогает -- явно выражается непонимание концепции..

прошу прощения за флейм.


 
Юрий Зотов ©   (2005-01-03 10:11) [4]

> alo (01.01.05 15:57) [3]

Если я правильно понял, сам язык, его синтаксис и пр. проблем не представляют, а нужно толковое описание принятой в Delphi объектной модели?

Тогда можно порекомендовать специализированную книгу именно по разработке компонентов, обычно эта тема лучше раскрывается как раз в таких изданиях. Но именно книгу, а не статьи в Сети, которые дадут обрывки знаний но не дадут понимания концепций.

Недавно вышли 2 такие книги, можно использовать любую, какую найдете (а если позволяют средства, то можно взять и обе - они хотя и пересекаются (что естественно), но все же разные).

М. Голованов, Е. Веселов. Создание компонентов в среде Delphi. Руководство разработчика.

В. Фаронов. Искусство создания компонентов Delphi.


 
alo   (2005-01-03 19:37) [5]

2ЮЗ
да, Вы правильно меня поняли. будем искать.
спасибо



Страницы: 1 вся ветка

Текущий архив: 2005.10.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.031 c
3-1125753636
fedor
2005-09-03 17:20
2005.10.23
DisableControl-EnableControl


1-1128105720
Volf_555
2005-09-30 22:42
2005.10.23
Проблема с временем


2-1128239239
elysee
2005-10-02 11:47
2005.10.23
CSV(MS-DOS)


2-1127995705
Гость22
2005-09-29 16:08
2005.10.23
Как узнать, что пользователь закрыл модально открытую форму?


10-1106136082
Andy BitOff
2005-01-19 15:01
2005.10.23
Закрытие WINWORD.EXE. Как?