Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];

Вниз

Два и более обработчика события   Найти похожие ветки 

 
DeadMoroz   (2006-04-11 13:04) [0]

Привет! кто знает как написать несколько обработчиков для события, чтобы они выполнялись последовательно? В DW6 нашел такой пример для решения подобной задачи:

procedure TForm1.FormKeyDownFIRST(Sender: TObject;
var Key: Word; Shift: TShiftState);

procedure TForm1.FormKeyDownFirstSECOND(Sender: TObject;
var Key: Word; Shift: TShiftState);

// А потом, где нужно, подставляешь соответствующий адрес
@Form1.FormKeyDown=@Form1.FormKeyDownFIRST


Но оно нихрена не работает - Говорит Not enough actual parameters.
Объясните плиз поподробнее, как это должно работать!


 
Desdechado ©   (2006-04-11 13:13) [1]

идея такова - пишется обработчик-обертка, в котором в нужной последовательности вызываются дополнительные обработчики
естественно, с передачей им параметров обертки


 
DeadMoroz   (2006-04-11 13:23) [2]

а если обработчик уже есть, например на событии BeforeDelete, и я хочу в рантайме добавить еще один, который будет выполняться после того, что уже есть - как мне поступить?


 
Плохиш ©   (2006-04-11 13:25) [3]


> DeadMoroz   (11.04.06 13:23) [2]
> а если обработчик уже есть, например на событии BeforeDelete,
>  и я хочу в рантайме добавить еще один, который будет выполняться
> после того, что уже есть - как мне поступить?

Сохранить старый обработчик, присвоить свой обработчик. В своём обработчике вставить вызов старого обработчика.


 
Amoeba ©   (2006-04-11 13:28) [4]


> DeadMoroz   (11.04.06 13:23) [2]
> а если обработчик уже есть, например на событии BeforeDelete,
>  и я хочу в рантайме добавить еще один, который будет выполняться
> после того, что уже есть - как мне поступить?

Обработчик может быть только один. Сделать как так, как написано в твоем последнем посте невозможно.


 
Сергей М. ©   (2006-04-11 13:45) [5]


> Говорит Not enough actual parameters


А ты их передаешь, параметры-то эти самые ?

@Form1.FormKeyDown=@Form1.FormKeyDownFIRST(где они, параметры-то ? Их аж 3 штуки требуется здесь указать, а ты ни одного не указал)


 
Плохиш ©   (2006-04-11 13:52) [6]


> // А потом, где нужно, подставляешь соответствующий адрес
> @Form1.FormKeyDown=@Form1.FormKeyDownFIRST


procedure TForm1.Какаятофигня;
begin
 OnKeyDown=FormKeyDownFIRST;
end;

PS. За использование Form1 вырываю руки без разговоров ;-)


 
DeadMoroz   (2006-04-11 14:46) [7]


> Обработчик может быть только один

А как определить, есть ли обработчик для этого события?


 
MBo ©   (2006-04-11 14:54) [8]

Assigned


 
Бурундук ©   (2006-04-11 16:03) [9]

можно сделать объект-ретранслятор:

type
 TKeyEventRetranslator = class
 private
   FHandlers: array of TKeyEvent;
 public
   procedure Add(Handler: TKeyEvent);
   procedure EventHandler(Sender: TObject; var Key: Word; Shift: TShiftState);
 end;
     
{ TKeyEventRetranslator }

procedure TKeyEventRetranslator.Add(Handler: TKeyEvent);
begin
 //Тут, конечно, надо проверку на дубликат
 SetLength(FHandlers, Length(FHandlers)+1);
 FHandlers[Length(FHandlers)-1] := Handler;
end;

procedure TKeyEventRetranslator.EventHandler(Sender: TObject; var Key: Word; Shift: TShiftState);
var i: Integer;
begin
 for i := 0 to Length(FHandlers)-1 do
   FHandlers[i](Sender, Key, Shift);
end;

   //...
   Form1.OnKeyDown := Retranslator.EventHandler;
   Retranslator.Add(FormKeyDownFIRST);
   Retranslator.Add(FormKeyDownSECOND);



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.011 c
2-1146809848
Mahab
2006-05-05 10:17
2006.05.21
DVD-RW


1-1144913139
pvm
2006-04-13 11:25
2006.05.21
Экспорт из DLL


4-1141045353
Chaser
2006-02-27 16:02
2006.05.21
Сделать аналогично Пуск -> Выполнить


15-1145868928
031178
2006-04-24 12:55
2006.05.21
Как защитить свою программу


15-1145625398
recordPlay
2006-04-21 17:16
2006.05.21
С помошью какой программы можно записать RealOne Player файл?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский