当前位置: 首页 > 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.rkmt.cn/news/53481.html

相关文章:

  • Pjudge #21741. 【NOIP Round #5】青鱼和区间 题解
  • 完全平方和的推广
  • 2025.11.18
  • CSS学习笔记(六):CSS预处理器 - 实践
  • linux c web
  • 2025年11月免手扶吸奶器,穿戴式吸奶器,百元吸奶器品牌测评排名,清洁便捷优选!
  • 基于Redis的滑动窗口限流-Golang实现
  • 实用指南:《中国电力产业数字化》深度解析与前沿展望(下)——中国电力数字化转型路线图:SPARK 融合平台的设计与落地方案
  • Mac 怎么安装 PyCharm 2020.1.dmg?超简单教程(附安装包)
  • C# 蓝牙远程控制应用:从零达成移动设备与硬件的无线交互
  • AI热潮下的冷思考:从估值泡沫到就业现实
  • 杨辉三角形
  • 20232305 2025-2026-1 《网络与系统攻防技术》实验六实验报告
  • 春秋云境Apache OFBiz 目录遍历致代码执行漏洞 CVE-2024-36104
  • 在 Ubuntu 20.04 上安装 gcc/g++ 11,并使用 update-alternatives 管理多个版本。
  • Doris学习笔记
  • Spring AI Alibaba 项目源码学习(十一)-Hook
  • ftp,sftp,scp,tftp几种简单对比,以及python实现ftp功能
  • 实用指南:深入解析音频编解码器(Audio CODEC):硬件、接口与驱动开发
  • linux burpsuite
  • DS trick record 1
  • 2025年11月成都合同律师,成都律师,成都婚姻律师事务所推荐,资深经验与品牌保障口碑之选!
  • (CF2166) Codeforces Round 1064 (Div. 2)
  • 详细介绍:【C++庖丁解牛】哈希表/散列表的设计原理 | 哈希函数
  • 【LVGL】线条部件
  • 2025年11月新疆电力电缆,高压电缆,特种电缆厂家权威推荐,低损耗稳定性强的行业优选线缆!
  • ReSharper 2025 破解
  • 银河麒麟v10批量部署Python Flask任务小白教程
  • 信息论(七):对数似然比与相对熵(KL散度)
  • 纯CSS实现多种背景图案:渐变条纹、蓝图网格、波点与棋盘效果全解析(附 Sass Mixin 封装) - 指南