Главная страница
    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.047 c
14-1128072525
LordOfRock
2005-09-30 13:28
2005.10.23
Радио Maximum


14-1128366552
Fanny
2005-10-03 23:09
2005.10.23
Компиляция и версия Винды


14-1128239892
Kerk
2005-10-02 11:58
2005.10.23
Один день


3-1126700860
DUDAS
2005-09-14 16:27
2005.10.23
Обновление Query


2-1127915344
Igor_thief
2005-09-28 17:49
2005.10.23
Tnotebook





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