Как работают события в Delphi? - PullRequest
6 голосов
/ 02 августа 2010

Я пытаюсь получить консольный вывод из программы, использующей эту библиотеку uZpRunConsoleApp .Это хорошо документировано, но я не использовал Delphi очень долго, и я не понимаю, как работают события.

Из того, что я могу сказать, мне нужно вызывать ExecuteConsoleApp с моим приложением, которое у меня работает без вывода,Похоже, что этот метод хочет, чтобы я указал функцию, которую он может запускать, когда происходит событие, но я не понимаю, как это сделать.

Я надеюсь, что кто-то может распространить здесь немного света.

Я не публиковал никакого кода, так как на самом деле это не проблема, специфичная для кода, но если кто-то захочет получить то, что у меня есть, я отредактирую его.

1 Ответ

12 голосов
/ 02 августа 2010

Да, обработчик событий - это в основном ссылка на функцию. Если вы когда-либо использовали обратные вызовы, это в основном та же идея. Если нет, вот краткий обзор:

Тип события определяется следующим образом:

TZpOnNewTextEvent = procedure(const Sender: TObject;
  const aText: string) of object;

Это означает, что это ссылка на метод объекта (of object) с сигнатурой, которая выглядит следующим образом:

type
  TMyObject = class (TMyObjectAncestor)
    //stuff here
    procedure MyEventHandler(const Sender: TObject; const aText: string);
    //more stuff here
  end;

Бит of object важен. В частности, это ссылка на метод, а не ссылка на отдельную функцию.

Для чего нужен обработчик событий, это позволить вам настроить способ работы ExecuteConsoleApp. Это почти как добавление кода к кнопке в конструкторе форм. Вы помещаете кнопку в форму, а затем назначаете обработчик события для события OnClick, которое настраивает кнопку, добавляя код, который выполняется при нажатии кнопки. Разница в том, что здесь у вас нет дизайнера форм, чтобы связать его вместе для вас.

К счастью, синтаксис довольно прост. Для procedure (whatever) of object вы передаете обработчик событий, просто давая имя. Киньте Self.MyEventHandler в соответствующее место в списке параметров, и оно будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...