Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
15-1363862651
Иксик
2013-03-21 14:44
2013.09.08
Как бакинец Альтшуллер и РАН сделали Самсунг инноватором


15-1364877349
Piligrim
2013-04-02 08:35
2013.09.08
Delphi-приложения на многоядерных системах


2-1356518427
Vale
2012-12-26 14:40
2013.09.08
Сообщение при попытке открыть файл


15-1364654871
TUser
2013-03-30 18:47
2013.09.08
Умер Леонид Мацих


15-1364934603
Юрий
2013-04-03 00:30
2013.09.08
С днем рождения ! 3 апреля 2013 среда





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский