Главная страница
    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
10-1118593428
kblc
2005-06-12 20:23
2006.05.21
Построение приложения


15-1145528145
Mirror
2006-04-20 14:15
2006.05.21
А какое у вас разрешение экрана?


3-1143020016
Курдль
2006-03-22 12:33
2006.05.21
Извлечь взаимосвязи таблиц из БД


2-1146164152
Alien1769
2006-04-27 22:55
2006.05.21
Работа с базой данных в сети


2-1146558709
Max4
2006-05-02 12:31
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский