Форум: "Компоненты";
Текущий архив: 2005.09.04;
Скачать: [xml.tar.bz2];
ВнизПерехват сообщений при создании компонентов Найти похожие ветки
← →
Константинов © (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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.012 c