要处理很多图像,因此,采取这样的办法:其中的一个图像用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、单击选中如何处理?是在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;
..........
上面两句话的意思是什么?
////在TImage中画选中的状态会造成画面叠加,而影响效果,
确实是这样,而且在切换选择时,还要把原来选中的图像重新Load。
所以你可以考虑一个折中的办法,就是用一个框形TShape控件,选中哪个图像,
把这个Shape移到哪里。这样就简单多了。
但是把Shape,挪到Image上以后,原来的Image的鼠标事件就不起作用了,你要
重新指向一下。
用TScrollBox作图片的显示列表,我认为不是很好。
因为TScrollBox无Canvas,即使弄了一个Canvas,也没有重画事件上,当它被一个Window被挡住后,被挡住的部分就不见了。所以解决办法用一个Image的数组,至于高亮状态,用上面的办法即可解决。
你只要把文件名传到新窗体中,在新窗体中Load,宽高都有了,
至于窗体的高与宽,你根据这个图像的宽与高去设置就可以了。