Главная страница
    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.45 MB
Время: 0.043 c
11-1109735577
Денис
2005-03-02 06:52
2005.10.23
ComboBox и OnChar


1-1128152033
Иванов__
2005-10-01 11:33
2005.10.23
Как в DHTML вставить текст


3-1126791050
erika
2005-09-15 17:30
2005.10.23
Как можно получить текущий год


1-1128155503
Kolan
2005-10-01 12:31
2005.10.23
Как правильно удалить запись содержащюю дин. массивы


1-1128184001
igor456
2005-10-01 20:26
2005.10.23
Прочитать файл





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский