Главная страница
    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.013 c
4-1141045353
Chaser
2006-02-27 16:02
2006.05.21
Сделать аналогично Пуск -> Выполнить


2-1145970590
nyron
2006-04-25 17:09
2006.05.21
сумма прописью


10-1119427098
Mozart_mcs
2005-06-22 11:58
2006.05.21
Не могу найти закладку, работаю в Word2003...


15-1145828371
Mihurr
2006-04-24 01:39
2006.05.21
Хард инфа Продолжение)))


2-1146545462
Близнец
2006-05-02 08:51
2006.05.21
Объединение таблиц из разных БД





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