Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.04;
Скачать: CL | DM;

Вниз

Перехват сообщений при создании компонентов   Найти похожие ветки 

 
Константинов ©   (2004-09-15 21:57) [0]

Как советуют в книгах, протестировал свой визуальный компонент ( потомок TPaintBox ), динамически создавая экземпляр без добавления в палитру компонентов  все работает на ура. После инсталяции в палитру компонент ведет себя весьма странно, а точнее бастует напрочь. Вылетает AV при попытке добавить компонент на форму или при щелчке мышью на компоненте или на проектируемой форме.

Я перехватывал сообщения мыши и видимо не удачно:

   procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN;
   procedure WMLButtonUp(var Message: TWMLButtonUp); message WM_LBUTTONUP;
   procedure WMMouseMove(var Message: TWMMouseMove); message WM_MOUSEMOVE;
   procedure WMLButtonDblClk(var Message: TWMLButtonDblClk); message WM_LBUTTONDBLCLK;

класса TContorl

Что может быть? Чего нельзя делать компоненту на этапе разработки?  Код слишком большой, чтобы его приводить полностью, но эти процедуры я перехватывал для перерисовки компонента по щелчку мыши и генерации моего события OnSelected ( выделение цветом определенного участка компонента ) после моего кода в процедуре я ставил  inherited;

Сорри за сумбурное изложение.
Заранее спасибо.


 
Константинов ©   (2004-09-16 07:15) [1]

Во сне пришла мысль, что inherited нужно ставить впереди, вечером проверю. :)


 
Amoeba ©   (2004-09-16 14:10) [2]

А если делать проверку св-ва ComponentState на csDesigning?


 
Константинов ©   (2004-09-16 17:51) [3]

inherited не помогло... а вот ComponentState х-м... сейчас попробую.


 
Amoeba ©   (2004-09-17 11:07) [4]

inherited трогать не надо.


 
Юрий Зотов ©   (2004-10-08 08:20) [5]

> Константинов ©   (15.09.04 21:57)  

> Вылетает AV при попытке добавить компонент на форму или при
> щелчке мышью на компоненте или на проектируемой форме.

Следовательно, Ваши обработчики сообщений мыши здесь совершенно ни при чем, не так ли?

При добавлении компонента на форму срабатывает его конструктор, а затем происходит вот что.

Меняется Designer.Selection (выбранный компонент в дизайнере форм), IDE считывает список свойств компонента и значений этих свойств (чтобы показать его в Object Inspector) и создает экземпляр редактора компонента (TComponentEditor, либо его потомок, если такой имеется). То же самое происходит и при выборе компонента щелчком мыши, и при щелчке по форме (если до этого она не имела фокуса, но перед тем был выбран Ваш компонент).

Вот где-то тут у Вас и ошибка. Скорее всего, что-то намудрили со свойствами. Похоже, в одном из методов Get происходит обращение по неверному адресу - вот туда-то, видимо, и нужно вставить if csDesigning in ComponentState.



Страницы: 1 вся ветка

Текущий архив: 2005.09.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
3-1121748027
emo
2005-07-19 08:40
2005.09.04
ODBC+login


2-1063442253
Максимка
2003-09-13 12:37
2005.09.04
С чего начать, мастера, дайте совет!!!


14-1123734954
Fin
2005-08-11 08:35
2005.09.04
Ура. Отпуск.


14-1123878999
romychk
2005-08-13 00:36
2005.09.04
пересылка файлов модемом


3-1121958144
Prohodil Mimo
2005-07-21 19:02
2005.09.04
клонирование записей из 3х связанных таблиц