0

TOpenDialog を使用して、ユーザーが 3 種類のファイルを開くことができるようにしています。初期ディレクトリを表示すると、選択した現在の拡張子タイプに一致するファイルのみが一覧表示されます。ただし、ユーザーが他のタイプのいずれかを選択すると、そのタイプに一致するファイル名は表示されません。ファイル名ボックスに *.ext と入力すると、その拡張子のすべてのファイル名が表示されます。ユーザーがファイルタイプを変更したときに、どうすればその結果を得ることができますか?

4

1 に答える 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 に答える