当ListView的ViewStyle属性为vsIcon,当ListView Resize后?其中的内容不能跟着变化,于是执行在Resize事件中执行ListView.Arrange(arAlignLeft),但当移动过ListView中的滚动条后再Reszie的话,就会在ListView上部出现空白区,内容整体向下移动!现在只能每次Reszie后从新生成ListView中的内容!有没有更好的办法解决?先回答这个也行!我觉得用发消息的方法让滚动条还原应该可以!
调试欢乐多
我已经用了Free!我再试试!
搞错了!上面的代码已经不会发生Out of system resources错误!
而是出现当目录中图像教多时,后面图像全部为黑色图像,什么内容也没有!而且放在主线程中执行不会出现这种情况!
而当Bitmap对象在主线程生成,即所有线程共用Bitmap对象时,问题就变为一旦出现黑色无内容图像,后面的图像全部为黑色无内容,哪怕切换了目录,生成其它目录的图像预览!问题好像明了了些!:)
应该多看看资源的问题,free.
try
ImageFileName:=Main.FileList.Items.Strings[i-1];
try
if(LowerCase( ExtractFileExt(ImageFileName))='.jpg') or (LowerCase( ExtractFileExt(ImageFileName))='.jpeg')then
begin
Main.TemJPG.LoadFromFile(ImageFileName);
Main.OriginalBmp.Assign(Main.Temjpg);
end
else if (LowerCase( ExtractFileExt(ImageFileName))='.gif')then
begin
Main.TemGIF.LoadFromFile(ImageFileName);
Main.OriginalBmp.Assign(Main.TemGIF);
end
else if (LowerCase( ExtractFileExt(ImageFileName))='.ico')then
begin
Main.TemICO.LoadFromFile(ImageFileName);
Main.OriginalBmp.Assign(Main.TemICO);
end
else
begin
Main.TemPicture.LoadFromFile(ImageFileName);
Main.OriginalBmp.Assign(Main.TemPicture);
end;
except
Continue;
end;可问题还是没有解决!这些代码不用多线程的话就没有问题!有写过图像缩略图经验的朋友帮帮忙!
try
ImageFileName:=Main.FileList.Items.Strings[i-1];
try
if(LowerCase( ExtractFileExt(ImageFileName))='.jpg') or (LowerCase( ExtractFileExt(ImageFileName))='.jpeg')then
begin
Main.TemJPG.LoadFromFile(ImageFileName);
Main.OriginalBmp.Assign(Main.Temjpg);
end
else if (LowerCase( ExtractFileExt(ImageFileName))='.gif')then
begin
Main.TemGIF.LoadFromFile(ImageFileName);
Main.OriginalBmp.Assign(Main.TemGIF);
end
else if (LowerCase( ExtractFileExt(ImageFileName))='.ico')then
begin
Main.TemICO.LoadFromFile(ImageFileName);
Main.OriginalBmp.Assign(Main.TemICO);
end
else
begin
Main.TemPicture.LoadFromFile(ImageFileName);
Main.OriginalBmp.Assign(Main.TemPicture);
end;
except
Continue;
end;可问题还是没有解决!这些代码不用多线程的话就没有问题!有写过图像缩略图经验的朋友帮帮忙!
* Image组件不是在设计阶段创立,而是动态创立;
* Image组件的height要设置合适值,使它保证能容纳全部课文.为了做到这一点,我在显示文本前,先要对整个课文要扫描一边,统计出所要的实际长度H,然后把 Image 的 height 设置为H, 这样就彻底解决了问题.至于不能看到的内容是在前面(你的情况)还是在后面(我的情况),则和滚动条的位置(position)属性设置有关.若已设置,且为0,就会看到前面的内容.
2.并保证ListView足够长(预先统计出实际需要的长度,再将ListView的height设为此值,应适当留有余地).我以前遇到过类似的问题,靠这样的办法来彻底解决的.
2.并保证ListView足够长(预先统计出实际需要的长度,再将ListView的height设为此值,应适当留有余地).我以前遇到过类似的问题,靠这样的办法来彻底解决的.
在所有图像的画布操作前加Canvas.Lock;,记得UnLock!^_^不过Out of system resources是确实是由于在循环内创建图像找成的!移到循环外Create就可以解决!至于原因?以前讨论过可惜没结果!其实解决也是偶然的!一次测试中,原来的黑色方块变为灰色!只用下面语句进行过这操作!
TBmp.Canvas.Brush.Color :=clBtnFace;
于是判定问题出在画布操作附近!抱着试试看锁定下画布,居然搞定了!但还是感觉很奇怪!用了这类语句(if not Main.HavePic then Break;)跳出循环啊!照理说当路径变化后,前面的线程回判断并自动终止!奇怪?
而且线程数确实也减少了!
不过,如果有两个线程操作过画布后,Bitmap对象好像就不能在使用了!奇怪?再想想吧!^_^集中经历解决第二个问题!有位朋友告诉我个改变Height的方法,可惜不好用!还是考虑下如何操作ListView中的滚动条好了!