【发布时间】:2016-04-21 12:25:49
【问题描述】:
在 W7 x64 中使用 Delphi Seattle。当使用自定义 VCL 样式并选择大量文件(如 2-3k+)时,文件名已损坏。如果没有自定义样式,这不会发生。
program Project1;
uses
Vcl.Forms,
Unit1 in 'Unit1.pas' {Form1},
Vcl.Themes,
Vcl.Styles;
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
TStyleManager.TrySetStyle('Onyx Blue');
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
procedure TForm1.FormCreate(Sender: TObject);
Var s: string;
ts: TStringList;
begin
if OpenDialog1.Execute then begin
ts := TStringList.Create;
for s in OpenDialog1.Files do
ts.Add(s);
end else Exit;
ts.SaveToFile('z:\files.txt');
ts.Free;
end;
object OpenDialog1: TOpenDialog
Filter = 'Pictures (jpg,png,bmp,gif)|*.jpg;*.png;*.bmp;*.gif|All Files|*.*'
Options = [ofReadOnly, ofAllowMultiSelect, ofEnableSizing, ofForceShowHidden]
Title = 'Select files to upload'
Left = 201
Top = 64
end
就我而言,这段代码仅导致大约 5000 个文件写入日志中的 769 个,并且它们的初始路径“z:”被其他字符“?”损坏
有什么办法解决这个问题?
注意:新的 TFileOpenDialog 似乎没有这个问题,但它确实带来了其他问题,如下所示:(除了是 Vista+)
【问题讨论】:
-
如果您不使用自定义 VCL 样式 - 会有所不同吗?
-
没有自定义样式也能正常工作。
-
我敢打赌,如果没有自定义样式,对话框将进入标准的 Windows Vista+ API 调用路径,并且像
TFileOpenDialog一样设法做到这一点。但是对于非标准的 VCL 样式,它必须覆盖默认的 Windows 样式并落入有限的 pre-Vista 模式。尝试安装 Windows 2000/XP 并尝试那里的程序,即使没有样式。无论如何它可能只适用于 Vista+,所以你没有理由避免使用TFileOpenDialog -
没有自定义样式也能正常工作 - 显然不是,根据@Arioch'The 在下面的答案中发布的 MS 链接。
-
在我的测试中确实如此,也许自该报告以来已修复? (将近 6 岁)
标签: delphi vcl-styles