Delphi 12.3 FMX Linux下获取TWebBrowser内容为位图的解决方案求助
Delphi 12.3 FMX Linux下获取TWebBrowser内容为位图的解决方案求助
我最近在Delphi 12.3 + FMX Linux 1.78(目标Ubuntu平台)上卡了个棘手的问题,想把TWebBrowser的内容导出成位图,试了各种官方方法都没用,甚至ChatGPT和Gemini也没能给出能正常运行的示例,只能来这儿求助各位大佬了!
先说说我的场景和遇到的坑:
- 首先,FMX Linux下的TWebBrowser、TMediaPlayer这类控件好像是脱离FMX自身渲染体系的,导致没法在它们上面叠加TMultiView侧边栏、TListBox弹出菜单这类控件。我本来想了个折中方案:在需要叠加控件的时候,先把WebBrowser的内容转成位图当背景,这个在Windows上跑起来没问题,但到了Linux上直接歇菜。
- 官方提供的
TWebBrowser.MakeScreenshot在Linux上完全没反应,CaptureBitmap直接返回nil——我翻了FMX.WebBrowser.Linux的源码,发现这个方法根本就没实现! - 我试着想直接操作GTK的底层对象来截图,但第一步就卡壳了:完全拿不到TWebBrowser对应的内部GTK对象的句柄或指针,根本不知道从哪入手。
我的测试窗体很简单:TfrmMain里只放了TWebBrowser、TImage(用来显示WebBrowser的位图副本)、两个测试按钮,还有一个TEdit用来显示结果提示。以下是我的测试代码:
// TfrmMain contains just a TWebBrowser and a TImage // 2 Buttons and a TEdit for result messages procedure TfrmMain.cmdMethodCaptureBitmapClick(Sender: TObject); begin var MyImage:=WebBrowser1.CaptureBitmap; if not Assigned(MyImage) then begin // on Linux, we get here txtMessage.Text:='CaptureBitmap returned nil'; Exit; end; var sFmt:='CaptureBitmap returned %d x %d bitmap'; txtMessage.Text:=Format(sFmt,[MyImage.Size.cx,MyImage.Size.cy]); imgCopyOfBrowser.Bitmap:=MyImage; MyImage.Free; end; procedure TfrmMain.cmdMethodMakeScreenshotClick(Sender: TObject); begin var MyImage:=WebBrowser1.MakeScreenshot; if not Assigned(MyImage) then begin txtMessage.Text:='MakeScreenshot returned nil'; Exit; end; var sFmt:='MakeScreenshot returned %d x %d bitmap'; txtMessage.Text:=Format(sFmt,[MyImage.Size.cx,MyImage.Size.cy]); imgCopyOfBrowser.Bitmap:=MyImage; MyImage.Free; // on Linux, we get here, but imgCopyOfBrowser is empty / white end; procedure TfrmMain.FormCreate(Sender: TObject); begin var slHTML:=TStringList.Create; try slHTML.Add('<h2>Embedded Browser Demo</h2><p>This is HTML text rendered within a <strong>TWebBrowser</strong> FMX control.</p>'); WebBrowser1.LoadFromStrings(slHTML.Text,TEncoding.ANSI,'about:blank'); finally slHTML.Free; end; end;
在Linux上运行时:
- 点击调用
CaptureBitmap的按钮,直接返回nil,提示框显示CaptureBitmap returned nil - 点击调用
MakeScreenshot的按钮,虽然能拿到一个位图对象,但显示在TImage里是全白的空图
所以想请教各位:
- 有没有人有能正常运行的示例代码,能在FMX Linux上把TWebBrowser的内容正确转成位图?
- 或者有没有关于FMX Linux底层GTK操作的文档资源可以参考?
内容来源于stack exchange
相关产品推荐
相关产品推荐

