CEF4 下載地址:https://github.com/salvadordf/CEF4Delphi
在delphi 10.2.1中,編譯正常,安裝正常。
打開 C++ Builder 10.2.1,表單上丟幾個相關控制元件:
TChromium *chrm1;
TCEFWindowParent *cfwndwprnt1;
編譯,提示“uCEFConstants.hpp”中有錯誤:
static const System::Word WM_POINTERUPDATE = System::Word(0x245);
static const System::Word WM_POINTERDOWN = System::Word(0x246);
static const System::Word WM_POINTERUP = System::Word(0x247);
static const System::Int8 USER_DEFAULT_SCREEN_DPI = System::Int8(0x60);
錯誤內容:[bcc32 Error] uCEFConstants.hpp(519): E2040 Declaration terminated incorrectly
經查,錯誤原因是,這些靜態變數的名稱,已經在“winuser.h”中被定義。。。
以下是“winuser.h”中的定義:
#define WM_POINTERUPDATE 0x0245
#define WM_POINTERDOWN 0x0246
#define WM_POINTERUP 0x0247
#define USER_DEFAULT_SCREEN_DPI 96
這就很尷尬了。。。。
uj5u.com熱心網友回復:
解決方案,直接注釋掉出錯的代碼即可。。。還有就是,CEF4在CB下咋用的。。。我就簡單顯示個頁面都出不來。。。
uj5u.com熱心網友回復:
工程檔案代碼如下:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
#include "uCEFApplication.hpp"
#include "uCEFChromium.hpp"
//---------------------------------------------------------------------------
USEFORM("FormMainUnit.cpp", FormMain);
//---------------------------------------------------------------------------
int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
Ucefapplication::GlobalCEFApp =new TCefApplication();
Ucefapplication::GlobalCEFApp->LogFile = "debug.log";
Ucefapplication::GlobalCEFApp->LogSeverity = LOGSEVERITY_INFO;
Ucefapplication::GlobalCEFApp->Cache = "cache";
Ucefapplication::GlobalCEFApp->EnablePrintPreview = true;
try
{
Application->Initialize();
Application->MainFormOnTaskBar = true;
Application->CreateForm(__classid(TFormMain), &FormMain);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
delete Ucefapplication::GlobalCEFApp;
return 0;
}
//---------------------------------------------------------------------------
表單檔案代碼如下:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "FormMainUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "cefvcl"
#pragma link "uCEFChromiumWindow"
#pragma link "uCEFWinControl"
#pragma link "uCEFChromiumWindow"
#pragma link "uCEFWinControl"
#pragma link "uCEFChromium"
#pragma link "uCEFChromiumCore"
#pragma link "uCEFWindowParent"
#pragma resource "*.dfm"
TFormMain *FormMain;
//---------------------------------------------------------------------------
__fastcall TFormMain::TFormMain(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::btnGOClick(TObject *Sender)
{
chrm1->LoadURL(txtURL->Text);
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::tmr1Timer(TObject *Sender)
{
tmr1->Enabled = false;
bool r=chrm1->CreateBrowser(cfwndwprnt1,"");
if( !r && !chrm1->Initialized )
{
tmr1->Enabled = true;
}
else
{
ShowMessage("Ready!");
}
}
//---------------------------------------------------------------------------
運行結果:
ShowMessage永遠不會彈出,也就是說,初始化始終完成不了
點了按鈕,打開一個頁面,始終打不開。。
debug檔案夾下,已經放入了控制元件運行所需要的庫檔案:
uj5u.com熱心網友回復:
不懂。你那幾行代碼為什么放在winmain里,不放表單建構式里。uj5u.com熱心網友回復:
我也不懂啊。。我照著Delphi的Demo來的啊。。現在可以運行了,也可以瀏覽網頁,但是退出程式的時候,直接報個AV錯誤。。uj5u.com熱心網友回復:
這是論壇里有人貼出的代碼:https://bbs.csdn.net/topics/392343611
uj5u.com熱心網友回復:
我感覺Ucefapplication::GlobalCEFApp =new TCefApplication();
Ucefapplication::GlobalCEFApp->LogFile = "debug.log";
Ucefapplication::GlobalCEFApp->LogSeverity = LOGSEVERITY_INFO;
Ucefapplication::GlobalCEFApp->Cache = "cache";
Ucefapplication::GlobalCEFApp->EnablePrintPreview = true;
應該放在TFormMain::FormCreate中
delete Ucefapplication::GlobalCEFApp;放在TFormMain::FormDestroy中
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/8078.html
標籤:茶館
