朋友都来看一下!

ehom 2002-07-18 10:52:12
Out of system resources是什么错误!(它出现在我的一段多线程生成目录预览的程序里)]

代码:
procedure ThrdSee.PTem;
begin
if n=1 then Main.ImgList.Clear;
Main.LV_File.Items[n-1].ImageIndex:=Main.ImgList.Add(TBmp,nil);
end;
procedure ThrdSee.Execute;
var
i:integer;
TBmpLeft:integer;
TBmpTop:integer;
TBmpHeight:integer;
TBmpWidth:integer;
OBmp:TBitmap;
TemJPG:TJPEGImage;
TemICO:TIcon;
TemGIF:TGIFImage;
begin
if Main.HavePic then
begin
FreeOnTerminate:=True;
For i:=1 to Main.FileList.Items.Count do
begin
n:=i;
if Terminated then Break;
Synchronize(LShow);
end;
end
else
begin
Main.HavePic:=True;
FreeOnTerminate:=True;
TBmp:=TBitmap.Create;
TBmp.Height:=80;
TBmp.Width:=80;
OBmp:=TBitmap.Create;
For i:=1 to Main.FileList.Items.Count do
begin
if not Main.HavePic then Break;
if Terminated then continue;
n:=i;
try
ImageFileName:=Main.FileList.Items.Strings[i-1];
Main.TemImg.Picture.LoadFromFile(ImgFileName);
if(LowerCase( ExtractFileExt(ImgFileName))='.jpg') or (LowerCase( ExtractFileExt(ImgName))='.jpeg')then
begin
Temjpg:=TJPEGImage.Create;
Temjpg.Assign(Main.TemImg.Picture);
OriginalBmp.Assign(Temjpg);
Temjpg.Free;
Temjpg:=nil;
end
else if (LowerCase( ExtractFileExt(ImageFileName))='.gif')then
begin
TemGIF:=TGifImage.Create;
TemGIF.Assign(Main.TemImg.Picture);
OriginalBmp.Assign(TemGIF);
TemGIF.Free;
TemGIF:=nil;
end
else
begin
OBmp.Assign(Main.TemImg.Picture);
end;
if OBmp.Height>=OriginalBmp.Width then
begin
TBmpWidth:=64*OBmp.Width div OBmp.Height;
TBmpLeft:=(64-TBmpWidth ) div 2;
TBmp.Canvas.Brush.Color :=clBtnFace;
TBmp.Canvas.FillRect(TBmp.Canvas.ClipRect);
TBmp.Canvas.StretchDraw(Rect(8+TBmpLeft,8,8+TBmpLeft+TBmpWidth,71),OBmp);
end
else
begin
TBmpHeight:=64*OBmp.Height div OBmp.Width;
TBmpTop:=(64-TBmpHeight ) div 2;
TBmp.Canvas.Brush.Color :=clBtnFace;
TBmp.Canvas.FillRect(TBmp.Canvas.ClipRect);
TBmp.Canvas.StretchDraw(Rect(8,8+TBmpTop,71,8+TBmpTop+TBmpHeight),OBmp);
end;
Synchronize(PTem);//这里报错
except
continue;
end;
end;
OBmp.Free;
OBmp:=nil;
TBmp.Free;
TBmp:=nil;
end;
end;

帮忙分析一下!谢谢!

当ListView的ViewStyle属性为vsIcon,当ListView Resize后?其中的内容不能跟着变化,于是执行在Resize事件中执行ListView.Arrange(arAlignLeft),但当移动过ListView中的滚动条后再Reszie的话,就会在ListView上部出现空白区,内容整体向下移动!现在只能每次Reszie后从新生成ListView中的内容!有没有更好的办法解决?
...全文
84 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
TheTop 2002-07-31
  • 打赏
  • 举报
回复
?
cgh1970 2002-07-23
  • 打赏
  • 举报
回复
up
xuxiangood 2002-07-23
  • 打赏
  • 举报
回复
up
zzwu 2002-07-22
  • 打赏
  • 举报
回复
提议:

1.用动态方法创建ListView;
2.并保证ListView足够长(预先统计出实际需要的长度,再将ListView的height设为此值,应适当留有余地).

我以前遇到过类似的问题,靠这样的办法来彻底解决的.
zzwu 2002-07-22
  • 打赏
  • 举报
回复
提议:

1.用动态方法创建ListView;
2.并保证ListView足够长(预先统计出实际需要的长度,再将ListView的height设为此值,应适当留有余地).

我以前遇到过类似的问题,靠这样的办法来彻底解决的.
zzwu 2002-07-22
  • 打赏
  • 举报
回复
我以前在开发一个课件时遇到过类似的问题.

我是在scrollbox中加image组件,再在image中写入文本并加插图. 由于要写的文本和插图是长短不同的课文(从文件载入),对于小的课文都能很好显示,但很长的课文就不行了,尽管scrollbox还能滚动,文字或图像恰不能显示出来.

我后来采用这样的办法解决了问题:
* Image组件不是在设计阶段创立,而是动态创立;
* Image组件的height要设置合适值,使它保证能容纳全部课文.

为了做到这一点,我在显示文本前,先要对整个课文要扫描一边,统计出所要的实际长度H,然后把 Image 的 height 设置为H, 这样就彻底解决了问题.

至于不能看到的内容是在前面(你的情况)还是在后面(我的情况),则和滚动条的位置(position)属性设置有关.若已设置,且为0,就会看到前面的内容.

tangss 2002-07-22
  • 打赏
  • 举报
回复
帮你顶一下!
qiqi97 2002-07-22
  • 打赏
  • 举报
回复
是否释放了??
ehom 2002-07-22
  • 打赏
  • 举报
回复
第一个问题基本解决了!但可惜啊!上面的朋友都没说对原因!
在所有图像的画布操作前加Canvas.Lock;,记得UnLock!^_^

不过Out of system resources是确实是由于在循环内创建图像找成的!移到循环外Create就可以解决!至于原因?以前讨论过可惜没结果!

其实解决也是偶然的!一次测试中,原来的黑色方块变为灰色!只用下面语句进行过这操作!
TBmp.Canvas.Brush.Color :=clBtnFace;
于是判定问题出在画布操作附近!抱着试试看锁定下画布,居然搞定了!

但还是感觉很奇怪!用了这类语句(if not Main.HavePic then Break;)跳出循环啊!照理说当路径变化后,前面的线程回判断并自动终止!奇怪?
而且线程数确实也减少了!
不过,如果有两个线程操作过画布后,Bitmap对象好像就不能在使用了!奇怪?

再想想吧!^_^

集中经历解决第二个问题!有位朋友告诉我个改变Height的方法,可惜不好用!还是考虑下如何操作ListView中的滚动条好了!
lyfzjl 2002-07-22
  • 打赏
  • 举报
回复
关注之中。
shine_yzl 2002-07-21
  • 打赏
  • 举报
回复
up ● ●) ● ● ) \●/
<┃> (┃ (┃) () ┃┃
 /\ / ) (\ / ) / \
=左三圈,右三圈,脖子扭扭,屁股扭扭,你就不会老 :)
talisman 2002-07-21
  • 打赏
  • 举报
回复
up
delphimm 2002-07-21
  • 打赏
  • 举报
回复
up ● ●) ● ● ) \●/
<┃> (┃ (┃) () ┃┃
 /\ / ) (\ / ) / \
=左三圈,右三圈,脖子扭扭,屁股扭扭,你就不会老 :)



ehom 2002-07-20
  • 打赏
  • 举报
回复
不会吧!又要改放分?我怕版主扣我分!^_^(其实它们自己也喜欢在技术区灌水)
winder_008 2002-07-20
  • 打赏
  • 举报
回复
即然进来了,
可我又不会,
我就给你UP一下吧.....

*_*
xiaoxingchi 2002-07-20
  • 打赏
  • 举报
回复
UP
TheTop 2002-07-20
  • 打赏
  • 举报
回复
你创建的东西太多而没释放,GDI不
Bird1945 2002-07-20
  • 打赏
  • 举报
回复
即然进来了,
可我又不会,
我就给你UP一下吧.....

*_*
ehom 2002-07-20
  • 打赏
  • 举报
回复
绝对释放了,看来要换种方式了!看看第二个问题!怎么解决?
ehom 2002-07-19
  • 打赏
  • 举报
回复
用Bitmap.FreeImage?还是不行!
搞错了!上面的代码已经不会发生Out of system resources错误!
而是出现当目录中图像教多时,后面图像全部为黑色图像,什么内容也没有!

而且放在主线程中执行不会出现这种情况!
加载更多回复(19)

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧