当ListView的ViewStyle属性为vsIcon,当ListView Resize后?其中的内容不能跟着变化,于是执行在Resize事件中执行ListView.Arrange(arAlignLeft),但当移动过ListView中的滚动条后再Reszie的话,就会在ListView上部出现空白区,内容整体向下移动!现在只能每次Reszie后从新生成ListView中的内容!有没有更好的办法解决?先回答这个也行!我觉得用发消息的方法让滚动条还原应该可以!

解决方案 »

  1.   

    GDI资源不够用,关掉不用显示的图片.
      

  2.   

    呵呵!谢谢告诉原因!
    我已经用了Free!我再试试!
      

  3.   

    用Bitmap.FreeImage?还是不行!
    搞错了!上面的代码已经不会发生Out of system resources错误!
    而是出现当目录中图像教多时,后面图像全部为黑色图像,什么内容也没有!而且放在主线程中执行不会出现这种情况!
      

  4.   

    按上面的程序,当目录中图像教多时,后面图像全部为黑色图像,什么内容也没有!
    而当Bitmap对象在主线程生成,即所有线程共用Bitmap对象时,问题就变为一旦出现黑色无内容图像,后面的图像全部为黑色无内容,哪怕切换了目录,生成其它目录的图像预览!问题好像明了了些!:)
      

  5.   


    应该多看看资源的问题,free.
      

  6.   

    现在把所有的TJPGImage,TGifImage全部在主线程序中生成(以前在线程中定义),所有线程共用!改成
      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;可问题还是没有解决!这些代码不用多线程的话就没有问题!有写过图像缩略图经验的朋友帮帮忙!
      

  7.   

    现在把所有的TJPGImage,TGifImage全部在主线程序中生成(以前在线程中定义),所有线程共用!改成
      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;可问题还是没有解决!这些代码不用多线程的话就没有问题!有写过图像缩略图经验的朋友帮帮忙!
      

  8.   

    还不清楚可以看看这幅抓图!选中图像的后面全是黑色无内容!且再打开其它目录后,全部图像预览都为黑色无内容!http://www.ehomsoft.com/temp.jpg或者那为朋友有这方面的代码可以参考一下!谢谢!
      

  9.   

    你创建的东西太多而没释放,GDI不
      

  10.   

    我以前在开发一个课件时遇到过类似的问题.我是在scrollbox中加image组件,再在image中写入文本并加插图. 由于要写的文本和插图是长短不同的课文(从文件载入),对于小的课文都能很好显示,但很长的课文就不行了,尽管scrollbox还能滚动,文字或图像恰不能显示出来.我后来采用这样的办法解决了问题: 
    * Image组件不是在设计阶段创立,而是动态创立;
    * Image组件的height要设置合适值,使它保证能容纳全部课文.为了做到这一点,我在显示文本前,先要对整个课文要扫描一边,统计出所要的实际长度H,然后把 Image 的 height 设置为H, 这样就彻底解决了问题.至于不能看到的内容是在前面(你的情况)还是在后面(我的情况),则和滚动条的位置(position)属性设置有关.若已设置,且为0,就会看到前面的内容.
      

  11.   

    提议:1.用动态方法创建ListView;
    2.并保证ListView足够长(预先统计出实际需要的长度,再将ListView的height设为此值,应适当留有余地).我以前遇到过类似的问题,靠这样的办法来彻底解决的.
      

  12.   

    提议:1.用动态方法创建ListView;
    2.并保证ListView足够长(预先统计出实际需要的长度,再将ListView的height设为此值,应适当留有余地).我以前遇到过类似的问题,靠这样的办法来彻底解决的.
      

  13.   

    第一个问题基本解决了!但可惜啊!上面的朋友都没说对原因!
    在所有图像的画布操作前加Canvas.Lock;,记得UnLock!^_^不过Out of system resources是确实是由于在循环内创建图像找成的!移到循环外Create就可以解决!至于原因?以前讨论过可惜没结果!其实解决也是偶然的!一次测试中,原来的黑色方块变为灰色!只用下面语句进行过这操作!
    TBmp.Canvas.Brush.Color :=clBtnFace;
    于是判定问题出在画布操作附近!抱着试试看锁定下画布,居然搞定了!但还是感觉很奇怪!用了这类语句(if not Main.HavePic then Break;)跳出循环啊!照理说当路径变化后,前面的线程回判断并自动终止!奇怪?
    而且线程数确实也减少了!
    不过,如果有两个线程操作过画布后,Bitmap对象好像就不能在使用了!奇怪?再想想吧!^_^集中经历解决第二个问题!有位朋友告诉我个改变Height的方法,可惜不好用!还是考虑下如何操作ListView中的滚动条好了!