-3

[開く] ダイアログで、[開く] ダイアログ フィルターに同じファイル拡張子を読み込めないことがあるため、最初のファイルを更新してファイルを見つける必要があったのはなぜですか。

例えば:Filter = *.jpg

エクスプローラーの開くダイアログでファイルが見つからないのです*.jpgが、拡張子が の画像がたくさんあります*.jpg

これは、Win 7 OS [x86 & x64] で発生します。私が使用しているコンパイラのバージョンは Delphi 7 です。

procedure TForm1.Button1Click(Sender: TObject);
var
  JpgIF: TJpegImage;
  BmpIF: TBitmap;
begin
  JpgIF := TJpegImage.Create;
  BmpIF := TBitmap.Create;
  OD.FileName := '';
  OD.DefaultExt := '*.jpg;*.jpeg;*.psd;*.tga*.png;*.gif;*.bmp';
  OD.Filter := 'JPG|*.jpg|Jpeg|*.jpeg|PSD|*.psd|TGA|*.tga|PNG|*.png|GIF|*.gif|Bmp|*.bmp';
  if not OD.Execute then
    Exit
  else if LowerCase(ExtractFileExt(OD.FileName)) = '.jpg' then
  begin
    JpgIF.LoadFromFile(OD.FileName);
    Img1.Picture.Bitmap.Assign(JpgIF);
  end
  else
  begin
    if LowerCase(ExtractFileExt(OD.FileName)) = '.bmp' then
    begin
      BmpIF.LoadFromFile(OD.FileName);
      Img1.Picture.Bitmap.Assign(BmpIF);
    end;
    //etc...
  end;
  JpgIF.Free;
  BmpIF.Free;
end;
4

1 に答える 1

2

これらのファイル タイプを読み書きできるように、Jpeg、GIFImg、PngImage を追加する必要があります。
GIFImg と PngImage が Delphi 7 で配布されているかどうかを忘れてしまったので、これらのユニットが利用できない場合は、GraphicsEx など、開きたいファイル タイプをサポートする他のユニットを入手する必要があります。

OpenDialog.DefaultExt には、ファイルの保存時にユーザーが拡張子を省略した場合にファイル名に追加するデフォルトの拡張子が含まれています。defaultext プロパティには拡張子を 1 つだけ使用してください。use で追加の TGraphic ファイルタイプのサポートを提供するサードパーティのユニット (GraphicEx や ImageEn など) がない限り、uses で対応するユニットを持つファイル タイプのみをフィルターに追加します。

Uses Jpeg, GIFImg, PngImage;
OD.DefaultExt := 'jpg';
// or
OD.DefaultExt := GraphicExtension(TJpegImage);
OD.Filter := 'JPG|*.jpg|Jpeg|*.jpeg|PNG|*.png|GIF|*.gif|Bmp|*.bmp';

GraphicsEx などのサードパーティの単位が使用されている場合は、サポートされているファイルの種類の単位をフィルターに追加できます。GraphicEx は、http: //www.soft-gems.net/index.php/all-downloadsからダウンロードできます。

Uses GraphicEx;

ImageEn を使用する場合は、ImageEnIO を uses に追加し、ImageEnIO が提供するファイル形式を OnFormCreate に登録し、OnFormDestroy でファイル形式を登録解除します。

Uses ImageEnIO;

procedure TForm1.FormCreate(Sender: TObject);
begin
  { Register ImageEnIO file types to TGraphic }
  ImageEnIO.IERegisterFormats;
  OD.Filter := GraphicFilter(TGraphic);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  { UnRegister ImageENIO file types }
  IEUnRegisterFormats;
end;
于 2013-05-12T16:31:50.203 に答える