Как я могу изменить поведение обработчика событий в зависимости от того, какой TAction его инициировал? - PullRequest
4 голосов
/ 15 сентября 2011

У меня есть несколько пунктов меню, в которых это действие следующее:

procedure TMISMainFrm.ActiSalesInvoiceExecute(Sender: TObject);
begin
  if CheckMdiList('Sales Invoice') then
    BEGIN
      SalesInvFrm := tSalesInvFrm.Create(Self,0,UserIdNo,1,1);
      SalesInvFrm.Show;
    END;
end;

Вышеуказанное действие можно вызвать из нескольких мест, но 2-й параметр (0) может измениться.Как передать обязательный параметр, чтобы мне не приходилось перекодировать подпрограмму?

1 Ответ

7 голосов
/ 15 сентября 2011

Один из наиболее распространенных простых подходов - установить свойство действия Tag. Это должно быть по-разному для каждого действия, очевидно. Затем вы изменяете ваш обработчик выполнения следующим образом:

procedure TMISMainFrm.ActiSalesInvoiceExecute(Sender: TObject);
begin
  if CheckMdiList('Sales Invoice') then
    BEGIN
      SalesInvFrm := tSalesInvFrm.Create(Self,(Sender as TAction).Tag,UserIdNo,1,1);
      SalesInvFrm.Show;
    END;
end;
...