Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 915

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Привет всем.
Делаю диплом, возникла проблемка, решил что на форуме легче будет спросить...

Необходимо вытыщить значение переменной из Ява скрипта формируемого в Делфи. Формируется страница HTML, используются классы и методы гугл.мапс. НО суть не в этом. Переменные объявляются в скрипте, нужно вытащить их на форму.


// Вот наши переменные
+'var xt,yt = 0;'#13

// здесь мы в них положим нужную инфу
+'map.getCenter(xt,yt,true);'#13
// а вопрос - как достать на форму?

вот в этой части текста к примеру надо вытащить xt,yt.
надо чтобы эти значения при генерации страницы передавались любой другой внутренней переменной самой программы, т.е. чтобы вытащить потом ее на форме

можно сделать проще (неизвестно насколько проще) - чтобы значение переменных просто выводились текстом в самом html, чтобы позже можно было их просто прочесть из файла. НО как это сделать?

Приложение:
  1. unit Unit1;
  2. interface
  3. uses
  4. ...
  5.  
  6. type
  7. TForm1 = class(TForm)
  8. ///
  9. procedure HTMLGenerat;
  10. ///
  11.  
  12. private
  13. CodeHTML: string;
  14. GeneratedHTML,zoom_index,matrice_im age : TStringList;
  15. map:Tbitmap;
  16. nb,statu_nb:integer;
  17. nbimage_Long,nbimage_Lati:real;
  18. statu_b:boolean;
  19. end;
  20.  
  21. var
  22. Form1: TForm1;
  23. MyMouse: TMouse;
  24. metka: boolean;
  25. HTML_Text:string;
  26.  
  27. implementation
  28.  
  29. const
  30. TEMP_FILE_NAME = 'BAGMaps.html';
  31. {$R *.dfm}
  32. procedure Tform1.HTMLGenerat;
  33. begin
  34.  
  35. CodeHTML := '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"'
  36. +'"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'#13
  37. +'<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">'#13
  38. +'<head>'#13
  39. +'<meta http-equiv="content-type" content="text/html; charset=utf-8"/>'#13
  40. +'<title>Google Maps JavaScript API Example: Simple Map</title>'#13
  41. +'<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key='+ Key.Text+'"'#13
  42. +'type="text/javascript"></script>'#13
  43. +'<script type="text/javascript">'#13
  44. +'function initialize() {'#13
  45. +'if (GBrowserIsCompatible()) {'#13
  46. +'var map = new GMap2(document.getElementById("map_ canvas"));'#13
  47. +'map.setCenter(new GLatLng('+Latitude.Text +','+ Longitude.Text +'),'+inttostr(Zoom.ItemIndex) + ','+'G_'+MapType.Text +'_MAP'+');'#13
  48.  
  49.  
  50. +'var xt,yt = 0;'#13
  51.  
  52.  
  53. +'map.getCenter(xt,yt,true);'#13
  54.  
  55.  
  56. +' }'#13
  57. +' }'#13
  58. +'</script>'#13
  59. +'</head>'#13
  60. +'<body onload="initialize()" onunload="GUnload()">'#13
  61. +'<div id="map_canvas" style="width: 800px; height: 600px"></div>'#13
  62. +'</body>'#13
  63. +'</html>'#13;
  64.  
  65. CodeHTML := CodeHTML + HTML_Text;
  66.  
  67. end;
  68.  
  69. procedure Delay(ms: longint);
  70. var
  71. TheTime: LongInt;
  72. begin
  73. TheTime := GetTickCount + ms;
  74. while GetTickCount < TheTime do
  75. Application.ProcessMessages;
  76. end;
  77.  
  78. procedure TForm1.Button1Click(Sender: TObject);
  79. var
  80. xt,yt: integer;
  81. begin
  82. HTMLGenerat;
  83. GeneratedHTML.Text :=CodeHTML ;
  84. GeneratedHTML.SaveToFile(TEMP_FILE_ NAME);
  85. webBrowser1.Navigate(TEMP_FILE_NAME );
  86. xt:= WebBrowser1.GetProperty('xt');
  87. showmessage (inttostr(xt));
  88.  
  89. // webBrowser1.Navigate('D:11Telechar gement13-01-2008Convert Latitude - Longitude in Degrees-Minutes-Seconds to-from Decimal (FCC) USA.mht');
  90.  
  91. end;
  92.  
  93. procedure TForm1.FormCreate(Sender: TObject);
  94. begin
  95. GeneratedHTML := TStringList.Create;
  96. zoom_index := TStringList.Create;
  97. matrice_image := TStringList.Create;
  98. statu_b:=false;
  99. nbimage_Lati:=90;
  100. statu_nb:=0;
  101.  
  102. end;
  103.  
  104. .....
  105.  
  106. end.


Екушенко Иван Александрович Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Екушенко Иван Александрович (статус: Посетитель)
Вопрос отправлен: 22 марта 2010, 10:34
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Екушенко Иван Александрович!
подступиться до локальных переменных скрипта - сложно. потому что они существуют только какой то маленький промежуток времени.
Вариант решения
добавляем в выводимую страницу ещё скрытое поле ввода (кто нам мешает?). и жаваскрипт функция устанавливает значение этого поля или как то модифицирует страницу. А основной код читает значение этого поля, тут методики уже наработаны.
Для первой части нам поможет ссылка
http://parsing-and-i.blogspot.com/2009/02/javascript-twebbrowser-delphi.html
Эта ссылка подскажет как вызывать жаваскрипт код на странице.
Для второй части (различный парсинг)
http://parsing-and-i.blogspot.com/2009/09/twebbrowser.html

Подсумируем. Создаете свою функцию. Вызываете, она модифицирует часть страницы. Потом вычитываете изменения и анализируете.


Изысканный вариант. Ставим на форму компонент компонент IdHttp, делаем свой маленький сервер. А с странички делаем ajax запросы и передаем параметры. понятно, что обращаться надо на адрес 127.0.0.1 и этот способ будет иметь кучу проблем. Но когда все реализуется, можно будет передавать запросы основному коду и получать ответы:)

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 22 марта 2010, 17:56
Оценка за ответ: 4


Мини-форум вопроса

Всего сообщений: 17; последнее сообщение — 25 апреля 2010, 14:20; участников в обсуждении: 4.
min@y™

min@y™ (статус: Доктор наук), 22 марта 2010, 10:59 [#1]:

Короче, тебе нужно просто заменить xt и yt на числовые значения, что ли? И сформировать HTML-код?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
IlluminatI

IlluminatI (статус: 2-ой класс), 22 марта 2010, 14:50 [#2]:

я так понял, нужно чтобы значения переменных ява скрипта были доступны для использования в самой Delphi?
Екушенко Иван Александрович

Екушенко Иван Александрович (статус: Посетитель), 22 марта 2010, 17:36 [#3]:

Страница генерируется средствами самого делфи, в переменные xt yt будет записана определенная числовая информация в последствии работы самого года HTML, что будет далее сохранено в файл. Но в этом файле мне нужно видеть не только идентификаторы, но и их значения, чтобы потом по поиску в этом файле найти именно их числовые значения. Может как по другому, но я так это себе пока что представляю
min@y™

min@y™ (статус: Доктор наук), 22 марта 2010, 19:40 [#4]:

Цитата (Екушенко Иван Александрович):


Страница генерируется средствами самого делфи, в переменные xt yt будет записана определенная числовая информация в последствии работы самого года HTML, что будет далее сохранено в файл. Но в этом файле мне нужно видеть не только идентификаторы, но и их значения, чтобы потом по поиску в этом файле найти именно их числовые значения. Может как по другому, но я так это себе пока что представляю

Ну, таки шож ты хочешь-то?
Сформулируй вопрос по-другому.
"У меня есть X, из него надо сделать Y так, чтобы получилось вот так вот: ... (далее - задача)".
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Екушенко Иван Александрович

Екушенко Иван Александрович (статус: Посетитель), 22 марта 2010, 21:39 [#5]:

надо чтобы в файле вместо X, было написано его значение. Прямо в коде страницы, чтобы его потом вырезать... или что то типа Х = 25254, чтобы я потом нашел в тексте этой страницы Х и его значение 25254.
min@y™

min@y™ (статус: Доктор наук), 22 марта 2010, 22:06 [#6]:

Ничо не понял. Тебе нужно вырезать или вставить? Я имею в виду, конечно, текст.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Екушенко Иван Александрович

Екушенко Иван Александрович (статус: Посетитель), 22 марта 2010, 22:48 [#7]:

), мне нужно чтобы:

1. Код делфи генерирует страницу HTML (это хорошо работает)
2. Эта страница с ее кодом в результате работы помещает в наши xt и yt значения.
3. Страница созданная хранится удаленно и с ней можно делать что угодно.
4. Суть: Открываем эту страницу как обычный текст и в нем должно быть прямо где нибудь написано не просто xt и yt (в них с помощью готовых функций заносим данные), а xt=343673... yt=46575643...
5. Копируем эти значение через обычный поиск по тексту
Екушенко Иван Александрович

Екушенко Иван Александрович (статус: Посетитель), 22 марта 2010, 22:51 [#8]:

т.е. надо чтобы в коде страницы html каким то образом были видны значение переменных (именно тех что появятся после генерации, а не те которые заданы нами же)
Екушенко Иван Александрович

Екушенко Иван Александрович (статус: Посетитель), 22 марта 2010, 22:52 [#9]:

посмотрите внимательно код, он рабочий, просто не все делает что хотелось бы...
Екушенко Иван Александрович

Екушенко Иван Александрович (статус: Посетитель), 22 марта 2010, 23:06 [#10]:

вообще это часть проблемы. Основная задача это:
Данная html страница с готовыми методами и функциями гугла предоставляет нам картографический интерфейс - Карты, Масштабирование, Установка точек и маршрутов и так далее. Все бы ничего, но вся эта хрень не удобна потому что все координаты задаются в ручную, а управление картой, а именно установка необходимых точек возможно только так - тупо вводим координаты и нажимаем кнопку ставить - это жуть, так как координаты представлены в виде 31.2356256 к примеру, и их еще никто не знает. Стандартных средств обработки событий мыши в компоненте делфи TВеббраузер нет, нет также методов и функции у самого гугла (точнее есть, но эта инфа дается только коммерческим продуктам). Я же хочу сделать более сложно, но обойти все же это ограничение другими ухищрениями. Отлавливаем клик мыши по компоненте Тбра-р (можно по форме), домножаем на коэффициент К и масштаб карты, получаем определенные координаты точки, дополняем текст html данными об установки точки с полученными нами координатами, и перезагружаем страницу. Также нужно сделать обратный путь, координаты карты - координаты экрана... вот как то так. Хотя то что я хочу может теоретически не верно
Екушенко Иван Александрович

Екушенко Иван Александрович (статус: Посетитель), 22 марта 2010, 23:09 [#11]:

'map.getCenter(xt,yt,true);'#13

вот в этом месте кода функция гетЦентр записывает координаты центра карты относительно компонента (или экрана). И где то эти значения хранятся. То есть известно что они чему то равны, но надо чтобы в самом коде было видно чему именно, либо какой либо другой способ передачи их исполняющей программе...
Екушенко Иван Александрович

Екушенко Иван Александрович (статус: Посетитель), 22 марта 2010, 23:14 [#12]:

Спасибо Вадим, попробую, но не прямо сейчас, так как у нас сейчас 4 часа утра (
min@y™

min@y™ (статус: Доктор наук), 22 марта 2010, 23:22 [#13]:

Ну таки шо, тебе надо замеенить одно на другое с хтмл-файле?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Вадим К

Вадим К (статус: Академик), 23 марта 2010, 00:02 [#14]:

ну там не просто html файл. Он генерируется динамически.

Комментарий к оценке конечно зачетный:) порадовало.
Галочка "подтверждения прочтения" - вселенское зло.
Екушенко Иван Александрович

Екушенко Иван Александрович (статус: Посетитель), 25 апреля 2010, 08:51 [#15]:

Вадим, вы еще здесь. Работал, долго ничего по диплому не делал. вот решил разобраться с инди и в частности с компонентом IdHttp.

procedure TForm1.Button2Click(Sender: TObject);
begin
Str:= idHttp1.Get(''http://www.ххх.хх/хххххх');
memo1.Text := Str ;
end;

вот простой пример загрузки содержимого. А вот как загрузить из локалки? с динамического файла?
Екушенко Иван Александрович

Екушенко Иван Александрович (статус: Посетитель), 25 апреля 2010, 08:54 [#16]:

хотя я думаю там будет тоже самой что и при просмотре через обычный блокнот.

можно по подробнее как и что по поводу "А с странички делаем ajax запросы и передаем параметры. понятно, что обращаться надо на адрес 127.0.0.1 и этот способ будет иметь кучу проблем. Но когда все реализуется, можно будет передавать запросы основному коду и получать ответы:)"
Вадим К

Вадим К (статус: Академик), 25 апреля 2010, 14:20 [#17]:

заргрузить с "локалки" - ну тоже. если это http, то просто нужно адрес знать. к примеру 127.0.0.1
Заргрузить с динамического файла - не знаю даже что это такое.

А вот по поводу ajax запросов - это уже к специалистам по JavaScript, это не мое.
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:25
Выполнено за 0.03 сек.