Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 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.014 c
4-1121525767
PSV84
2005-07-16 18:56
2005.09.04
Работа с тензоизмерителями М0600-Д4 "Микросим"


5-1097175244
Sergey_Masloff
2004-10-07 22:54
2005.09.04
D7 only! control has no parent window


14-1123758028
ПЛОВ
2005-08-11 15:00
2005.09.04
Любители ужОсов :)


3-1122446270
Aks13
2005-07-27 10:37
2005.09.04
Delphi7 + Oracle9


14-1123617830
quickblack
2005-08-10 00:03
2005.09.04
help, please





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский