Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.09.2015, 00:07   #1
widla
 
Регистрация: 05.05.2011
Сообщений: 5
По умолчанию Click на ячейку динамически сгенерированной таблицы

Доброго времени суток!
Есть сайт, на котором с помощью ajax-запроса генерируется таблица. Нужная страница открывается компонентой TWebBrowser. Как можно из Delphi выше XE-версии сделать click на ячейку?
Как только уже не пробовал:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var cmd: string;
begin
  cmd := 'document.getElementsByClass("class-td-table").click(); ';
  WebBrowser1.EvaluateJavaScript(cmd);
end;
и так:

Код:
cmd := 'javascript:'
    + '(function(){'
    + 'var l=document.getElementsByClass("class-td-table");'
    + 'for(var i=0;i<l.length;i++)'
    +     'l[i].click();'
    + '})();';
  WebBrowser1.Navigate(cmd);
то что идет на Delphi 7 распознается как ошибка:
WebBrowser1.OleObject.Document.all. tags('td').item(i).click;

Может есть еще какие-то хитрости, подскажите пожалуйста.
widla вне форума Ответить с цитированием
Старый 16.09.2015, 17:42   #2
SQLPowerUser
Форумчанин
 
Аватар для SQLPowerUser
 
Регистрация: 19.01.2015
Сообщений: 158
Восклицание Если я правильно понял задачу

В Delphi XE3 такой вариант работает. Содержимое Web-сайта для теста (здесь только таблица без скриптов)
Код HTML:
<!DOCTYPE HTML>
<html>
<head>
  <title>Test1</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
  <meta http-equiv="Pragma" content="no-cache">
  <meta http-equiv="Expires" content="0">
  <meta http-equiv="X-UA-Compatible" content="IE=10">
  <style>
  .tblClass {border-collapse:collapse;}
  .tblClass th, .tblClass td {border:1px solid #ccc; padding:2px 4px;}
  </style>
</head>
<body>
<table class="tblClass">
  <tr> <th>The Asylum</th> <th>20th Century Fox</th> <th>Просто так</th> </tr>
  <tr> <td>Король затерянного мира</td> <td>Крепкий орешек</td> <td>Оперативно-тактическое решение</td> </tr>
  <tr> <td>Терминаторы</td> <td>Аватар</td> <td>Выполнение поставленных боевых задач</td></tr>
  <tr> <td>Угроза из прошлого</td> <td>Люди икс</td> <td>Защитить исследовательский центр Парения</td> </tr>
  <tr> <td>Андроид-полицейский</td> <td>Хищник</td> <td>Освободить комплекс по добыче воды</td> </tr>
  <tr> <td>Помпеи: апокалипсис</td> <td>Секретные материалы</td> <td>Dark Reign - 2</td> </tr>
</table>
</body>
</html>
Delphi-код (не забываем uses MSHTML), в нём уже добавим динамический JavaScript
Код:
uses MSHTML;

procedure TForm1.FormActivate(Sender: TObject);
begin
  WebBrowser1.Navigate('http://localhost:8091/main.htm');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Doc: IHTMLDocument2;
  HTMLWindow: IHTMLWindow2;
  jStr, aRow, aCol: string;
begin
  WebBrowser1.Document.QueryInterface(IHTMLDocument2, Doc);
  HTMLWindow := Doc.parentWindow;
  if not Assigned(HTMLWindow) then Exit;

  aRow := Edit1.Text;
  aCol := Edit2.Text;

  jStr := 'var tbl = document.getElementsByClassName("tblClass")[0];' + #10 +
  'tbl.onclick = function (event) {' + #10 +
    'event = event || window.event;' + #10 +
    'var target = event.target || event.srcElement;' + #10 +
    'if (target.tagName == "TD") {' + #10 +
    'alert("Был щелчок по ячейке с текстом \n" + target.innerHTML);' + #10 +
    '}' + #10 +
  '};' + #10 +
  'tbl.rows[' + aRow + '].cells[' + aCol + '].click();';

  HTMLWindow.execScript(jStr, 'JavaScript');
end;

Последний раз редактировалось SQLPowerUser; 16.09.2015 в 17:47.
SQLPowerUser вне форума Ответить с цитированием
Старый 16.09.2015, 19:14   #3
widla
 
Регистрация: 05.05.2011
Сообщений: 5
Радость

Цитата:
Сообщение от SQLPowerUser Посмотреть сообщение
В Delphi XE3 такой вариант работает. Содержимое Web-сайта для теста (здесь только таблица без скриптов)
Спасибо! Попробую.
widla вне форума Ответить с цитированием
Старый 19.09.2015, 10:18   #4
widla
 
Регистрация: 05.05.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от SQLPowerUser Посмотреть сообщение
В Delphi XE3 такой вариант работает. Содержимое Web-сайта для теста (здесь только таблица без скриптов)
Выходит ошибка:
widla вне форума Ответить с цитированием
Старый 19.09.2015, 15:00   #5
SQLPowerUser
Форумчанин
 
Аватар для SQLPowerUser
 
Регистрация: 19.01.2015
Сообщений: 158
Вопрос Какая версия Delphi?

На какой строке ошибка? Надо отладчиком пошагово пройти.
Прилагаю работающий в Delphi XE3 проект.
Вложения
Тип файла: zip Test site.zip (5.7 Кб, 19 просмотров)
SQLPowerUser вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поместить Текст в ячейку таблицы evg_m Microsoft Office Word 5 11.01.2013 10:08
Создание сводной таблицы из динамически изменяющегося столбца ship85 Microsoft Office Excel 0 20.01.2011 22:45
Запись из эдита в ячейку таблицы Balabar Помощь студентам 1 25.11.2010 20:20
Получение сгенерированной ссылки stah JavaScript, Ajax 3 18.02.2010 17:31
Вставка текста в ячейку таблицы Gapro JavaScript, Ajax 5 05.02.2010 19:25