وعليكم السلام ورحمة الله
لعرض صفحات HTML في تطبيقات دلفي بشكل حديث، مستقر، وخالٍ من مشاكل التوافق مع معايير HTML5/CSS3/JavaScript، أنصح بشدة باستخدام TWebView2 بدلاً من TWebBrowser التقليدي (المبني على Internet Explorer). TWebView2 هو المكون الرسمي المدعوم من إيمباركاديرو ومايكروسوفت، ويعتمد على محرك Edge (Chromium).
إليك الدليل العملي خطوة بخطوة:
? 1. المتطلبات الأساسية
دلفي 10.4 Sydney أو أحدث (الأفضل 11.x أو 12.x).
نظام تشغيل: Windows 10 أو 11 (يدعم 7/8 عبر حزمة WebView2 Runtime، لكن غير موصى به للمشاريع الجديدة).
مكتبة WebView2 مثبتة مع دلفي (تظهر تلقائياً في Tool Palette تحت تبويب Microsoft).
? 2. إضافة واستخدام TWebView2
اسحب المكون TWebView2 إلى الفورم.
في وقت التشغيل، استخدم الدالة Navigate لعرض الصفحة:
كود :
uses
System.IOUtils, Winapi.Windows;
procedure TForm1.FormCreate(Sender: TObject);
var
LocalHTMLPath: string;
begin
// مثال: عرض ملف محلي من مجلد البرنامج
LocalHTMLPath := TPath.Combine(TPath.GetDirectoryName(ParamStr(0)), 'index.html');
// تحويل المسار إلى صيغة URL صحيحة
LocalHTMLPath := 'file:///' + StringReplace(LocalHTMLPath, '\', '/', [rfReplaceAll]);
WebView21.Navigate(LocalHTMLPath);
// أو لعرض رابط إنترنت:
// WebView21.Navigate('https://example.com');
end;
? 3. توزيع WebView2 Runtime على أجهزة المستخدمين
في ويندوز 10/11 الحديث: مثبت مسبقاً تلقائياً عبر Windows Update.
إذا أردت ضمان العمل على جميع الأجهزة أو الأنظمة القديمة:
حمّل WebView2 Bootstrapper من موقع مايكروسوفت وأرفقه مع برنامج التثبيت الخاص بك.
أو استخدم النسخة الثابتة Fixed Version إذا كنت تريد عزل التطبيق عن تحديثات النظام.
? 5. نصائح ذهبية لتجنب المشاكل الشائعة
✅ للملفات المحلية: استخدم دائماً بادئة file:/// وتأكد من صلاحيات القراءة.
✅ تفاعل Delphi ↔ JavaScript: استخدم WebView21.ExecuteScript() وحدث WebMessageReceived لتبادل البيانات بأمان.
✅ معالجة الأخطاء: اربط حدث NavigationCompleted للتحقق من IsSuccess قبل افتراض تحميل الصفحة.
✅ الخصوصية والأمان: عطّل الميزات غير الضرورية مثل AreDefaultScriptDialogsEnabled أو AreHostObjectsAllowed إذا لم تحتاجها.
✅ التخزين المؤقت: TWebView2 يدير الكاش تلقائياً، لكن يمكنك مسحه برمجياً عبر CoreWebView2.Profile.ClearBrowsingDataAsync عند الحاجة.
? مثال سريع للتواصل بين Delphi و JavaScript
كود :
// إرسال قيمة من Delphi إلى الصفحة
WebView21.ExecuteScript('document.getElementById("msg").textContent = "مرحباً من دلفي!";');
// استقبال رسالة من JavaScript
procedure TForm1.WebView21WebMessageReceived(Sender: TObject;
const Args: TWebMessageReceivedEventArgs);
var
JsonMsg: string;
begin
JsonMsg := Args.WebMessageAsJson;
ShowMessage('استلمت من JS: ' + JsonMsg);
end;
وفي كود HTML:
كود :
<button onclick="chrome.webview.postMessage('تم النقر!')">أرسل إلى دلفي</button>