转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
用Delphi实现缩略图查看         ★★★★

用Delphi实现缩略图查看

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2761 更新时间:2009/4/23 18:38:54
本来想投个杂志什么的,现在想来也没那个必要了。

用Delphi实现缩略图查看

作者:姜亮         


    缩略图英文也叫Thumbnails,是现在的看图软件必备的基本功能之一,像ACDSee,豪杰大眼睛等图片浏览软件都提供了此功能.其实利用Delphi6.0提供的ListView和ImageList控件就可以很方便地实现该功能.下面我们就一步一步打造一个属于自己的ACDSee.

    一.编程思路

    ListView能够以四种不同的方式显示数据,其中当以vsIcon方式显示数据时,其图标来自于largeIcon属性指定的ImageList控件.因此,只要我们把图片缩放后动态加载到ImageList控件中,就能够以缩略图方式在ListView中显示了.需要注意的是,加载到ImageList中的图片大小尺寸必须相等;而且,为了避免图片缩放后变形,我们应该尽可能保证图片的长宽比例保持不变.我一直用"缩放"一词,这是因为对于大图片我们要缩小它,而对于小图片我们则要放大它.ACDSee就是这样做的.最后还有一个小小的问题,我们如何实现ACDSee中那些具有立体感的类似于panel的边框呢?你也许会说动态生成panel控件!这实在不是个好主意.因为那将占用大量的系统资源.我感觉 ACDSee的那些panel不是真正的panel,而是被画上去的,所以我们要自己画panel.你也许会想自己画panel很麻烦吧,开始我也这样想,但当我把这个问题搞定后,发现它简直就是一块小蛋糕.^-^ 随便把一个有panel的窗体抓下来,然后在画图软件里放大8倍后观察,你就什么都明白了.其实,一个panel就是由四条线段组成的(如图一所示)。所有的问题都解决了,那就赶快动手吧!

(图一)

    二.设计界面

    新建一工程,执行以下步骤:

    1。在窗体上添加一个ScrollBox1控件,设置其Align属性为alLeft。

    2。在窗体上添加一个Splitter1控件,设置其width为3,Align属性为alLeft。

    3。在窗体上添加一个ListView1控件,设置其Align属性为alClient,color属性为clBtnFace。

    4。在ScrollBox1里添加一个ShellTreeView1控件(该控件在Samples页面上),设置其Align属性为alTop。

    5。在ScrollBox1里添加一个Splitter2控件,设置其Height为3,Align属性为alTop。

    6。在ScrollBox1里添加一个panel1控件,设置其Align属性为alClient。

    7。在panel1上添加一个Image1控件。

    完成后的界面请参考图二。

   

图二

    三. 编写代码

    界面做好了,下面就该写代码了。

    1。单元的接口部分主要代码如下:

unit Unit1;

interface

uses
 ...jpeg...

type
  TForm1 = class(TForm)
   ......

  private
    ProgressBar1:TProgressBar;
    OriginalBmp,ThumbBmp:Tbitmap;
    PreViewBmp:Tbitmap;
    ThumbJpg:TJpegImage;
    PreViewJpg:TJpegImage;
    IsRefreshImageFinished:boolean;
    { Private declarations }
  public
    procedure RefreshImage;
    procedure ShowPreImageFit(const ImageFileName:string);
    { Public declarations }
  end;

type
  TImageFileList=class
  private
    FStrListFile:TStringList;
    FIndex:integer;
    { Private declarations }
  public
    //添加一个文件
    procedure Add(FullFileName:string);

    //清空文件列表
    procedure Clear;

    //当目录改变时,调用此过程会把该目录下所有图片文件
    //添加到文件列表中
    procedure ChangeDir(dir:string);

    //返回文件数目
    function GetFileCount:integer;

    //设置索引
    procedure SetIndex(AIndex:integer);

    //返回文件索引
    function GetIndex:integer;

    //返回当前完整文件名
    function GetCurFullFileName:string;

    //返回当前文件名
    function GetCurFileName:string;

    //返回下一个文件的文件名
    function GetNextFileName:string;

    //返回上一个文件的文件名
    function GetPreFileName:string;

    constructor Create;
    destructor Destroy;
override;
    { Public declarations }
  end;
 

procedure JpgToBmp(const JpgFileName:string;AJpg:TJpegImage;Abmp:Tbitmap);
function  IsJpgFile(const FileName:string):boolean;

  const
  RaisedPanel=1;
  LoweredPanel=2;

var
  Form1: TForm1;
  ImageFileList:TImageFileList;
implementation
  .....

  2.  TImageFileList类具体实现如下:


procedure TImageFileList.Add(FullFileName: string);
begin
  FStrListFile.Add(FullFileName);
end;


procedure TImageFileList

[1] [2] [3] [4] [5] [6]  下一页


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台