- برای اینکار، لازمه که Event خودمون رو در قالب یک کلاس تعریف کنیم. به شکل زیر:
TEventManager = class(TObject)
public
procedure MyEvent(x : Integer);
end;
همونطور که مشخصه قراره که رویداد MyEvent فراخوانی بشه و پارامتر x رو همراه خودش بیاره!
- در مرحله بعد کلاس زیر رو با ارث بری از یکی از کلاسهای CEF تعریف می کنیم:
TCustomRenderProcessHandler = class(TCefRenderProcessHandlerOwn)
protected
procedure OnWebKitInitialized; override;
end;
- حالا یک متغیر از کلاس TEventManager به اسم EventManager بصورت Global تعریف می کنیم.
- لازمه که تو بخش Initialization متغیرهای زیر رو Create کنیم. (دقت کنید که تو FormCreate جواب نمیده!)
CefRenderProcessHandler := TCustomRenderProcessHandler.Create;
EventManager := TEventManager.Create;
متغیر CefRenderProcessHandler داخل یونیت ceflib خود کامپوننت تعریف شده و ما اینجا با استفاده از یک کلاس مشتق شده، اون رو Create می کنیم.
- حالا باید برای تابع OnWebKitInitialized کد بنویسیم:
procedure TCustomRenderProcessHandler.OnWebKitInitialized;
begin
TCefRTTIExtension.Register('returnvalue', ReturnValue);
end;
با اینکار با استفاده از پارامتر returnvalue تعریف شده با تابع Register میتونیم از سمت JS رویداد MyEvent رو فراخوانی کنیم.
به این صورت:
- کد زیر رو داخل یک فایل html ذخیره می کنیم.
<script language="javascript">
function sum_event(par1,par2)
{
eventmanager.MyEvent(par1+par2);
}
</script>
<html>
<body>
</body>
</html>
همونطور که دیده میشه پارامترهای ورودی تابع sum_event با هم جمع می شن و با استفاده از متغیر eventmanager که قبلا تعریف کرده بودیم، رویداد MyEvent فراخوانی میشه.
- برای تست میشه تابع sum_event رو داخل تگ Body فراخوانی کرد و صفحه Html مذکور رو تو CEF باز کرد. برای کامل تر شدن این مثال سعی می کنیم که فراخوانی تابع Sum_event رو از Delphi انجام بدیم.
- ابتدا با دستور زیر صفحه رو روی Chromium باز می کنیم:
Chromium1.Browser.MainFrame.LoadUrl(edAddress.Text );
edAddres.text حاوی آدرس فایل html هستش.
- سپس با دستور زیر تابع sum_event رو اجرا می کنیم:
Chromium1.Browser.MainFrame.ExecuteJavaScript('sum _event(5,6)','',0);
اگر برای MyEvent تو سمت دلفی کد نوشته باشیم، با اجرای خط فوق اون Event فراخوانی میشه.