Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.31;
Скачать: CL | DM;

Вниз

MouseDown Up Move   Найти похожие ветки 

 
race1   (2005-07-10 16:57) [0]

Есть класс, наследуемый от TCustomControl, экземпляры создаются в ран-тайме, т.е. это не компонент, который устанавливается. Я хочу обработывать нажатие\отпускание мышки и её передвижение. Пишу так:

TSizer = class (TCustomControl)
private
  procedure Paint; override;
  procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
...
procedure TSizer.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
...
end;

И хотя эта процедура компилится (синенькие кружочки слева), но не вызывается. Ставил точку останова, ничего не произошло. Хотя Paint вызывается нормально...

Из-за чего такое?


 
Просто Джо ©   (2005-07-10 17:36) [1]


> Ставил точку останова, ничего не произошло

И где ты ее ставил? То есть, что вместо "..."?


 
race1   (2005-07-10 17:52) [2]

ставил прям на begin. ну и потом по реакции. т.е. контрол должен перемещаться мышкой. а такого не происходит


 
Просто Джо ©   (2005-07-10 18:42) [3]

Если скомпилировать именно тот пример кода, что ты привел (не забываешь, кстати, в обработчике inherited вызывать?) то все работает. А, и еще, перенеси объявление методов в секцию protected. И посмотри, не изменяешь ли ControlStyle?


 
race1   (2005-07-11 14:58) [4]

я знаю, что должно работать :). Пробывал переность в protected, делал inherited, как перед моим кодом, так и после (хотя inherited вроде как просто обработчик OnMouseDown вызывает, но у меня же не компонент на форме). ControlStyle тоже не меняю...


 
sniknik ©   (2005-07-11 15:15) [5]

Paint ты перекрыл (была до тебя), и гдето в событии компонента прототип (вернее твоя т.к. override) процедуры вызывается (вызов описан в родителе). а вот MouseDown похоже исключительно твое изобретение (ты первый описал) и нигде не вызывается.
вот и получилось одно работает другое нет.


 
sniknik ©   (2005-07-11 15:44) [6]

хотя нет. ты прав. должно работать... и работает, проверил оба метода вызываются, значит оба есть(описаны) гдето в предке.


 
Y   (2005-07-11 16:26) [7]

Поставь breakpoints на

TControl.DoMouseDown,
TControl.WMLButtonDown etc.
(+Use Debug DCUs, соответственно)

и посмотри через F7, что там на самом деле происходит.
Mожет, у тебя флаг csNoStdEvents поставлен
или обработчик WMLButtonDown перекрыт без вызова inherited.

PS В простом тесте всё работает.


 
race1   (2005-07-11 18:03) [8]

спасибо всем за участие. действительно, ошибка не в классе. я в программе сделал обработчки OnMessage, там не пропускал никакие сообщения кроме WM_PAINT... т.е. сообщения что мышка двигается над моим контролом приходило, но я его блокировал и оно не доходило до контрола. и всего-то :)



Страницы: 1 вся ветка

Текущий архив: 2005.07.31;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.039 c
14-1121065517
by
2005-07-11 11:05
2005.07.31
Жилье в Киеве. Нужна помощь.


1-1121098808
Mameluke
2005-07-11 20:20
2005.07.31
Определение папки, откуда запущено приложение


14-1120565584
Vlad Oshin
2005-07-05 16:13
2005.07.31
вторничная задачка. Угадыватель.


4-1117618328
-=S.S=-
2005-06-01 13:32
2005.07.31
Работа с giveio.sys


1-1120919808
Igor_thief
2005-07-09 18:36
2005.07.31
Как изменить ширину полосы прокрутки в ListBox?