为什么有时在“打开”对话框中我无法在“打开”对话框过滤器上加载相同的文件扩展名,因此我必须刷新第一个以查找文件。
例如:Filter = *.jpg
我在“资源管理器打开”对话框中找不到文件*.jpg
,但有很多图片的扩展名为*.jpg
。
这发生在Win 7 OS [x86& 64]。我使用的编译器版本是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;
答案 0 :(得分:1)
您需要将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;