Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как правильно передавать процедуру в качестве параметра? / 7 сообщений из 7, страница 1 из 1
29.03.2019, 13:40
    #39793554
amadeus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно передавать процедуру в качестве параметра?
Как правильно передавать процедуру в качестве параметра, чтобы затем ее можно было указать прямо при вызове другой процедуры? Что-то типа:

Код: pascal
1.
2.
3.
4.
5.
proc(
  procedure() begin
    showMessage('!');
  end
);



Делаю так:

Код: pascal
1.
2.
TProc = procedure;
procedure proc(paramProc: TProc);



Ошибка: Incompatible types: 'TProc' and 'Procedure'.

Если ставлю "TProc = procedure;", то ошибка такая: "Incompatible types: 'method pointer and regular procedure'". Однако, такой код работает:

Код: pascal
1.
2.
3.
4.
5.
TThread.queue(nil,
  procedure() begin
    showMessage('!');
  end
);



А процедура там объявлена так же:

Код: pascal
1.
TThreadMethod = procedure of object;
...
Рейтинг: 0 / 0
29.03.2019, 13:42
    #39793556
amadeus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно передавать процедуру в качестве параметра?
Опечатка:

авторЕсли ставлю "TProc = procedure;"

procedure of object;
...
Рейтинг: 0 / 0
29.03.2019, 15:02
    #39793648
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно передавать процедуру в качестве параметра?
amadeus
Код: pascal
1.
2.
3.
4.
5.
proc(
  procedure() begin
    showMessage('!');
  end
);



это называется анонимная процедура, соответсвенно типа - reference to procedure
...
Рейтинг: 0 / 0
29.03.2019, 15:02
    #39793649
amadeus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно передавать процедуру в качестве параметра?
Разобрался.

Код: pascal
1.
TProc = reference to procedure;



Так работает.
...
Рейтинг: 0 / 0
29.03.2019, 15:02
    #39793650
amadeus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно передавать процедуру в качестве параметра?
Arioch , спасибо.
...
Рейтинг: 0 / 0
29.03.2019, 15:03
    #39793652
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно передавать процедуру в качестве параметра?
amadeusА процедура там объявлена так же:

ЕМНИП есть четыре разных "TThread.queue" - и у всех разные наборы параметров
...
Рейтинг: 0 / 0
29.03.2019, 15:05
    #39793654
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно передавать процедуру в качестве параметра?
amadeusА процедура там объявлена так же:
Код: pascal
1.
TThreadMethod = procedure of object;

Обманывать не хорошо
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
  TThreadMethod = procedure of object;
  TThreadProcedure = reference to procedure;

  TThread = class
    .........
    class procedure Queue(AThread: TThread; AMethod: TThreadMethod); overload; static;
    class procedure Queue(AThread: TThread; AThreadProc: TThreadProcedure); overload; static;
   ...........
  end;
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как правильно передавать процедуру в качестве параметра? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]