我正在使用 TOpenDialog 来允许用户打开 3 种不同类型的文件。当显示初始目录时,它只列出与当前选择的扩展类型匹配的文件,这是我想要的。但是,当用户选择其他类型之一时,与该类型匹配的文件名永远不会出现。如果我在文件名框中键入 *.ext,那么该扩展名的所有文件名都会显示。当用户更改文件类型时,如何获得该结果?
问问题
503 次
1 回答
1
如果在编辑框中输入了通配符掩码,则对话框仅显示与该掩码匹配的文件,无论在下拉列表中选择了哪种文件类型。当用户从列表中选择不同的文件类型时,掩码不会自动更新为新的文件扩展名。您必须在OnTypeChange
事件中手动执行此操作,例如:
uses
..., Dlgs, Commdlg;
procedure TForm1.OpenDialog1TypeChange(Sender: TObject);
const
Extensions : array[1..4] of PChar = ('', 'ext1', 'ext2', 'ext3');
var
s : String;
i : Integer;
begin
OpenDialog1.DefaultExt := Extensions[OpenDialog1.FilterIndex];
if OpenDialog1.FilterIndex = 1 then Exit;
i := SendMessage(GetParent(OpenDialog1.Handle), CDM_GETSPEC, 0, 0);
if i > 1 then
begin
SetLength(s, i-1);
SendMessage(GetParent(OpenDialog1.Handle), CDM_GETSPEC, i, LPARAM(PChar(s)));
s := ChangeFileExt(s, '.' + Extensions[OpenDialog1.FilterIndex]);
SendMessage(GetParent(OpenDialog1.Handle), CDM_SETCONTROLTEXT, edt1, LPARAM(PChar(s)));
end;
end;
于 2012-05-31T20:55:43.483 回答