CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

请问怎么给TListView控件加上背景图片,就是实现Windows桌面的效果

楼主plits(plits)2005-11-10 16:43:15 在 Delphi / VCL组件开发及应用 提问

请详细赐教。  
  问题点数:20、回复次数:3Top

1 楼jinjazz(近身剪)回复于 2005-11-10 16:45:11 得分 0

implementation  
    uses   Jpeg;  
  {$R   *.dfm}  
   
  procedure   TForm1.BitBtn1Click(Sender:   TObject);  
  var  
      jpg:TJPEGImage;  
  begin  
      jpg:=   TJpegImage.Create;  
      jpg.LoadFromFile('C:\Documents   and   Settings\Administrator\My   Documents\My   Pictures\0091.jpg');  
    //   Listview1.Canvas.Draw(0,0,jpg);  
      Listview1.Canvas.StretchDraw(Listview1.Canvas.ClipRect,jpg);  
      jpg.Free;  
  end;Top

2 楼plits(plits)回复于 2005-11-10 16:57:57 得分 0

楼上的:这样好像不行,当屏幕重绘时就有了问题,看我下面的程序(不行的,会盖住ListView.Items):  
  procedure   TFrm_BackGround.Btn_ApplyClick(Sender:   TObject);  
  var  
          Rect:   TRect;  
          x,y,w,h:   LongInt;  
          BmpWidth,   BmpHeight:   Integer;  
          PosLeft,   PosTop:   Integer;  
          FileName:   String;  
  begin  
          if   BackFileName   =   ''   then     //使用无图片有颜色模式  
                  Frm_Main.ListView1.Color   :=   BackColor  
          else  
          begin  
                  BackGroundBmp   :=   TBitMap.Create;  
                  BackGroundBmp.LoadFromFile(BackFileName);  
                  if   Cmb_Pos.ItemIndex   =   0   then     //居中  
                  begin  
                          PosLeft   :=   round((ScreenWidth   -   BackGroundBmp.Width)/2);  
                          PosTop     :=   round((ScreenHeight   -   BackGroundBmp.Height)/2);  
                          Rect.Left   :=   PosLeft;  
                          Rect.Top   :=   PosTop;  
                          Rect.Right   :=   PosLeft   +   BackGroundBmp.Width;  
                          Rect.Bottom   :=   PosTop   +   BackGroundBmp.Height;  
                          Frm_Main.ListView1.Canvas.StretchDraw(Rect,   BackGroundBmp);  
                  end  
                  else   if   Cmb_Pos.ItemIndex   =   1   then       //拉伸  
                  begin  
                          Rect.Left   :=   Frm_Main.ListView1.Left;  
                          Rect.Top   :=   Frm_Main.ListView1.Top;  
                          Rect.Right   :=   Frm_Main.ListView1.Left   +   Frm_Main.ListView1.Width;  
                          Rect.Bottom   :=   Frm_Main.ListView1.Top   +   Frm_Main.ListView1.Height;  
                          Frm_Main.ListView1.Canvas.StretchDraw(Rect,   BackGroundBmp);  
                  end  
                  else   if   Cmb_Pos.ItemIndex   =   2   then     //平铺  
                  begin  
                          w   :=   BackGroundBmp.Width;  
                          h   :=   BackGroundBmp.Height;  
   
                          y   :=   0;  
                          while   y   <   Frm_Main.ListView1.Height   do  
                          begin  
                                  x   :=   0;  
                                  while   x   <   Frm_Main.ListView1.Width   do  
                                  begin  
                                          Frm_Main.ListView1.Canvas.Draw(x,   y,   BackGroundBmp);  
                                          Inc(x,   w);  
                                  end;  
                          Inc(y,   h);  
                          end;  
                  end;  
                  FileName   :=   ExtractFilePath(Application.ExeName)+'BackGround\'   +   ExtractFileName(BackFileName);  
                  if   not   FileExists(FileName)   then  
                  begin  
                          CopyFile(PChar(BackFileName),   PChar(FileName),   true);  
                          FormCreate(Sender);  
                  end;  
          end;  
          Btn_Apply.Color   :=   clBtnFace;  
          bApply   :=   true;  
  end;Top

3 楼LingZiHus(LingZi)回复于 2005-11-17 08:55:53 得分 20

改写TListView控件,增加FPicture属性并自动刷新,调用API    
  SetBkMode(Canvas.Handle,TRANSPARENT);  
  ListView_SetTextBKColor(Handle,CLR_NONE);Top

相关问题

  • 有没有这样的控件,类似Windows桌面……
  • 用什么函数可以得到form上的控件在windows桌面上的坐标??
  • 右击Windows桌面上的“我的文档”,选择“属性”,“浏览”后出现的界面如何实现?是否有专门的控件?
  • 如何让TlistView控件第一列显示CHECKBOX控件?
  • 怎么样让桌面静止,好抓取控件截图?
  • TListView控件如何设置排序
  • TlistView控件,怎么清空其内容?
  • 如何压扁Tlistview的头控件
  • 关于TStringGrid、TListView控件问题
  • windows桌面问题

关键词

  • backgroundbmp
  • listview
  • posleft
  • postop
  • rect
  • jpg
  • frm
  • canvas
  • begin
  • left

得分解答快速导航

  • 帖主:plits
  • LingZiHus

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo