Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.09.08;
Скачать: CL | DM;

Вниз

Передача текста функции как параметра функции. Проблема...   Найти похожие ветки 

 
ForumReader ©   (2011-08-12 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 ©   (2011-08-12 14:35) [1]

Да, еще - компилятор выдает:

Expression expected but "PROCEDURE" found (E2029)


 
oldman ©   (2011-08-12 14:47) [2]

http://www.codenet.ru/progr/delphi/errors.php


 
Cobalt ©   (2011-08-12 15:06) [3]

а в другом проекте в 2007-ом подобный код компилируется?


 
MBo ©   (2011-08-12 15:49) [4]

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


 
ForumReader_   (2011-08-12 18:52) [5]


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

Большое спасибо за разъяснение. Грустно. Вот как эту жесть портировать в Дельфи 2007? :)


 
Cobalt ©   (2011-08-12 19:01) [6]

Можно, только придется попотеть.
основная фишка таких функций (если я не ошибаюсь) - в сохранении контекста вызвавшей функции (т.е. можно обращаться к её локальным переменным)
Замените их на иные другие способы обмена данными.


 
Anatoly Podgoretsky ©   (2011-08-12 19:18) [7]

> ForumReader  (12.08.2011 14:33:00)  [0]

Что так и говорит "Я не компилируюсь, это само собой разумеющее"


 
_Юрий   (2011-08-13 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);



Страницы: 1 вся ветка

Текущий архив: 2013.09.08;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.006 c
15-1364675403
Юрий
2013-03-31 00:30
2013.09.08
С днем рождения ! 31 марта 2013 воскресенье


1-1313145196
ForumReader
2011-08-12 14:33
2013.09.08
Передача текста функции как параметра функции. Проблема...


15-1364804038
Inovet
2013-04-01 12:13
2013.09.08
Прога для ришения ЕГЭ


15-1364326850
TStas
2013-03-26 23:40
2013.09.08
Керку про кладовку


1-1313140127
IGray
2011-08-12 13:08
2013.09.08
Программно запустить Delphi и дождаться полной загрузки