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
|
(Зло: хе-хе-хе)
Так редакторы для 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 кое что нужно переделывать
Отредактировано 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 — где-то в исходниках я ее встречал... Попробую со своей .
И за ссылку спасибо.
.... Здается мне, она — дохлая.
Отредактировано 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 |
|
Не зарегистрирован
|
В ту самую,
а ссылка сдохла сегодня, как и другая такая же
[url-http://www.progz.ru/forum/viewtopic.php?t=14482&sid=df9541b76cc2fe7effc2ca941670c4e0]вот еще[/url]
мне это разделение уменьшило вес exe на килобайт 20 (при самом exe в 3МБ) |
|
Deem |
Отправлено: 17.11.2005, 17:19 |
|
Мастер участка
Группа: Участник
Сообщений: 327
|
Дело не в экономии места , а в мороке. Ну пока такая: есть файл proxies.dcu (не obj и не pas!), которого требует DesignIntf, который требуется модулю DesignEditors. Два последних прицепил к проекту компонента. В дезайне дальше все работает. А при компиляции проекта с пимпой раздаются крики "Хочу proxies.obj". Хотя может в Инете найти попробовать? Но хочется все по-взрослому чтобы было.
|
|