Форум: "Начинающим";
Текущий архив: 2008.08.24;
Скачать: [xml.tar.bz2];
ВнизКак _добавить_ действия на событие? Найти похожие ветки
← →
Pasha L (2008-07-21 18:16) [0]Здравствуйте. У меня есть собственный класс, выполняющий базовые функции рисования (типа пэинта). Я создаю его и должен указать TGraphicControl, который будет являться по сути листом для рисования. Мне нужно повесить на OnMouseDown указанного контрола некоторые действия (начало рисования линии, к примеру). Как это сделать, не затронув при этом тот код, который уже висит на OnMouseDown контрола? (если я укажу MyControl.OnMouseDown=BeginPaintLine, то действия, которые раньше выполнялись на OnMouseDown, теперь выполняться перестанут).
← →
AlexanderMS_ (2008-07-21 18:20) [1]А разве нельзя назначить в
OnMouseDown
типа такой процедуры:procedure MouseDown(Sender: TObject);
begin
OldProc(Sender); // старая процедура-обработчкик
BeginPaintLine(Sender);
end;
← →
Рамиль © (2008-07-21 18:24) [2]А от TGraphicControl наследоваться нельзя? Если наследуешь, достаточно перекрыть виртуальный метод MouseDown.
Если не хочешь (не можешь) наследоваться от него, то "спрячь" его в своем классе в качестве св-ва, и сделай OnMouseDown в своем классе.
← →
Pasha L (2008-07-21 19:44) [3]Рамиль © (21.07.08 18:24) [2]
извините, я вас не понял.
Можно обрабатывать сообщения (движения мыши, например) с помощью методов с пометкой message (например, WM_MOUSEMOVE). Я могу повесить обработчик сообщения на определенный класс по ходу создания кода. А как повесить новый, дополнительный обрботчик на объект (к примеру, класса TControl), который указывается как аргумент в методе (моего класса), называющемся, к примеру, procedure AddMyActionOnMouseMovingTo(control:TControl). Можно ли сделать что-то вроде этого?
в общем, бывает ли что-то типа такого?:AddNewHandlerOnMessageTo(
Control:TControl;
MessageIDToHandle:integer;
ActionToExecuteOnMessage:Pointer
);
← →
AlexanderMS_ (2008-07-21 20:47) [4]
> Pasha L (21.07.08 19:44) [3]
Не знаю, правильно ли я понял ситуацию, но почему бы не так сделать:var
OldProc : TNotifyEvent;
//////
OldProc := Control.OnMouseDone; // сохраняем старую процедуру
Control.OnMouseDone := NewProc; // присваваем новый обработчик события
///////
procedure NewProc(Sender : TObject);
begin
OldProc(Sender); // вызываем тот обработчик, который был ранее
// тут любые действия при OnMouseDown
end;
← →
AlexanderMS_ (2008-07-21 20:49) [5]Не
OnMouseDone
, аOnMouseDown
, прошу прощения :)
← →
Рамиль © (2008-07-22 09:01) [6]
> Pasha L (21.07.08 19:44) [3]
Нет, в Delphi нельзя, в C# можно.
Все же я думаю, что в данном случае лучше наследоваться от TGraphicControl, тогда такие проблемы отпадут.
А если так
> А как повесить новый, дополнительный обрботчик на объект
> (к примеру, класса TControl), который указывается как аргумент
> в методе (моего класса)
т. е. даже не с-во класса, а аргумент метода, то я не знаю способа корректно навесить обработчик. Ибо если воспользоваться > AlexanderMS_ (21.07.08 20:47) [4] , то будет работать. НО (!) только в том случае, если обработчик будет установлен до передачи ссылки на объект в метод класса.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.08.24;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.043 c