Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/88: Рейтинг темы: голосов - 88, средняя оценка - 4.86
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873

Отображение html-страницы в WebBrowser из текстовой переменной

31.12.2011, 16:46. Показов 19147. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как открыть браузером страницу,созданную прямо во время выполнения программы
т.е.
Delphi
1
2
3
4
var s:string;
begin
s:='<html><H1>text</H1></html>';
webbrowser.navigate(s);
что то типо такого
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.12.2011, 16:46
Ответы с готовыми решениями:

WebBrowser. Как получить Html код страницы открытой в "webBrowser" в правильной кодировке?
Пробую получить Html код страницы открытой в &quot;webBrowser&quot;. public string GetHTMLCodPage() { string htmlCodPage; ...

Проскакивает отображение страницы в WebBrowser
Добрый день форумчане! Добавлено через 10 минут Блин какой-то глюк текст уже третий раз набираю Есть форма на ней есть кнопка и...

Форматирование html и отображение в WebBrowser
Есть у меня html-ки, лежащие в определенной структуре. Строка для получения выглядит так: FunctionPathAndName := GetCurrentDir + ...

5
 Аватар для Mawrat
13113 / 5894 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
31.12.2011, 18:37
Лучший ответ Сообщение было отмечено как решение

Решение

Delphi
1
2
3
4
5
6
7
procedure TForm1.Button1Click(Sender: TObject);
begin
  //Создаём документ с пустым содержанием.
  WebBrowser1.Navigate('about:blank');
  //Загружаем в документ нужный HTML код.
  WebBrowser1.OleObject.Document.Write('<html><H1>text</H1></html>');
end;
5
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
03.01.2012, 19:05  [ТС]
Delphi
1
2
3
4
5
6
7
var
s:string;
begin
s:='<html><h1>text1</h2></html>';
 WebBrowser1.Navigate('about:blank');
  WebBrowser1.OleObject.Document.Write(s);
s:='<html><h1>text1</h2><b>text2</b></html>';
как обновить содержание веббраузера? т.е. подгрузить <b>text2</b>?
не делая так
Delphi
1
2
3
4
5
6
7
8
s:='<html><h1>text1</h2></html>';
 WebBrowser1.Navigate('about:blank');
  WebBrowser1.OleObject.Document.Write(s);
s:='<html><h1>text1</h2><b>text2</b></html>';
s:='<html><h1>text1</h2></html>';
 WebBrowser1.Navigate('about:blank');
  WebBrowser1.OleObject.Document.Write(s);
s:='<html><h1>text1</h2><b>text2</b></html>';
Добавлено через 24 минуты
все,догадался сам
0
03.01.2012, 20:14

Не по теме:

Хороший тон предполагает запостить решение после нахождения, вдруг кому понадобится

1
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
03.01.2012, 20:37  [ТС]
вспомня что я читал о js понял,что write не переписывает,а вписывает в документ что-то,т.е. добавить это WebBrowser1.OleObject.Document.Write(s); без вызова about:blank
1
 Аватар для Mawrat
13113 / 5894 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
04.01.2012, 05:43
Более универсально - действовать через DOM (объектная модель документа).
Например, у нас есть начальная версия HTML кода:
XML
1
2
3
4
5
6
7
<html>
<body>
  <div id="div1">
    <h1>text1</h1>
  </div>
</body>
</html>
Создаём документ с этим кодом:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//Создание документа и загрузка начальной версии HTML кода.
procedure TForm1.Button1Click(Sender: TObject);
var
  Doc : Variant;
begin
  Doc := WebBrowser1.OleObject.document;
  if TVarData(Doc).VDispatch = nil then begin
    //Создаём новый документ с пустым содержанием.
    WebBrowser1.Navigate('about:blank');
    Doc := WebBrowser1.OleObject.document;
  end;
  //Загружаем в документ нужный HTML код.
  //Почему-то если вместо <div> использовать тег <p>, то работает неверно.
  //Так происходит здесь и в JavaScript при проверке на [url]www.w3schools.com[/url].
  Doc.open('text/html', 'replace');
  Doc.write(
    '<html><body>'
    + '<div id="div1">'
    + '<h1>text1</h1>'
    + '</div>'
    + '</body></html>'
  );
  Doc.close;
end;
Теперь, нам надо в код добавить часть:
XML
1
<b>text2</b>
Чтобы получилось так:
XML
1
2
3
4
5
6
7
<html>
<body>
  <div id="div1">
    <h1>text1</h1><b>text2</b>
  </div>
</body>
</html>
Это можно сделать, например так. Но здесь код не оптимален по скорости выполнения:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//Добавление элемента НЕ оптимальным способом.
procedure TForm1.Button2Click(Sender: TObject);
var
  Doc, Elem : Variant;
begin
  //Ссылка на интерфейс документа.
  Doc := WebBrowser1.OleObject.document;
  //Находим элемент с ID="div1".
  Elem := Unassigned;
  Elem := Doc.getElementById('div1');
  if TVarData(Elem).VDispatch = nil then begin
    ShowMessage('Не найден элемент с ID="div1". Действие отменено.');
    Exit;
  end;
  //Добавляем к содержимому элемента дополнительный код.
  Elem.innerHTML := Elem.innerHTML + '<b>text2</b>';
end;
В этом коде ресурсоёмкой является строка:
Delphi
1
2
  //Добавляем к содержимому элемента дополнительный код.
  Elem.innerHTML := Elem.innerHTML + '<b>text2</b>';
Здесь, для того, чтобы добавить новую часть к коду элемента, производится чтение всего текста элемента, потом, добавляется новая часть и весь код элемента перезаписывается. Если элемент содержит большой код, то такие действия замедлят работу.
Поэтому, наиболее эффективным будет приём с добавлением дочернего элемента:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//Добавление элемента оптимальным способом.
procedure TForm1.Button3Click(Sender: TObject);
var
  Doc, Elem1, Elem2 : Variant;
begin
  //Ссылка на интерфейс документа.
  Doc := WebBrowser1.OleObject.document;
  //Находим элемент с ID="div1".
  Elem1 := Unassigned;
  Elem1 := Doc.getElementById('div1');
  if TVarData(Elem1).VDispatch = nil then begin
    ShowMessage('Не найден элемент с ID="div1". Действие отменено.');
    Exit;
  end;
  //Создаём элемент, представленный тегами: <b></b>.
  Elem2 := Doc.createElement('b');
  //Задаём код элемента: "text2".
  Elem2.innerHTML := 'text2';
  //Добавляем элемент Elem2 в коллекцию дочерних элементов для Elem1.
  Elem1.appendChild(Elem2);
end;
Если надо добавить простой текст, то это можно сделать так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//Добавление текста оптимальным способом.
procedure TForm1.Button4Click(Sender: TObject);
var
  Doc, Elem, NodeTxt : Variant;
begin
  //Ссылка на интерфейс документа.
  Doc := WebBrowser1.OleObject.document;
  //Находим элемент с ID="div1".
  Elem := Unassigned;
  Elem := Doc.getElementById('div1');
  if TVarData(Elem).VDispatch = nil then begin
    ShowMessage('Не найден элемент с ID="div1". Действие отменено.');
    Exit;
  end;
  //Создаём текстовый узел с текстом: "_Это добавленный текст."
  NodeTxt := Doc.createTextNode('_Это добавленный текст.');
  //Добавляем в элемент текстовый узел в качестве дочернего узла.
  Elem.appendChild(NodeTxt);
end;
Для проверки, можно положить на форму 4 кнопки, оформить их обработчики события OnClick так, как показано выше и пощёлкать их.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.01.2012, 05:43
Помогаю со студенческими работами здесь

Отображение локальной web страницы в webbrowser
В общем есть готовая простая web страничка содержащая одну таблицу. Первая строка таблицы окрашена. Открываю в хроме, мозиле отображается...

Изменение кода страницы и отображение ее в WebBrowser
Имеется сайт нужно изменить одну ссылку изображения и другие теги и получившийся результат ввыводить на webbrowser1 помогите пожалуйста в...

Отображение в TextBox адреса страницы WebBrowser
Как сделать так, чтобы при открытии любой страницы в webbrouser в textbox показывался вместо текста адресс страницы (например...

Отображение HTML без компонента webbrowser
собственно сабж это и есть мой вопрос, можно ли отобразить страницу сайта без данного компонента?

Отображение HTML без компонента webbrowser
собственно сабж это и есть мой вопрос, можно ли отобразить страницу сайта без данного компонента?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru