Конференция "Основная" » Передача текста функции как параметра функции. Проблема... [D7]
 
  • ForumReader © (12.08.11 14:33) [0]
    Приветствую.
    Использую Дельфи 2007, в одном из проектов приведен код, который у меня упорно не компилируется, хотя на форуме том об этих вещах говорят как о само собой разумеющемся :\

    Это у меня Дельфи старая или хитрость есть какая либо?

    procedure actDomExecute;
     var
       q: ICefDomNode;
     begin
       crm.Browser.MainFrame.VisitDomProc(
         procedure (const doc: ICefDomDocument)
         var
           q: ICefDomNode;
         begin
           q := doc.GetElementById('q');
           if Assigned(q) then q.SetElementAttribute('value', 'Hello, world');
         end
       );
     end;



    Процедура объявлена как
    procedure VisitDomProc(const proc: TCefFastDomVisitorProc);



    А TCefFastDomVisitorProc вот так:
    TCefFastDomVisitorProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const document: ICefDomDocument);

  • ForumReader © (12.08.11 14:35) [1]
    Да, еще - компилятор выдает:

    Expression expected but 'PROCEDURE' found (E2029)
  • oldman © (12.08.11 14:47) [2]
  • Cobalt © (12.08.11 15:06) [3]
    а в другом проекте в 2007-ом подобный код компилируется?
  • MBo © (12.08.11 15:49) [4]
    >Это у меня Дельфи старая
    да
    анонимные функции введены в Д2009
  • ForumReader_ (12.08.11 18:52) [5]

    > >Это у меня Дельфи старая
    > да
    > анонимные функции введены в Д2009

    Большое спасибо за разъяснение. Грустно. Вот как эту жесть портировать в Дельфи 2007? :)
  • Cobalt © (12.08.11 19:01) [6]
    Можно, только придется попотеть.
    основная фишка таких функций (если я не ошибаюсь) - в сохранении контекста вызвавшей функции (т.е. можно обращаться к её локальным переменным)
    Замените их на иные другие способы обмена данными.
  • Anatoly Podgoretsky © (12.08.11 19:18) [7]
    > ForumReader  (12.08.2011 14:33:00)  [0]

    Что так и говорит "Я не компилируюсь, это само собой разумеющее"
  • _Юрий (13.08.11 12:03) [8]
    В данном случае локальный контекст не используется, и можно просто заменить на обычную именованную процедуру

    procedure DoWork (const doc: ICefDomDocument);
    var
      q: ICefDomNode;
    begin
      q := doc.GetElementById('q');
      if Assigned(q) then q.SetElementAttribute('value', 'Hello, world');
    end;

    procedure actDomExecute;
    var
      q: ICefDomNode;
    begin
       crm.Browser.MainFrame.VisitDomProc(DoWork);

 
Конференция "Основная" » Передача текста функции как параметра функции. Проблема... [D7]
Есть новые Нет новых   [118461   +16][b:0][p:0.001]