C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Назначение редактора для, свойства своего компонента
Deem
Отправлено: 17.11.2005, 11:42


Мастер участка

Группа: Участник
Сообщений: 327



Создал пимпу TDLButton, добавил поле(property) ModalResult типа TModalResult.
Так как это целый тип, то в редакторе есть возможность вводить целое число, а стоит выбирать из списка mr... — константы, как у BitBtn.
Порылся и нашел редактор свойства типа TModalResult, называемый TModalResultProperty в файле VCLEditors.pas, который обрабатывает все по стандарту. Попытался назначить. Паскалевский вариант не ругается
CODE

RegisterPropertyEditor(TypeInfo(TModalResult),
                  TDLButton, 'ModalResult',
                  TModalResultProperty);


Но в редакторе свойства список констант так и не появился. Бибилиотека несколько раз перестраивалась и рпереставлялась.

А сишный вариант так и не составил: не нашел замены паскалевского TypeInfo на сишный аналог. __typeinfo и __classid — только для классов, порожденных он TObject, а у меня int.

Подскажите, кто знает, живой вариант.



Rius
Отправлено: 17.11.2005, 12:21


Мастер участка

Группа: Участник
Сообщений: 321



CODE
typedef enum {bisStandart, bisVisualStyle, bisImageLabel} TButtonImageStyle;


...
{
...
__published:
__property TButtonImageStyle ButtonStyle = { read=FButtonStyle, write=SetButtonStyle, default=bisStandart };
....
}

ничего регистрировать не нужно, редактор для типов enum уже существует

возможно она у вас просто обьявлена как int, а не TModalResult...

Отредактировано Rius — 17/11/2005, 15:23
Deem
Отправлено: 17.11.2005, 13:01


Мастер участка

Группа: Участник
Сообщений: 327



(Зло: хе-хе-хе) cool.gif

Так редакторы для enum назначать не надо, эт я знаю и пользуюсь.
TModalResult создан из int — я тоже знаю:

typedef int TModalResult;

Против перехода на enum такие вещи:
новые пимпы заменяют BitBtn в существующем проекте с минимальными затратами. DFM — ы не должны изменяться (кроме типа пимпы, тут не объедешь) ;
в будущем мне понадобятся таки новые редакторы своих свойств, и лучше бы разобраться уже. Полно примеров на паскале, и совсем мало (или даже нет) на C++.

Да уж. Предстоит копать в полный рост.
Rius
Отправлено: 17.11.2005, 13:17


Мастер участка

Группа: Участник
Сообщений: 321



скачайте Холлингвурта, там почти все по этой теме
C++Builder 5/6 Developer 's Guide. (C++Builder 5. Руководство разработчика)
только для bcb6 кое что нужно переделывать wink.gif

Отредактировано Rius — 17/11/2005, 16:18
GIZMO
Отправлено: 17.11.2005, 14:23


Машинист паровоза

Группа: Участник
Сообщений: 174



QUOTE (Deem @ 17/11/2005, 11:42)
Создал пимпу TDLButton, добавил поле(property) ModalResult типа TModalResult.
Так как это целый тип, то в редакторе есть возможность вводить целое число, а стоит выбирать из списка mr... — константы, как у BitBtn.
Порылся и нашел редактор свойства типа TModalResult, называемый TModalResultProperty в файле VCLEditors.pas, который обрабатывает все по стандарту. Попытался назначить. Паскалевский вариант не ругается
CODE

RegisterPropertyEditor(TypeInfo(TModalResult),
TDLButton, 'ModalResult',
TModalResultProperty);


Но в редакторе свойства список констант так и не появился. Бибилиотека несколько раз перестраивалась и рпереставлялась.

А сишный вариант так и не составил: не нашел замены паскалевского TypeInfo на сишный аналог. __typeinfo и __classid — только для классов, порожденных он TObject, а у меня int.

Подскажите, кто знает, живой вариант.

CODE

TTypeInfo* IntTypeInfo(void)
{
 TTypeInfo* typeInfo = new TTypeInfo;
 typeInfo->Name = "int";
 typeInfo->Kind = tkInteger;
 return typeInfo;
}

RegisterPropertyEditor(
 IntTypeInfo(),
 __classid( TDLButton), “ModalResult”,
 __classid(TModalResultProperty));



или

CODE

TPropInfo* PropInfo = ::GetPropInfo
 (__typeinfo(TDLButton), "ModalResult" );
RegisterPropertyEditor(*PropInfo->PropType,
 __classid(TDLButton), "ModalResult",
 __classid(TModalResultProperty));

Deem
Отправлено: 17.11.2005, 15:06


Мастер участка

Группа: Участник
Сообщений: 327



IntTypeInfo — где-то в исходниках я ее встречал... smile.gif Попробую со своей .
И за ссылку спасибо.

.... sad.gif Здается мне, она — дохлая.

Отредактировано Deem — 17/11/2005, 15:08
Deem
Отправлено: 17.11.2005, 15:11


Мастер участка

Группа: Участник
Сообщений: 327



О!!!!!!!

Вот этот вариант пропер мгновенно:

CODE

TPropInfo* PropInfo = ::GetPropInfo
(__typeinfo(TDLButton), "ModalResult" );
RegisterPropertyEditor(*PropInfo->PropType,
__classid(TDLButton), "ModalResult",
__classid(TModalResultProperty));


Большое спасибо!
Deem
Отправлено: 17.11.2005, 15:59


Мастер участка

Группа: Участник
Сообщений: 327



Однако....


Теперь любой проект с этой пимпой требует линковки модуля с редактором свойства!

Пытаюсь найти возможность разделить пакеты на Design и Runtime...
Или это не в ту степь?

Отредактировано Deem — 17/11/2005, 16:05
Guest
Отправлено: 17.11.2005, 16:47


Не зарегистрирован







В ту самую,
а ссылка сдохла сегодня, как и другая такая же sad.gif
[url-http://www.progz.ru/forum/viewtopic.php?t=14482&sid=df9541b76cc2fe7effc2ca941670c4e0]вот еще[/url]

мне это разделение уменьшило вес exe на килобайт 20 (при самом exe в 3МБ) biggrin.gif
Deem
Отправлено: 17.11.2005, 17:19


Мастер участка

Группа: Участник
Сообщений: 327



Дело не в экономии места smile.gif, а в мороке. Ну пока такая: есть файл proxies.dcu (не obj и не pas!), которого требует DesignIntf, который требуется модулю DesignEditors. Два последних прицепил к проекту компонента. В дезайне дальше все работает. А при компиляции проекта с пимпой раздаются крики "Хочу proxies.obj". Хотя может в Инете найти попробовать? Но хочется все по-взрослому чтобы было. smile.gif



Вернуться в Вопросы программирования в C++Builder