2012-05-31 5 views
0

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

ответ

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; 
+0

Спасибо. Однако delphi не распознает константы CDM_GETSPEC или CDM_SETCONTROLTEXT. Где они расположены? – user1429254

+0

Блок 'Commdlg'. Я обновил свой ответ. –

+0

Что такое edt1. Спасибо за помощь. – user1429254