Главная страница
    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.012 c
4-1121370701
Igit
2005-07-14 23:51
2005.09.04
Как узнать адресс процелуры


4-1121502941
Delphi_is_cool
2005-07-16 12:35
2005.09.04
Как отловить клик правой кнопи мыши ?


1-1123740259
lordverd
2005-08-11 10:04
2005.09.04
RichEdit и блокирование объектов


6-1116353312
lifo
2005-05-17 22:08
2005.09.04
Консольная программа по передаче файлов


6-1116528072
NikNet
2005-05-19 22:41
2005.09.04
У кого есть пример FTP клиент/сервер на WinSock?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский