Delphi 7 OnTypeChange не обновляется

Я использую TOpenDialog, чтобы позволить пользователю открывать 3 разных типа файлов. При отображении исходного каталога в нем отображаются только те файлы, которые соответствуют текущему выбранному типу расширения, что мне и нужно. Однако, когда пользователь выбирает один из других типов, имена файлов, соответствующие этому типу, никогда не отображаются. Если я введу *.ext в поле имени файла, то отобразятся все имена этого расширения. Как я могу получить такой результат, когда пользователь меняет тип файла?

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;
Другие вопросы по тегам