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;