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编辑的。


浙公网安备 33010602011771号