如何在Custom FileDialog中获取当前选择?

时间:2014-01-29 19:37:36

标签: delphi

我有TFileOpenDialogOnSelectionChange事件,试图根据选择采取某些行动。每次更改shell视图框中的选定项时,它都会触发,但FileName属性似乎始终包含最近选择的文件的名称。

如果您选择文件夹,则FileName属性不会更新。我知道这是因为文件夹不是文件。

显然FileName是错误的。显然,那里有一些东西可以知道当前实际选择了什么。我该如何实现?

2 个答案:

答案 0 :(得分:3)

procedure TMyForm.DialogBoxSelectionChange(Sender: TObject);
var
  HRes: HRESULT;
  Attr: DWORD;
begin
  if DialogBox.ShellItem <> nil then
  begin
    HRes := DialogBox.ShellItem.GetAttributes(SFGAO_FILESYSTEM or SFGAO_FOLDER, Attr);
    if Succeeded(HRes) then
    begin
      if (Attr and SFGAO_FOLDER) = 0 then
      begin
        // must be a file, display info as needed
        Exit;
      end;
    end;
  end;
  // clear info as needed...
end;

答案 1 :(得分:0)

我设法搞清楚了。

var
  item: IShellItem;
  filename: PChar;
begin
  DialogBox.Dialog.GetCurrentSelection(item);
  if item = nil then
  begin
    //nothing is selected; handle appropriately
  end
  else begin
    item.GetDisplayName(SIGDN_FILESYSPATH, filename);
    //handle appropriately
  end;
end;