使用OpenDialog出现“句柄无效”
因为要频繁地打开文件保存到数据库,所以用久了就会突然显示“句柄无效”,这是什么情况?
procedure Button1Click(Sender: TObject);
var
i : integer;
begin
OpenDialogFilter := '*.jpg|*.jpg';
OpenDialogFileName := '';
OpenDialogExecute;
if OpenDialogFiles.Count = 0 then
exit;
with aqrecordphotos do
begin
for i := 0 to OpenDialogFiles.Count - 1 do
begin
append;
tblobField(findfield('Photo')).LoadFromFile(OpenDialogFiles.Strings[i]);
tblobField(findfield('smallphoto')).LoadFromStream(ZoomJpgFrmFile(OpenDialogFiles.Strings[i]));
post;
end;
end;
end;
function ZoomJpgFrmFile(vFileName: String): TStream;
var
Jpg : TJpegImage;
Bmp : TBitmap;
const
SPercent : single = 0.1;
begin
jpg := TJpegImage.Create;
Bmp := TBitmap.Create;
jpg.loadfromfile(vfilename);
bmp := jpg2bmp(jpg);
if bmp.Width * SPercent <= 100 then
bmp := zoombmp(bmp,100,trunc(100 / bmp.Width * bmp.Height))
else
bmp := zoombmp(bmp,trunc(bmp.Width * spercent),trunc(bmp.Height * spercent));
jpg := bmp2jpg(bmp,100);
result := TMemoryStream.Create;
jpg.SaveToStream(result);
jpg.free;
bmp.Free;
end;
function Jpg2Bmp(Jpg: TJpegImage): TBitmap;
begin
Result := nil;
if Assigned(Jpg) then
begin
Result := TBitmap.Create;
Jpg.DIBNeeded; {Key method...}
Result.Assign(Jpg); {It‖s all folks...}
end;
end;
function ZoomBmp(vImage: TBitmap; dWidth,
dHeight: Integer): TBitmap;
var
ori: TBitmap;
dispositivo_o, dispositivo_d: HDC;
pepito: HBitmap;
begin
ori := Tbitmap.Create;
result := TBItmap.Create;
ori.handle := vImage.handle;
result.width := dWidth;
result.height := dHeight;
dispositivo_o := CreateCompatibleDC(0);
dispositivo_d := CreateCompatibleDC(0);
SelectObject(dispositivo_o, ori.handle);
pepito := SelectObject(dispositivo_d, result.handle);
SetStretchBltMode(dispositivo_d, STRETCH_HALFTONE);
StretchBlt(dispositivo_d, 0, 0, dWidth, dHeight, dispositivo_o, 0, 0, ori.width, ori.height, SRCCOPY);
SelectObject(dispositivo_d, pepito);
ori.Free;
DeleteObject(pepito);
DeleteDC(dispositivo_o);
DeleteDC(dispositivo_d);
end;
function Bmp2Jpg(Bmp: TBitmap; Quality: Integer): TJpegImage;
begin
Result := nil;
if Assigned(Bmp) then
begin
Result := TJpegImage.Create;
Result.Assign(Bmp); {It‖s all folks...}
Result.CompressionQuality := Quality;
Result.JPEGNeeded; {Key method...}
Result.Compress;
end;
end;
...全文
相关推荐
Delphi 判断程序有无响应 附源码
ProcessTimes: FILETIME; ElapsedTime: DWORD;begin // 获取当前系统时间 CurrentTickCount := GetTickCount; // 如果进程句柄无效或已关闭
Delphi XE10.3 Android OpenDialog
《Delphi XE10.3在Android平台上使用OpenDialog组件的详解》Delphi XE10.3是一款强大的跨平台开发工具,允许开发者使用相同的代码库在多个操作系统上构建应用程序,包括Android
JS中window对象的open和openDialog方法使用.pdf
JS中window对象的open和openDialog方法使用.pdf
JS中window对象的open和openDialog方法使用.docx
JS中window对象的open和openDialog方法使用.docx
openDialog.rar
本示例“openDialog.rar”提供的功能是打开文件夹对话框,并在此基础上增加了两个实用特性:一是能够打开指定路径的文件夹,二是能够记住用户上次选择的路径并在下次打开时自动加载。


语言基础/算法/系统设计

