Я уже имел неосторожность использовать chromium и geckoport, пытаюсь вот от них уйти.
Через IPro неверно отображается html.
Через поток попробую сейчас.
pupsik писал(а):pupsik » 23.03.2017 22:26:50
Я вот тоже до обновления на 1.7 собирал пакет с htmlview, потом обновился, а пакет собираться перестал. Константу переименовал одну, закомментил строку в initialization, чтоб хоть как-то собралось. Собралось, демка из пакета работает, чистый html без форм отображается, с формами - нет. Ошибку, которая выскакивает, выше написал.
Никакие оле и длл мне не подходят, проект кроссплатформенный.
Добавлено спустя 2 минуты 52 секунды:Alex2013 писал(а):1 Может я чего-то не понял но почему бы просто не вызвать браузер ?
мне стоило сразу интерфейс к БД пилить в вебе, но пришлось бы резко и очень глубоко изучить или пхп (что не особо хочется), или питон (чем теперь и занимаюсь). Но проект нужен был позарез, поэтому запилил на том, что хорошо знал, ну или хотя бы мог понять, как сделать и где найти ответы и примеры.
Добавлено спустя 31 минуту 41 секунду:Взял новый экземпляр пакета, ветка master. Собираю на чистую.
Ошибки при компиляции:
1. Htmlmisc.pas строка 164 TGCPResultsW = GCP_RESULTS;
переименовать константу надо, т.к. в новой версии файла struct.inc они уже есть в таких вариантах: GCPRESULTS; GCP_RESULTSA (тоже самое); GCP_RESULTSW. Я переименовал в GCPRESULTS
2. Строка 1255 htExpectsUTF8 := WidgetSet.LCLPlatform in [lpCarbon, lpQt, lpGTK2, lpWin32];
вызывает следующую ошибку: identifer not found lpCarbon, lpQt, lpGTK2, lpWin32
Хотя они очень даже found, в uses добавляем LCLPtalformDef
3. vwPrint файл, ошибка на строке 435, у обновленного класса TPrinterDevice нет больше свойства DevModeA, есть DevModeW, но я ту строку просто закомментил, т.к. с учетом директив компилятора она все равно не работает.
После пакет собирается.
Добавлено спустя 7 минут 41 секунду:И ВОТ ТЕПЕРЬ РАБОТАЕТ!!!
Через поток открывается отлично, иногда при скроллинге текст пропадает, но потом восстанавливается.
Мне теперь как-то надо 1) при открытии передать в элементы форм (поля ввода и чекбоксы) значения по умолчанию, а шаблоне html сразу прописать не могу, они будут из БД браться
2) получить измененные пользователем значения для генерации итогового html'а
Добавлено спустя 56 минут 49 секунд:По п. 2 вроде разобрался:
- Код: Выделить всё
procedure TForm1.HTMLFormSubmit(Sender: TObject; const ActionF, Target, EncType,
Method: ThtString; Results: ThtStringList);
begin
Memo1.Lines.Text:=Results.Text;
end;
только придется переименовывать все время const Action, оно конфликтует с таким же идентификатором из модуля Forms
Добавлено спустя 1 час 30 минут 6 секунд:Re: (РЕШЕНО 50%) Загнал себя в тупик с HTML (((Кажется, я вижу свет в конце туннеля:
- Код: Выделить всё
FormData Property
--------------------------------------------------------------------------------
Applies to
THtmlViewer component
Declaration
property FormData: TFreeList;
The FormData Property is used internally by THtmlViewer for storing and restoring HTML Form data in HTML documents. Users may also use this property for the same purpose or to read and/or modify Form data.
As read from THtmlViewer, the FormData consists of a list of TStringLists, one TStringList for each Form in the document. Each string in the TStringList consists of a Name, Value pair separated by an '=' sign:
<name>=<value>
where <name> is the Name attribute assigned to the form control and <value> is the value entered (or the default value if none has been entered).
When an assignment is made to FormData, the same format is used.
Добавлено спустя 25 минут 58 секунд:Re: (РЕШЕНО 50%) Загнал себя в тупик с HTML (((Кароче,
- Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
with HTML.FormControlList do
for i:=0 to Count-1 do
if TFormControlObj(Items[i]).TheControl is TCheckbox then
TCheckbox(TFormControlObj(Items[i]).TheControl).Checked:=TRUE;
end;
- меняет, к примеру, все чекбоксы на включенные)) переделал пример из документации к THtmlViewer.
Вопрос решен, как я понимаю.