Delphi 7 OnTypeChange不更新

时间:2012-05-31 19:20:17

标签: delphi delphi-7 topendialog

我使用TOpenDialog允许用户打开3种不同类型的文件。显示初始目录时,它仅列出与所选的当前扩展类型匹配的文件,这是我想要的。但是,当用户选择其他类型之一时,与该类型匹配的文件名永远不会显示。如果我在文件名框中键入* .ext,则显示该扩展名的所有文件名。当用户更改文件类型时,如何获得该结果?

1 个答案:

答案 0 :(得分: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;