Многие разработчики Delphi сталкиваются с проблемами при использовании компонента TEdgeBrowser для встраивания веб-контента в свои приложения. Одна из распространенных ошибок - HRESULT -2147023496 (или 0x80070578 в шестнадцатеричном формате), которая означает "недопустимый дескриптор окна". В этой статье мы разберем причины этой ошибки и предложим несколько способов ее решения.
Понимание проблемы
Ошибка HRESULT -2147023496 возникает при попытке создания WebView2 с недействительным дескриптором окна. Это может происходить по нескольким причинам:
Проблемы с инициализацией WebView2
Конфликты с другими компонентами формы
Временные проблемы с окружением выполнения
Ошибки в цепочке создания компонента
Как показано в обсуждении, ошибка может возникать непостоянно - иногда компонент работает корректно, а иногда выдает ошибку.
Базовое решение с TEdgeBrowser
Стандартный подход с использованием TEdgeBrowser выглядит так:
procedure TForm1.FormCreate(Sender: TObject);
begin
EdgeBrowser1.CreateWebView;
end;
procedure TForm1.EdgeBrowser1CreateWebViewCompleted(Sender: TCustomEdgeBrowser;
AResult: HRESULT);
begin
if Succeeded(AResult) then
begin
if EdgeBrowser1.ControllerInterface <> nil then
EdgeBrowser1.ControllerInterface.Set_IsVisible(True);
end
else
begin
ShowMessage('Ошибка создания WebView: ' + IntToStr(AResult));
// Здесь можно попытаться перезапустить инициализацию
end;
end;
Альтернативное решение #1: Перезапуск инициализации
Если ошибка возникает периодически, можно реализовать механизм повторной инициализации:
procedure TForm1.RetryWebViewCreation;
var
RetryCount: Integer;
begin
RetryCount := 0;
while RetryCount < 3 do
begin
try
EdgeBrowser1.CreateWebView;
Break;
except
on E: Exception do
begin
Inc(RetryCount);
if RetryCount >= 3 then
raise;
Sleep(1000 * RetryCount); // Увеличиваем задержку между попытками
end;
end;
end;
end;
Альтернативное решение #2: Использование WebView4Delphi
Как предложил salvadordf, можно использовать альтернативную библиотеку WebView4Delphi, которая предоставляет более детальную информацию об ошибках:
Проверка окружения: Убедитесь, что WebView2 Runtime установлен и актуален. Можно добавить проверку:
function IsWebView2RuntimeInstalled: Boolean;
begin
Result := FileExists(GetEnvironmentVariable('ProgramFiles(x86)') +
'\Microsoft\EdgeWebView\Application\msedgewebview2.exe');
end;
Правильное время инициализации: Инициализируйте WebView после полной загрузки формы, например в OnShow:
procedure TForm1.FormShow(Sender: TObject);
begin
if not EdgeBrowser1.Initialized then
EdgeBrowser1.CreateWebView;
end;
Обработка ошибок восстановления: Реализуйте механизм восстановления после сбоев:
procedure TForm1.RecoverFromWebViewFailure;
begin
try
EdgeBrowser1.Free;
EdgeBrowser1 := TEdgeBrowser.Create(Self);
EdgeBrowser1.Parent := Self;
EdgeBrowser1.Align := alClient;
EdgeBrowser1.OnCreateWebViewCompleted := WebBrowserCreateWebViewCompleted;
EdgeBrowser1.CreateWebView;
except
on E: Exception do
ShowMessage('Не удалось восстановить WebView: ' + E.Message);
end;
end;
Заключение
Проблема с ошибкой HRESULT -2147023496 в TEdgeBrowser может быть решена несколькими способами: от простых попыток перезапуска инициализации до использования альтернативных библиотек, таких как WebView4Delphi. Важно правильно обрабатывать ошибки и предусматривать механизмы восстановления для повышения стабильности приложения.
Если проблема сохраняется, стоит проверить обновления для WebView2 Runtime и самой Delphi, так как Embarcadero регулярно выпускает обновления для компонента TEdgeBrowser.
Статья описывает решение проблемы с ошибкой HRESULT -2147023496 при инициализации WebView2 в Delphi, предлагая несколько методов её устранения, включая перезапуск инициализации и использование альтернативной библиотеки WebView4Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.