Форум: "Основная";
Текущий архив: 2013.09.08;
Скачать: [xml.tar.bz2];
ВнизПередача текста функции как параметра функции. Проблема... Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.002 c