当前位置: 首页 > news >正文

Lazarus使用cef打开文件和下载设置

//下载
procedure TForm1.Chromium1BeforeDownload(Sender: TObject;
const browser: ICefBrowser; const downloadItem: ICefDownloadItem;
const suggestedName: ustring; const callback: ICefBeforeDownloadCallback);
begin
callback.Cont(ExtractFilePath(ParamStr(0)) + suggestedName, True);
end;

//打开文件

procedure TForm1.Chromium1FileDialog(Sender: TObject;
const browser: ICefBrowser; mode: TCefFileDialogMode; const title,
defaultFilePath: ustring; const acceptFilters: TStrings;
selectedAcceptFilter: Integer; const callback: ICefFileDialogCallback; out
Result: Boolean);
var
OpenDialog: TOpenDialog;
SaveDialog: TSaveDialog;
FilterStr: string;
I,DialogType: Integer;
filePaths: TStringList;
begin
Result := True;
DialogType := mode - FILE_DIALOG_C;

// 构建过滤器
if acceptFilters.Count > 0 then
begin
FilterStr := '';
for I := 0 to acceptFilters.Count - 1 do
begin
if FilterStr <> '' then
FilterStr := FilterStr + '|';
FilterStr := FilterStr + acceptFilters[I] + ' (' +
acceptFilters[I] + ')|' + acceptFilters[I];
end;
end;

case DialogType of
FILE_DIALOG_OPEN_MULTIPLE, FILE_DIALOG_OPEN:
try
//打开文件对话框
OpenDialog := TOpenDialog.Create(nil);
if title <> '' then
OpenDialog.Title := title;
OpenDialog.Filter := FilterStr;

// 同步到主线程显示对话框
TThread.Synchronize(nil,
procedure
begin
// 禁用多选
if DialogType = FILE_DIALOG_OPEN then
OpenDialog.Options := OpenDialog.Options - [ofAllowMultiSelect];
if OpenDialog.Execute then
begin
FilePaths := TStringList.Create;
try
FilePaths.Add(OpenDialog.FileName);
callback.Cont(selectedAcceptFilter, FilePaths);
finally
FilePaths.Free;
end;
end
else
callback.Cancel;
end);
finally
OpenDialog.Free;
end;
FILE_DIALOG_SAVE:
begin
try
//保存文件对话框
SaveDialog := TSaveDialog.Create(nil);
SaveDialog.FileName := ExtractFileName(defaultFilePath);
if title <> '' then
SaveDialog.Title := title;

SaveDialog.Filter := FilterStr;
// 同步到主线程显示对话框
TThread.Synchronize(nil,
procedure
begin
if SaveDialog.Execute then
begin
FilePaths := TStringList.Create;
try
FilePaths.Add(SaveDialog.FileName);
callback.Cont(selectedAcceptFilter, FilePaths);
finally
FilePaths.Free;
end;
end
else
callback.Cancel;
end);
finally
SaveDialog.Free;
end;
end;
else
begin
WriteLn('不支持对话窗口');
callback.Cancel;
Exit;
end;
end;
end;

 

http://www.jsqmd.com/news/43940/

相关文章:

  • 题解:P14435 [JOISC 2013] 收拾吉祥物 / Mascots
  • Solon AI 开发学习 - 1导引
  • linux c 线程池
  • linux c 文件是否存在
  • 2025 年 11 月滚珠丝杆厂家推荐排行榜,高负载滚珠丝杆,耐磨滚珠丝杆,检测仪器高速滚珠丝杆,螺母滚珠丝杆,医用自动化滚珠丝杆公司推荐
  • Pjudge #21741. 【NOIP Round #5】青鱼和区间 题解
  • 11月18日
  • UE4/UE5反射系统动态注册机制解析 - 实践
  • 完全平方和的推广
  • 三维偏序整体二分?
  • 做题随笔:P3403
  • 2025.11.18
  • 《从纪律委员到AI元人文开放者》
  • MEMS与CMOS的3D集成技术研究进展 - 指南
  • CSS学习笔记(六):CSS预处理器 - 实践
  • 「Solution」AGC008F Black Radius
  • linux c web
  • 2025 年 钢丝网/钢骨架 塑料复合管厂家权威推荐榜/哪家好/有实力/可靠的/排名企业-江苏狼博管道制造有限公司
  • CSS实现修改CheckBox样式
  • 人工智能之编程进阶 Python高级:第二章 面向对象
  • 2025年11月百元吸奶器,静音吸奶器,便携吸奶器品牌测评排名,高性价比选购指南!
  • Q:R2R(Row-to-Row)映射 XML 是数据同步“源表字段→目标表字段” 的转换规则基础教程。
  • 2025年11月免手扶吸奶器,穿戴式吸奶器,百元吸奶器品牌测评排名,清洁便捷优选!
  • 【Azure Developer】解决在中国区 Microsoft Graph 命令Get-MgUserAuthenticationPhoneMethod 不可用的问题
  • 基于Redis的滑动窗口限流-Golang实现
  • 查看laya已经加载的资源
  • ESP32 + LVGL 开发笔记(一):点亮屏幕
  • 聊聊deepseek对latex的辅助
  • 【LVGL】图片部件
  • linux c makefile