Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

MouseDown\Up\Move [D7]


race1 ©   (2005-07-10 16:57:00) 

Есть класс, наследуемый от 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 вызывается нормально...

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


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

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


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

Поставь breakpoints на

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

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

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


sniknik   (2005-07-11 15:44:00) [3]

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


sniknik   (2005-07-11 15:15:00) [4]

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


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

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


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

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


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

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


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


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо