Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.08.2014, 11:45   #11
StriderX
Форумчанин
 
Регистрация: 21.04.2014
Сообщений: 115
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну это счастливчикам ХЕ-шек такое можно.
Механизм весьма unstable, если без шуток - может и захват проглючить, может и счетчик-ссылок не отработать, выдаст утечку. Однако на типовых сценариях работает отлично.
На практике часто используем такую конструкцию для отложенных вызовов, но передачу параметров делаем в явном виде без захвата: в виде массива вариант.
Код:
    ...
    MouseClick.Register(Rect(..), [param1, param2, param3],
                               procedure(params: array of Variant)
                               begin
                               end
                              ); 
    ...
Эта конструкция уже интереснее и в общем виде не требует поддержки анонимок, просто в таком виде проще отслеживать параметры =-)
StriderX вне форума Ответить с цитированием
Старый 15.08.2014, 11:48   #12
5cek
Форумчанин
 
Регистрация: 04.07.2013
Сообщений: 118
По умолчанию

Вообщем я сделал объектом, всё работает, теперь объявление выглядит так:
Код:
type
  TMyProcedure = object
  MyProcedure: procedure (Param: Pointer = nil) of object;
  Param: Pointer;
end;
А сам вызов так:
Код:
procedure ForToGrid(ViewData: TcxGridViewData; Querys: TUniQuery; proced: TMyProcedure); stdcall;
Var
  i: Integer;
begin
  for i := 0 to ViewData.RowCount - 1 do
  begin
    if ViewData.Rows[i].Values[0] <> null then
      if ViewData.Rows[i].Values[0] then
      begin
        Querys.RecNo := i + 1;
        proced.MyProcedure(proced.Param);
      end;
  end;
end;
5cek вне форума Ответить с цитированием
Старый 15.08.2014, 11:51   #13
5cek
Форумчанин
 
Регистрация: 04.07.2013
Сообщений: 118
По умолчанию

Цитата:
Сообщение от StriderX Посмотреть сообщение
Механизм весьма unstable, если без шуток - может и захват проглючить, может и счетчик-ссылок не отработать, выдаст утечку. Однако на типовых сценариях работает отлично.
На практике часто используем такую конструкцию для отложенных вызовов, но передачу параметров делаем в явном виде без захвата: в виде массива вариант.
Код:
    ...
    MouseClick.Register(Rect(..), [param1, param2, param3],
                               procedure(params: array of Variant)
                               begin
                               end
                              ); 
    ...
Эта конструкция уже интереснее и в общем виде не требует поддержки анонимок, просто в таком виде проще отслеживать параметры =-)
Я хоть и пользуюсь XE но раз он "unstable" то не сильно хочется пробовать встраивание в рабочий проэкт) хотя и в некоторых случаях будут удобны такие вызовы
5cek вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
процедура с параметром вызывает функцию subluna Microsoft Office Excel 27 11.01.2012 02:37
Процедура с параметром MD1 Паскаль, Turbo Pascal, PascalABC.NET 1 29.11.2011 18:25
Процедура с параметром и без параметра admin22 Паскаль, Turbo Pascal, PascalABC.NET 2 27.09.2011 15:44
Процедура с изменяемым параметром Utkin Общие вопросы Delphi 11 30.11.2010 14:41
Процедура с параметром динамическим массивом. VintProg Общие вопросы Delphi 12 11.06.2010 13:12