基於OpenCV的視訊影象組態 (10): CEF瀏覽器與圖形軟體互嵌
開發者工具
CEF核心很強大,已經提供相當多的功能。
比如開發者工具,呼叫是如此的簡單。
稍微包裝一下,宣告一個屬性
__property bool ShowDevTool = { read = GetDevToolVisible, write = SetDevToolVisible }; bool __fastcall GetDevToolVisible(); void __fastcall SetDevToolVisible(bool value); bool __fastcall TCbwChromiumExplorer::GetDevToolVisible() { bool result = false; if(DevTools) result = DevTools->Visible; return result; } void __fastcall TCbwChromiumExplorer::SetDevToolVisible(bool visible) { if(!DevTools || !FBrowserParent) return; DevTools->Visible = visible; DevTools->Width = FBrowserParent->Width / 4; if(visible) Chromium->ShowDevTools(TPoint(0x80000000, 0x80000000), DevTools); else Chromium->CloseDevTools(DevTools); if(FSelfDevToolsFlag) OnResize(FBrowserParent); }
則呼叫的時候,直接切換該屬性值即可。
GlobalChromiumExplorer->ShowDevTool = !GlobalChromiumExplorer->ShowDevTool;
實現效果
與已有視窗互嵌
研究一下程式碼,可片面得出結論:CEF可以與視窗控制代碼很好地整合。
拿以前編的圖形軟體來說事,之前如果要整合,需要把圖形軟體實現為OCX,然後在網頁中呼叫。現在自己已經可以實現瀏覽器了,那就用另外一種方式進行整合 à 把目標視窗嵌入到CEF的控制代碼中。
先實現功能看看效果,用硬編碼方式來處理:
GlobalChromiumExplorer->BrowserParent = FCurrentForm->Panel_Child;
FCurrentForm->ScrollBox->BringToFront();
FCurrentForm->ScrollBox->Align = alNone;
FCurrentForm->ScrollBox->Top = 430;
FCurrentForm->ScrollBox->Left = 270;
FCurrentForm->ScrollBox->Width = 1050;
FCurrentForm->ScrollBox->Height = 350;
演示效果
[注:如果圖片不能顯示,可到點選開啟連結部落格園檢視,或者直接顯示動畫圖片]
後續通過CEF訪問取得網頁中目標元素的位置與大小,然後將目標視窗嵌入到指定位置,即可實現已有視窗介面與網頁之間的完美整合。