В конструкторе форм на странице палитры БУХта появился компонент TbmWebBrowser2 — встроенный браузер на движке Microsoft Edge WebView2 (Chromium). В отличие от прежнего компонента TWebBrowser (на основе Internet Explorer), он правильно показывает современные страницы: HTML5, CSS Grid, JavaScript ES6, fetch, async/await.
Возможности компонента:
window.bm (LoadFromSql, GetValue, Exec, LoadFromView, Ping). Запросы выполняются под подключением текущего пользователя и отвечают только страницам из списка TrustedOrigins. Изменения данных через window.bm не попадают в журнал изменений формы (Кто/Когда/Что изменил);Примеры скриптов формы (компонент на форме называется bmWebBrowser21)
Показать HTML или открыть страницу. Вызывать можно сразу, не дожидаясь, пока браузер запустится: команды выполнятся, как только он будет готов.
procedure Button1Click(Sender: TObject);
begin
bmWebBrowser21.LoadHtml('<html><body><h1>Остатки</h1><div id="sum"></div></body></html>');
// или страница из файла:
// bmWebBrowser21.Navigate('file:///C:/Buhta/pages/ostatki.html');
end;
Передать данные на страницу — выполнить JavaScript или отправить объект JSON:
procedure Button2Click(Sender: TObject);
begin
bmWebBrowser21.ExecuteScript('document.getElementById("sum").innerText = "12 345,00";');
bmWebBrowser21.PostWebMessageAsJson('{"cmd":"setRows","n":42}');
end;
На странице объект принимается так: window.chrome.webview.addEventListener('message', e => { if (e.data.cmd === 'setRows') ... });
Получить данные со страницы. На странице: window.chrome.webview.postMessage('SAVE:' + document.getElementById('sum').innerText);, в скрипте формы — обработчик события OnWebMessageReceived:
procedure bmWebBrowser21WebMessageReceived(Sender: TObject; const Msg: string);
begin
if Copy(Msg, 1, 5) = 'SAVE:' then
ShowMessage('Пришло со страницы: ' + Copy(Msg, 6, Length(Msg)));
end;
Дать странице доступ к данным через window.bm. Страницу открывать через Navigate (для LoadHtml мост по умолчанию не работает):
procedure FormShow(Sender: TObject);
begin
bmWebBrowser21.AllowSqlBridge := True;
bmWebBrowser21.Navigate('file:///C:/Buhta/pages/ostatki.html');
end;
На странице: const n = await bm.GetValue('SELECT COUNT(*) FROM ТМЦ'); (внутри async-функции; ошибка SQL приходит как исключение — try/catch).
Проверить, запустился ли браузер, и сохранить страницу в PDF:
procedure Button3Click(Sender: TObject);
begin
if bmWebBrowser21.Failed then
ShowMessage(bmWebBrowser21.LastError)
else
bmWebBrowser21.PrintToPdf('C:\Buhta\ostatki.pdf');
end;
Старый компонент TWebBrowser продолжает работать в существующих формах, переделывать их не нужно.
Требуется Windows 10/11 или Windows Server 2016 и новее, Microsoft Edge WebView2 Runtime (в Windows 10/11 и Windows Server 2022 обычно уже установлен) и файл WebView2Loader.dll рядом с BuhtaClient.exe (входит в поставку).
Если встроенный браузер запустить нельзя (Windows XP/7/8, не установлен WebView2 Runtime, нет файла WebView2Loader.dll), при открытии формы один раз за сеанс выводится сообщение с причиной, например «Встроенный браузер недоступен в Windows XP. Он работает только в Windows 10 и новее», и тот же текст показывается на месте компонента. Остальная программа работает как обычно.
При запуске программы в мобильном режиме (ключ -MOBILE:N) на компьютере с большим экраном показывались рабочий стол, панель задач и главное меню.
Что сделано
В мобильном режиме на большом экране рабочий стол, панель задач и главное меню скрываются — видны только окна мобильных форм.
подробнее о конфигурации зарплата