Главная страница
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.024 c
14-1119850991
Ega23
2005-06-27 09:43
2005.07.31
Ой, народ, что вчера было!!!


14-1120553020
DelphiN!
2005-07-05 12:43
2005.07.31
Web FTP Client


1-1121085218
paul_k
2005-07-11 16:33
2005.07.31
Как всегда наступил на грабли под названием AV В чем тут ошибка?


14-1120816424
DiamondShark
2005-07-08 13:53
2005.07.31
Тяжёлое детство, деревянные игрушки


1-1121225231
AZ
2005-07-13 07:27
2005.07.31
TThread. Можно ли внутри процедуры Execute делать Suspend?