Delphi 在“打开”对话框中找不到相同的扩展名

Delphi 在“打开”对话框中找不到相同的扩展名,delphi,windows-7,Delphi,Windows 7,为什么有时在“打开”对话框中,我无法在“打开”对话框过滤器上加载相同的文件扩展名,因此我必须先刷新文件才能找到该文件 例如:Filter=*.jpg 我在浏览器打开对话框中找不到文件*.jpg,但是有很多扩展名为*.jpg的图像 这在Win7操作系统[x86和x64]上发生。我使用的编译器版本是Delphi7 procedure TForm1.Button1Click(Sender: TObject); var JpgIF: TJpegImage; BmpIF: TBitmap; beg

为什么有时在“打开”对话框中,我无法在“打开”对话框过滤器上加载相同的文件扩展名,因此我必须先刷新文件才能找到该文件

例如:
Filter=*.jpg

我在浏览器打开对话框中找不到文件
*.jpg
,但是有很多扩展名为
*.jpg
的图像

这在Win7操作系统[x86和x64]上发生。我使用的编译器版本是Delphi7

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;

您需要将Jpeg、GIFImg、PngImage添加到允许读取和写入这些文件类型的用途中。
我忘记了GIFImg和PngImage是否与delphi7一起分发,因此如果这些单元不可用,您需要获得其他单元,以支持您想要打开的文件类型,例如GraphicsEx

如果用户在保存文件时忽略扩展名,则OpenDialog.DefaultExt包含要添加到文件名中的默认扩展名。只能对defaultext属性使用一个扩展名。除非有第三方单位在使用中提供额外的TGraphic文件类型支持(例如GraphicEx或ImageEn),否则只能将具有相应单位的文件类型添加到过滤器中

如果使用第三方单位(如GraphicsEx),则可以将单位支持的文件类型添加到筛选器中。您可以在此处下载GraphicEx:

如果使用ImageEn,则将ImageEnIO添加到uses,然后在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;

否则,如果
else if
。与其创建各种可能的图形类,不如使用
Img1.Picture.LoadFromFile(OD.FileName)
自动确定合适的图形类。我不熟悉你的句子结构。你能用更易读的方式描述一下这个问题吗?例如,你的问题是什么?我添加了对*的支持。psd所以TImage不能这么做。这个我不知道是什么文件在你的电脑上通过同样的东西。MH:Media Fire FS:573KB用Avira扫描,我完全不知道你的问题是什么。如果我像这样添加代码,它是否能正常工作?varⅠ:整数;开始OD.Filter:='jpg |。Jpg | BMP |*。Bmp′;对于I:=0到OD.FilterIndex-1,请从0:OD.DefaultExt:='的情况I开始。Jpg';1:OD.DefaultExt:='*。Bmp′;结束;结束<代码>这是免费的吗?是的,我知道,这只是我错过的人的一部分,当我键入它时,我对我的英语感到抱歉,因为我使用谷歌翻译
Uses GraphicEx;
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;