![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перехват сообщений при создании компонентов
Константинов © (2004-09-15 21:57:00)Как советуют в книгах, протестировал свой визуальный компонент ( потомок 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-10-08 08:20:00) [1]> Константинов © (15.09.04 21:57)
> Вылетает AV при попытке добавить компонент на форму или при
> щелчке мышью на компоненте или на проектируемой форме .
Следовательно, Ваши обработчики сообщений мыши здесь совершенно ни при чем, не так ли?
При добавлении компонента на форму срабатывает его конструктор, а затем происходит вот что.
Меняется Designer.Selection (выбранный компонент в дизайнере форм), IDE считывает список свойств компонента и значений этих свойств (чтобы показать его в Object Inspector) и создает экземпляр редактора компонента (TComponentEditor, либо его потомок, если такой имеется). То же самое происходит и при выборе компонента щелчком мыши, и при щелчке по форме (если до этого она не имела фокуса, но перед тем был выбран Ваш компонент).
Вот где-то тут у Вас и ошибка. Скорее всего, что-то намудрили со свойствами. Похоже, в одном из методов Get происходит обращение по неверному адресу - вот туда-то, видимо, и нужно вставить if csDesigning in ComponentState.
Amoeba (2004-09-17 11:07:00) [2]inherited трогать не надо.
Константинов (2004-09-16 17:51:00) [3]inherited не помогло... а вот ComponentState х-м... сейчас попробую.
Amoeba (2004-09-16 14:10:00) [4]А если делать проверку св-ва ComponentState на csDesigning?
Константинов (2004-09-16 07:15:00) [5]Во сне пришла мысль, что inherited нужно ставить впереди, вечером проверю. :)