Главная страница
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.055 c
14-1122646602
TUser
2005-07-29 18:16
2005.09.04
Басаев на TV


14-1123525089
Knight
2005-08-08 22:18
2005.09.04
На каком тарифе в Москве самый дешовый GPRS?


14-1123528738
Flox
2005-08-08 23:18
2005.09.04
Френсис Хилл "OpenGL Программирование Компьютерной графики"


2-1123015211
Pasha L
2005-08-03 00:40
2005.09.04
Скопировать, вставить, переименовать файлы


3-1121855749
Artyom_
2005-07-20 14:35
2005.09.04
соеденение с БД котрая лежит в инете