Форум: "Основная";
Текущий архив: 2005.07.31;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.073 c