0

我使用带有 TNT 控件的 Delphi7。有没有办法在 Win7 上调用现代打开/保存对话框?也许是 VCL 的补丁,TNT 的补丁?TNT 补丁是首选,因为我需要 Unicode 感知对话框,但也可能需要(更少)VCL 补丁。

4

1 回答 1

3

GetOpenFileName可能最简单的方法是直接调用 API 函数GetSaveFileName。除非您使用一些更深奥的功能,否则这些将在 Vista 及更高版本上显示现代对话框。

显然,您需要调用 W 变体,并传递结构的 W 版本。

这是我可以构建的最简单的示例:

var
  ofn: TOpenFilenameW;
  FileName: array [0..MAX_PATH-1] of WideChar;
begin
  FillChar(ofn, SizeOf(ofn), 0);
  ofn.lStructSize := SizeOf(ofn);
  ofn.hWndOwner := Handle;
  ofn.lpstrFilter := 'All files'#0'*.*'#0;
  FileName[0] := #0;
  ofn.lpstrFile := @FileName;
  ofn.nMaxFile := Length(FileName);
  ofn.lpstrTitle := 'Select File';
  if GetOpenFileNameW(ofn) then
    MessageBoxW(Handle, FileName, nil, MB_OK);
end;

当然,您可以扩展它以具有更多功能。

于 2013-05-16T18:16:25.430 回答