要处理很多图像,因此,采取这样的办法:其中的一个图像用TImage来装载,然后以缩略图的形式显示在TScollBox里面。当用户要浏览缩略图中的一张时,单击选中,选中的图像要以高亮显示,双击时,要求缩略图要在弹出一个新窗口中显示。
   问题:
   1、单击选中如何处理?是在TImage中画选中的状态?还是在TScrollBox中画选中的状态?在TImage中画选中的状态会造成画面叠加,而影响效果。在TScrollBox中画高亮选中状态不知如何入手,请高手指点。
   2、在弹出的新窗口中显示图像的问题:第一:图像不能失真。第二:窗口的高度和宽度要能随图像的高度和宽度而改变(窗口上有一个TTollbar、一个TPageControl[里面有两个TTabSheet,每个TTabSheet里有一个TImage]、然后最下面是一个TPanle)如何实现?
   3、关于ExtDlg中的一段代码,没看懂(如下)请高手指点!
   procedure TOpenPictureDialog.PreviewClick(Sender: TObject);
   ..........
    if FImageCtrl.Picture.Width > 0 then
    begin
      ClientWidth := Min(Monitor.Width * 3 div 4,
        FImageCtrl.Picture.Width + (ClientWidth - Panel.ClientWidth)+ 10);
      ClientHeight := Min(Monitor.Height * 3 div 4,
        FImageCtrl.Picture.Height + (ClientHeight - Panel.ClientHeight) + 10);
    end;
   ..........
   上面两句话的意思是什么?

解决方案 »

  1.   

    这类问题 用 GDI+ 最好
      

  2.   

    你的问题挺多呀。呵呵。。先说说问题一吧:
    ////在TImage中画选中的状态会造成画面叠加,而影响效果,
    确实是这样,而且在切换选择时,还要把原来选中的图像重新Load。
    所以你可以考虑一个折中的办法,就是用一个框形TShape控件,选中哪个图像,
    把这个Shape移到哪里。这样就简单多了。
    但是把Shape,挪到Image上以后,原来的Image的鼠标事件就不起作用了,你要
    重新指向一下。
      

  3.   

    问题一后半部分。
    用TScrollBox作图片的显示列表,我认为不是很好。
    因为TScrollBox无Canvas,即使弄了一个Canvas,也没有重画事件上,当它被一个Window被挡住后,被挡住的部分就不见了。所以解决办法用一个Image的数组,至于高亮状态,用上面的办法即可解决。
      

  4.   

    问题二,没啥好说的。
    你只要把文件名传到新窗体中,在新窗体中Load,宽高都有了,
    至于窗体的高与宽,你根据这个图像的宽与高去设置就可以了。