Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Вниз

добавить свойство классу 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.043 c
1-1128237757
тт
2005-10-02 11:22
2005.10.23
Подскажите ссылку на примеры(или хелп) работы с Word97-2000.


2-1128174460
NightLord
2005-10-01 17:47
2005.10.23
Программное создание компонента


6-1114571862
Stepan
2005-04-27 07:17
2005.10.23
idFtp client - вывод содержимого каталога


3-1126111521
ser_
2005-09-07 20:45
2005.10.23
Число пользователей


14-1127900866
Beks
2005-09-28 13:47
2005.10.23
CHM





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский