Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.054 c
15-1215067842
Slider007
2008-07-03 10:50
2008.08.24
С днем рождения ! 3 июля 2008 четверг


2-1216649811
Pasha L
2008-07-21 18:16
2008.08.24
Как _добавить_ действия на событие?


2-1216369728
Сергей
2008-07-18 12:28
2008.08.24
Как в DBGrid отменить выделение ячеек?


15-1215259867
critical_error
2008-07-05 16:11
2008.08.24
windows: critical error


15-1215086532
Sick
2008-07-03 16:02
2008.08.24
Вопрос по стэку





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский