-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 属性使用一个扩展名。仅将文件类型添加到在使用中具有相应单元的过滤器,除非有第三方单元在使用中提供额外的 TGraphic 文件类型支持(例如,GraphicEx 或 ImageEn)。

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 添加到使用中,然后在 OnFormCreate 中注册 ImageEnIO 提供的文件格式,并在 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 回答