| 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". Хотя может в Инете найти попробовать? Но хочется все по-взрослому чтобы было.  
 
 
 | 
|  |