Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
2 / 2 / 0
Регистрация: 30.04.2019
Сообщений: 82

WebBrowser не выводит содержимое файлов

04.12.2019, 08:02. Показов 2201. Ответов 13

Студворк — интернет-сервис помощи студентам
Есть на форме WebBrowser, в него должны выводиться файлы из папки data и там ещё есть подпапки, я всё прописал но когда я потом из treeView выбираю что открыть, то в WebBroser говорит что не может открыть страницу, может я что то не правильно прописал или где то что то не дописал? или свойства не те поставил? Вообщем пожалуйста народ помогите.
Вот ссылка на проект https://drive.google.com/file/... sp=sharing
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.12.2019, 08:02
Ответы с готовыми решениями:

Webbrowser как сохранить содержимое
Ребята подскажите! В компоненте webbrowser delphi открываю определенную страницу после чего необходимо захватить в переменную содержимое...

Компонент WebBrowser и его аналоги или как загрузить содержимое веб страницы в память
Господа, вот есть компонент Memo, а есть его программный аналог TStringlist. Следуя этой логике хотелось бы узнать какой аналог есть у...

Программа сканирует каталог и при появлении новых текстовых файлов выводит их содержимое в консоль
Товарищи! Прошу помощи для выполнения задания. До этого на Java не программировал ни разу, а тут сразу вот это дали: Написать...

13
231 / 163 / 54
Регистрация: 26.10.2014
Сообщений: 928
04.12.2019, 09:22
YTGoodFox, файлы html открываете, я так полагаю?
0
2 / 2 / 0
Регистрация: 30.04.2019
Сообщений: 82
04.12.2019, 10:40  [ТС]
Htm

Добавлено через 1 час 0 минут
Выяснил что почему то не правильно работает ExtractFilePath, то есть если полный путь к файлу прописать то это будет работать, а если использовать ExtractFilePath и прописать краткий путь так сказать то ничего не выводит
0
231 / 163 / 54
Регистрация: 26.10.2014
Сообщений: 928
04.12.2019, 10:57
YTGoodFox,

Не по теме:

процедуру TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode) писать не устали?


проверяйте, что передаете в navigate
0
2 / 2 / 0
Регистрация: 30.04.2019
Сообщений: 82
04.12.2019, 12:21  [ТС]
Пожалуйста посмотрите по проекту и помогите, очень прошу

Добавлено через 1 час 7 минут
У меня есть другой проек, там есть такой же момент, и там точно так же все выглядит естественно за исключением пути. И индексов в TreeView, но все выводится. Да и я когда вчера писал у меня выводило и перестало, я не знаю в чем может быть проблема поэтому прошу помогите её устранить.
0
231 / 163 / 54
Регистрация: 26.10.2014
Сообщений: 928
04.12.2019, 12:41
YTGoodFox, при открытии вашего проекта у меня десятки ошибок, связанные с тем что у нас различные версии IDE. Вы правда думаете что я буду их править?
Я вам дал совет - проверяйте что передаете в Navigate. К примеру бросьте на форму Edit и в процедуре TreeView1Change выводите в него ту строку, которую передаете в Navigate. Запускаете приложение, кликаете по узлу, при этом в Edit появится путь к файлу, который пытаетесь отобразить. Копируете, нажимаете Win + R, затем Win + V, затем Enter. Что получили?
0
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
04.12.2019, 16:51
Ваш файл Project1.exe создаётся в директории "...\Win32\Debug\".
Соответственно он ожидает данные не в "...\data\", а в "...\Win32\Debug\data\".

Добавлено через 4 минуты
Какой кошмарный способ в TreeView1Change, хотя ничего не могу сказать, технически работает. %))
Только в "№17" у вас пробела не хватает. Может ещё где, при таком виде сложно быстро проверить.

А вы не думали об том чтоб поместить все эти ресурсы в ресурсы программы?

Добавлено через 1 час 11 минут
Ещё нюансы:
  • Не следует сбрасывать содержимое браузера непосредственно перед Navigate(). Лишние действия, лишние мелькания.
  • Если выбирается узел на верхнем уровне - ничего не происходит. Индексы у них выставлены как -1. Вот только в таких случаях нужно сбрасывать.
  • Сбрасывается не так: WebBrowser1.Navigate('');, а вот так: WebBrowser1.Navigate('about:blank');.
  • Было бы всё равно ужасно, но чу-чуть поудобнее, если переделать через Case Of.
  • Лучше сделать отдельный метод, хотя бы проверяющий существование файла, и в случае чего выводящий информацию об его отсутствии.
То есть хотя бы как-то так:
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Procedure TForm1.LoadHTML(HTML: String);
Var
  MaxNow: TDateTime;
Begin
WebBrowser1.Navigate('about:blank');
MaxNow := IncSecond(Now(), 4);
While (WebBrowser1.ReadyState < READYSTATE_COMPLETE) And (Now() < MaxNow) Do
  Application.ProcessMessages();
WebBrowser1.OleObject.document.body.innerHTML := HTML;
End;
 
Procedure TForm1.LoadFile(FileName: String);
Var
  FullPath: String;
Begin
FullPath := ProgramPath + FileName;
If FileExists(FullPath) Then
  WebBrowser1.Navigate(FullPath)
Else
  LoadHTML('Файл не найден:<br/><div style="border: solid red 2px;">' + FullPath + '</div>');
End;
 
Procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
Begin
Case Node.StateIndex Of
  -1:
    LoadHTML('Выберите одну из подкатегорий...');
  1:
    LoadFile('data\1. Работа с ОС и терминалом\1.1 Знакомство с терминалом.htm');
  ...
  ...
  ...
  60:
    LoadFile('data\4. Лабораторные работы\Лабораторная работ № 25.htm');
  Else
    LoadHTML('Неизвестный индекс:<br/><div style="border: solid red 2px;">' + IntToStr(Node.StateIndex) + '</div>');
  End;
End;
А вообще бы я пересмотрел способ хранения и обработки...
Если вы остановитесь на папке с файлами - может просто сканировать содержимое папки и генерировать узлы TreeView по существующим файлам?

Добавлено через 2 минуты
а... Надо будет Uses DateUtils;.
0
2 / 2 / 0
Регистрация: 30.04.2019
Сообщений: 82
04.12.2019, 17:05  [ТС]
Файл всегда будет существовать, это будет же типо готовый учебник, я вам очень благодарен за вашу помощь, однако мои навыки слабы(я понимаю что это не сложно) и времени мало осталось, вообщем нужно ещё как то сделать плеер с возможностью выбора видео из списка(treeview), уже очень не удобно просить но не подскажите как загрузку видео можно реализовать так же через TreeView в MediaPlayer? . И я понимаю что код можно сделать красивее и эффективнее, но он работает, времени мало, да и этот проект все равно для курсовой, так что лишь бы отстреляться, вот потом можно будет для себя поизучать, когда сдам его. Спасибо ещё раз большое.
0
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
04.12.2019, 17:43
Цитата Сообщение от YTGoodFox Посмотреть сообщение
когда вчера писал у меня выводило и перестало, я не знаю в чем может быть проблема
В старых версиях Делфи файл Project1.exe создавался в корне папки.
В новых Делфи по умолчанию в "Win32\Debug\" или в "Win32\Release\". Но можно было как-то настроить чтоб в корне...
Возможно вы поменяли версию Делфи или как-то случайно изменили настройки.

Но основная проблема - оно у вас ждёт папку "data" в другом месте.
0
 Аватар для Flip
335 / 173 / 67
Регистрация: 25.02.2018
Сообщений: 616
04.12.2019, 23:42
Я не стал скачивать и открывать это творение... просто поделюсь как делал в своё время...
Вот код:
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, xmldom, XMLIntf, msxmldom, XMLDoc, ComCtrls, ImgList,
  ExtCtrls, Buttons, OleCtrls, SHDocVw, MSHTML, ActiveX, Vcl.Imaging.jpeg;
 
type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    GroupBox1: TGroupBox;
    Button2: TButton;
    Image1: TImage;
    XMLDocument1: TXMLDocument;
    ImageList1: TImageList;
    WebBrowser1: TWebBrowser;
    Button1: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button9: TButton;
    Button10: TButton;
    ComboBox1: TComboBox;
    Panel3: TPanel;
    Panel4: TPanel;
    ProgressBar1: TProgressBar;
    TreeView1: TTreeView;
    procedure TreeView1GetImageIndex(Sender: TObject; Node: TTreeNode);
    procedure FormCreate(Sender: TObject);
    procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure WebBrowser1ProgressChange(ASender: TObject; Progress, ProgressMax: Integer);
    procedure Button10Click(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
type
  TPXmlNode = ^IXMLNode;
 
procedure ClearTreeData(aTree: TTreeView);  //Очистка дерева перед загрузкой файла
var
  TreeNode: TTreeNode;
  PXmlNode: TPXmlNode;
  i: Integer;
begin
  if aTree = nil then
    Exit;
  for i := 0 to aTree.Items.Count - 1 do
  begin
    TreeNode := aTree.Items[i];
    PXmlNode := TPXmlNode(TreeNode.Data);
    if PXmlNode <> nil then
      Dispose(TPXmlNode(TreeNode.Data));
  end;
  aTree.Items.Clear;
end;
 
procedure ProcXmlNode(aXmlNode: IXMLNode; aTree: TTreeView; aTreeNode: TTreeNode); //Рекурсивный перебор всех нодов
var
  NewTreeNode: TTreeNode;
  PXmlNode: TPXmlNode;
  i: Integer;
begin
  NewTreeNode := TTreeNode.Create(aTree.Items);
  New(PXmlNode);
  PXmlNode^ := aXmlNode;
  if aTreeNode = nil then
    NewTreeNode := aTree.Items.AddNode(NewTreeNode, aTreeNode, aXmlNode.NodeName, PXmlNode, naAdd)
  else
    NewTreeNode := aTree.Items.AddNode(NewTreeNode, aTreeNode, aXmlNode.NodeName, PXmlNode, naAddChild);
  for i := 0 to aXmlNode.ChildNodes.Count - 1 do
    ProcXmlNode(aXmlNode.ChildNodes[i], aTree, NewTreeNode);
end;
 
procedure TForm1.FormCreate(Sender: TObject);     // Загрузка содержимого в Treeview
var
  XMLDoc: TXMLDocument;
  XmlNodeDoc: IXMLNode;
  Tree: TTreeView;
begin
  Tree := TreeView1;
  XMLDoc := XMLDocument1;
  ClearTreeData(TreeView1);
  XMLDoc.LoadFromFile('Data.XML');
  XmlNodeDoc := XMLDoc.DocumentElement;
  ProcXmlNode(XmlNodeDoc, Tree, nil);
end;
 
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
var
  XmlNode, NameNode: IXMLNode;
  PXmlNode: TPXmlNode;
  i: Integer;
  AttrValue: Variant;
  HTMLPAGE, NodeName: string;
begin
  XmlNode := TPXmlNode(Node.Data)^;
  New(PXmlNode);
  PXmlNode^ := XmlNode;
  for i := 0 to XmlNode.AttributeNodes.Count - 1 do
  begin
    NameNode := XmlNode.AttributeNodes.Get(0);
    if not VarIsNull(NameNode.NodeValue) then
      HTMLPAGE := NameNode.NodeValue;
  end;
  WebBrowser1.Navigate(ExtractFilePath(paramstr(0)) + HTMLPAGE);
  WebBrowser1.Silent := True;
end;
 
procedure TForm1.TreeView1GetImageIndex(Sender: TObject; Node: TTreeNode); // Загрузка иконок в Treeview
begin
  with Node do
  begin
    if Expanded then
      ImageIndex := 1
    else
      ImageIndex := 0;
  end;
end;
 
procedure TForm1.WebBrowser1ProgressChange(ASender: TObject; Progress, ProgressMax: Integer);
begin
  ProgressBar1.Max := ProgressMax;
  ProgressBar1.Position := Progress;
end;
 
procedure TForm1.Button10Click(Sender: TObject);       //копирование выделенного текста
begin
  WebBrowser1.ExecWB(OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  Doc, Histor: Variant;
begin
  Doc := WebBrowser1.OleObject.document;  //Ссылаемся на интерфейс документа;
  if TVarData(Doc).VDispatch = nil then
    Exit;  //Если документ отсутствует, тогда выходим;
  Histor := Doc.parentWindow.history;  {Объект документа - объект родительского окна - объект содержащий историю переходов Шаг назад к предыдущему URL.}
  ;
  Histor.go(-1);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  WebBrowser1.ExecWB(OLECMDID_FIND, OLECMDEXECOPT_DODEFAULT);
end;
 
procedure TForm1.Button3Click(Sender: TObject);
var
  Doc, Histor: Variant;
begin
  Doc := WebBrowser1.OleObject.document;  //Ссылаемся на интерфейс документа;
  if TVarData(Doc).VDispatch = nil then
    Exit;  //Если документ отсутствует, тогда выходим;
  Histor := Doc.parentWindow.history;  {Объект документа - объект родительского окна - объект содержащий историю переходов Шаг вперед к предыдущему URL.}
  ;
  Histor.go(1);
end;
 
procedure TForm1.Button4Click(Sender: TObject);
begin
  WebBrowser1.Refresh;
end;
 
procedure TForm1.Button5Click(Sender: TObject);
begin
  WebBrowser1.ExecWB(OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_DODEFAULT);  //Предварительный просмотр
end;
 
procedure TForm1.Button6Click(Sender: TObject);
var
  PostData, Headers: OLEvariant;
begin
  WebBrowser1.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DODEFAULT, PostData, Headers);  //Печатаем содержимое TWebBrowser;
end;
 
procedure TForm1.Button9Click(Sender: TObject);
begin
  WebBrowser1.ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT);  //Сохраняем содержимое WebBrowser1
end;
 
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  WebBrowser1.OleObject.Document.Body.Style.Zoom := (ComboBox1.Text);
end;
 
end.
Список страниц, которые мне необходимо было загнать в WebBrowser, я реализовал в виде XML, это удобно тем, что можно его редактировать в любой момент, не ковыряя сам код приложения. Дерево грузилось из XML-файла, который валялся рядом с exe-файлом и его можно было править в любое удобное время без перекомпилирования самого проекта, следующего содержания:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="windows-1251"?>
    <Highlight>
        <Tango Code="Tango.htm"/>
        <Perldoc Code="Perldoc.htm"/>
        <Pastie Code="Pastie.htm"/>
        <Native Code="Native.htm"/>
        <Murphy Code="Murphy.htm"/>
        <Monokai Code="Monokai.htm"/>
        <Manni Code="Manni.htm"/>
        <Fruity Code="Fruity.htm"/>
        <Friendly Code="Friendly.htm"/>
        
    </Highlight>
Далее это работало как-то так:

Сам проект - XML+Treeview.ZIP
0
0 / 0 / 0
Регистрация: 19.11.2018
Сообщений: 19
04.02.2021, 17:45
Подскажите пожалуйста, откуда берется:
Delphi
1
Procedure TForm1.LoadHTML(HTML: String);
0
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
04.02.2021, 18:31
Цитата Сообщение от iWrite Посмотреть сообщение
Подскажите пожалуйста, откуда берется:
Да кто-же кроме вас знает, откуда вы эту строку выдернули?
0
0 / 0 / 0
Регистрация: 19.11.2018
Сообщений: 19
04.02.2021, 18:41
Пытливый, Выше в коде непонятно откуда привели пример. и еще на нескольких ресурсах я это наблюдал, откуда берется интересно. Я никак не могу понять в какую сторону мне гуглить чтобы ютуб видео на форму кинуть
0
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
04.02.2021, 19:56
Обычная пользовательская процедура, там же выше и приведен ее код:
Delphi
1
2
3
4
5
6
7
8
9
10
Procedure TForm1.LoadHTML(HTML: String);
Var
  MaxNow: TDateTime;
Begin
WebBrowser1.Navigate('about:blank');
MaxNow := IncSecond(Now(), 4);
While (WebBrowser1.ReadyState < READYSTATE_COMPLETE) And (Now() < MaxNow) Do
  Application.ProcessMessages();
WebBrowser1.OleObject.document.body.innerHTML := HTML;
End;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.02.2021, 19:56
Помогаю со студенческими работами здесь

Разработать программу которая выводит на экран, которая выводит содержимое текущего каталога, упорядоченное по времени
Помогите пожалуйста!! В уинвере не изучали язык С++ а заставляют на нем написать программку (( В общем то вот такую: Разработать...

Напишите программу, которая выводит на экран содержимое файла и выводит сумму чисел файла
Напишите программу, которая выводит на экран содержимое файла D:\numbers.txt. и выводит сумму чисел файла. Вынужден снова просить...

Перевернуть содержимое WebBrowser
Здравствуйте, подскажите каким образом можно перевернуть содержимое WebBrowser. Я пытался использовать RotateTransform, но к сожалению...

Сравнить содержимое webBrowser и StringBuilder
Собственно сабж. Делаю так: if (webBrowser1.DocumentText.ToString() == sessionreport.ToString()) ...

Как очистить содержимое Webbrowser
На форме я разместил компонент таймер которые через каждые 15 секунд загружает данные в броузер. При каждом вызове данные в браузере...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru