秋·风

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  278 随笔 :: 0 文章 :: 308 评论 :: 20万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

CEF4Delphi for lazarus在gtk3可以输入中文:
2025-01-02:
CEF 131最新版本不用按以下方法修改就可以使用。

测试环境:
树莓派5(aarch64)
CEF4Delphi-104.0.5112.102
lazarus 4.0RC1  fpc 3.3.1
1)系统安装gtk3:

sudo apt install libgtk-3-dev

2)修改cef源码
打开uCEFLinuxFunctions.pas
将 Gdk3_library改为ibgtk-3.so.0(红色代码部分)

复制代码
function gdk_screen_width:gint; cdecl; external 'libgdk-3.so';
function gdk_screen_width_mm:gint; cdecl; external 'libgdk-3.so';
function gdk_screen_get_default:PGdkScreen; cdecl; external 'libgdk-3.so';
function gdk_screen_get_resolution(screen:PGdkScreen):gdouble; cdecl; external 'libgdk-3.so';
{$ENDIF}
{$IFDEF FPC}
{$IFDEF LCLGTK3}
function gdk_x11_window_get_xid(window: PGdkWindow): TWindow; cdecl; external 'libgtk-3.so.0';
function gdk_x11_get_default_xdisplay: PDisplay; cdecl; external 'libgtk-3.so.0';
procedure gdk_set_allowed_backends(const backends: PGchar); cdecl; external 'libgtk-3.so.0';
{$ENDIF}
procedure ShowX11Message(const aMessage : string);
{$ENDIF}{$ENDIF}

implementation

uses
  {$IFDEF DELPHI16_UP}
  System.SysUtils,
复制代码

找到GetCefStateModifiers,按下面代码修改:

复制代码
function GetCefStateModifiers(state : uint32) : integer;
begin
  Result := EVENTFLAG_NONE;

  if ((uint32(state) and uint32(GDK_SHIFT_MASK)) <> 0) then
    Result := Result or EVENTFLAG_SHIFT_DOWN;

  if ((uint32(state) and uint32(GDK_LOCK_MASK)) <> 0) then
    Result := Result or EVENTFLAG_CAPS_LOCK_ON;

  if ((uint32(state) and uint32(GDK_CONTROL_MASK)) <> 0) then
    Result := Result or EVENTFLAG_CONTROL_DOWN;

  if ((uint32(state) and uint32(GDK_MOD1_MASK)) <> 0) then
    Result := Result or EVENTFLAG_ALT_DOWN;

  if ((uint32(state) and uint32(GDK_BUTTON1_MASK)) <> 0) then
    Result := Result or EVENTFLAG_LEFT_MOUSE_BUTTON;

  if ((uint32(state) and uint32(GDK_BUTTON2_MASK)) <> 0) then
    Result := Result or EVENTFLAG_MIDDLE_MOUSE_BUTTON;

  if ((uint32(state) and uint32(GDK_BUTTON3_MASK)) <> 0) then
    Result := Result or EVENTFLAG_RIGHT_MOUSE_BUTTON;
end;
复制代码

重新编译cef4delphi_lazarus.lpk
3)设置CEF应用为GTK3

 然后重新编译CEF应用就可以。

这篇博客就是用CEF4Delphi自带的demo--TinyBrowser2编辑的。

 

posted on   秋·风  阅读(164)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示