我有TFileOpenDialog
个OnSelectionChange
事件,试图根据选择采取某些行动。每次更改shell视图框中的选定项时,它都会触发,但FileName
属性似乎始终包含最近选择的文件的名称。
如果您选择文件夹,则FileName
属性不会更新。我知道这是因为文件夹不是文件。
显然FileName
是错误的。显然,那里有一些东西可以知道当前实际选择了什么。我该如何实现?
答案 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;