В статье рассматривается проблема отображения веб-страниц в компоненте TEdgeBrowser в Delphi 12.1 на Windows 11. Приведены два решения: официальное от Embarcadero и альтернативное с использованием CEF4Delphi.
Проблема
При попытке отобразить веб-страницу в компоненте TEdgeBrowser в Delphi 12.1 на Windows 11 ничего не происходит. Компонент не отображает веб-страницу, хотя установщик Microsoft Edge WebView2 был запущен и компонент был размещен на форме.
Решение от Embarcadero
По данным документации Embarcadero, для корректной работы TEdgeBrowser необходимо выполнить несколько шагов:
Установить WebView2 SDK, чтобы скопировать файл WebView2Loader.dll в папку приложения (или добавить его в путь поиска ОС).
Настроить свойство UserDataFolder браузера до навигации к какому-либо URL.
Назначить обработчик события OnCreateWebViewCompleted для обнаружения неудачных попыток инициализации WebView2.
Пример кода, демонстрирующий правильную конфигурацию TEdgeBrowser:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Winapi.WebView2, Winapi.ActiveX,
Vcl.Edge;
type
TForm1 = class(TForm)
EdgeBrowser1: TEdgeBrowser;
procedure FormCreate(Sender: TObject);
procedure EdgeBrowser1CreateWebViewCompleted(Sender: TObject);
private
{ Private declarations }
FUserDataFolder: string;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
FUserDataFolder := TPath.GetTempPath + 'EdgeBrowser1' + IntToStr(Hash(Address(EdgeBrowser1)));
EdgeBrowser1.UserDataFolder := FUserDataFolder;
EdgeBrowser1.OnCreateWebViewCompleted := EdgeBrowser1CreateWebViewCompleted;
EdgeBrowser1.Navigate('https://www.example.com');
end;
procedure TForm1.EdgeBrowser1CreateWebViewCompleted(Sender: TObject);
begin
if EdgeBrowser1.CreateWebViewCompleted.Succeeded then
ShowMessage('WebView2 initialized successfully.')
else
ShowMessage('Failed to initialize WebView2: ' + EdgeBrowser1.CreateWebViewCompleted.Error.Message);
end;
end.
Альтернативное решение: CEF4Delphi
Вместо использования TEdgeBrowser можно воспользоваться альтернативным компонентом CEF4Delphi, который основан на Chromium Embedded Framework (CEF) и не требует установки клиента. Для этого необходимо:
Установить CEF4Delphi из репозитория GetIt Package Manager в Delphi.
Добавить TCEFBrowser на форму.
Написать код для навигации к веб-странице.
Пример кода, демонстрирующий использование CEF4Delphi:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, CEF4Delphi.TCEF;
type
TForm1 = class(TForm)
CEFBrowser1: TCEFBrowser;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
CEFBrowser1.LoadURL('https://www.example.com');
end;
end.
Использование CEF4Delphi избавляет от необходимости устанавливать WebView2 SDK и настраивать дополнительные свойства, как в случае с TEdgeBrowser. Тем не менее, обе технологии могут быть полезны в зависимости от конкретных требований проекта.
В статье описывается проблема отображения веб-страниц в компоненте TEdgeBrowser в Delphi 12.1 на Windows 11, а также приводятся два решения: официальное от Embarcadero и альтернативное с использованием CEF4Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.