一直都对QQ的好友列表很好奇,最先感觉用TreeView实现的,看了看TreeView的源码,发现要实现还真的不太好完成任务啊,其中最大的原因是自己的功力不足,后来觉得用ListView来做吧,结果也是失败,后来又想到ListBox,结果发现也是难成,最后发现有一个TDrawGrid,可以来绘制,但是不知道那两行文字怎么搞,有知道的望告知,谢谢。好了不再废话,就把最近对TDrawGrid的一些操作记录如下:

1.我们先设置TDrawGrid的属性:
BorderStyle:bsNone;
ColCount:1;
DefaultColWidth:200;
DefaultRowHeight:60;
RowCount:10;
GridLineWidth:2;
Options:[goFixedVertLine, goFixedHorzLine, goHorzLine, goDrawFocusSelected, goThumbTracking];
ScrollBars:ssVertical;

2.在窗体的public 域定义如下变量和函数:
  PicList: TList;
    function GetPicture(ACol, ARow:Integer): TBitMap;

3.完成相关函数和过程:

function TForm1.GetPicture(ACol, ARow: Integer): TBitMap;
var
  Index: integer;
begin
  Result := nil;
  Index := ARow * Grid.ColCount + ACol;
  if Index <= PicList.Count - 1  then
    Result := TBitmap(PicList.Items[Index]);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  Bmp: TBitMap;
  Index: Integer;
  AFileName: string;
begin
  PicList := TList.Create;
  for Index := 1 to 10 do
  begin
    AFileName := Format(ExtractFilePath(ParamStr(0)) + 'Icon\%d.bmp', [Index]);
    Bmp := TBitmap.Create;
    Bmp.LoadFromFile(AFileName);
    PicList.Add(Bmp);
  end;
end;

procedure TForm1.GridDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  ACanvas: TCanvas;
  R: TRect;
  Bmp: TBitMap;
begin
  ACanvas := Grid.Canvas;
  Bmp := GetPicture(ACol, ARow);
  if Bmp <> nil then
  begin
    R := Rect;
    R.Left := R.Left + 6;
    R.Top := R.Top + 6;
    {如果使用Canvas的StretchDraw函数,必须加上
    下面两句代码,不过BMP图片还是无法透明}
    //R.Bottom := R.Bottom - 6;
    //R.Right := Bmp.Width;
    {设置BMP的Transparent为真,再用Canvas的
    Draw函数,就可以使BMP透明绘制,不过你需要
    制作透明的BMP图片}
    Bmp.Transparent := True;
    ACanvas.Draw(R.Left, R.Top, Bmp);
    {网上有人说用下面的语句可以透明,但是使用
    函数StretchDraw,还是无法透明}
    //ACanvas.Brush.Style := bsClear;
    //ACanvas.StretchDraw(R, Bmp);
  end;
end;

最后,关于透明BMP图片的制作方法,感兴趣的可以百度一下。

http://www.lsworks.net/article/45.html

Delphi之TDrawGrid绘制的更多相关文章

  1. Delphi实例之绘制正弦函数图像

    Delphi实例之绘制正弦函数图像 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphic ...

  2. delphi DBgrid应用大全

    Delphi 语言的数据库编程中,DBGrid 是显示数据的主要手段之一.但是 DBGrid 缺省的外观未免显得单调和缺乏创意.其实,我们完全可以在我们的程序中通过编程来达到美化DBGrid 外观的目 ...

  3. 借鉴 学习 DELPHI 通用函数 哈哈

    [转]关于Delphi通用涵数 http://m.blog.csdn.net/blog/dragonjiang5460/1196927 2006-9-8阅读2016 评论0 DELPHI程序注册码设计 ...

  4. DBGrid 各属性的设置

    在 Delphi 语言的数据库编程中,DBGrid 是显示数据的主要手段之一.但是 DBGrid 缺省的外观未免显得单调和缺乏创意.其实,我们完全可以在我们的程序中通过编程来达到美化DBGrid 外观 ...

  5. DBGrid和DBGridEH

    二.应用实例 Enlib3.0组件包安装成功后 A.定制标题行 1.制作复杂标题行 标题行可设为2行以上高度,并可以为多列创建一个共同的父标题行.为实现这个效果,需在各个列标题属性中以“|”分隔父标题 ...

  6. 主窗体里面打开子窗体&&打印饼图《Delphi 6数据库开发典型实例》--图表的绘制

    \Delphi 6数据库开发典型实例\图表的绘制 1.在主窗体里面打开子窗体:ShowForm(Tfrm_Print); procedure Tfrm_Main.ShowForm(AFormClass ...

  7. WM_ERASEBKGND官方解释(翻译),以及Delphi里所有的使用情况(就是绘制窗口控件背景色,并阻止进一步传递消息)

    #define WM_ERASEBKGND                   0x0014 Parameters wParam A handle to the device context. //  ...

  8. Delphi中有关窗口绘制

    Invalidate方法通知Windows应该重新绘制表单的整个表面.最重要的是Invalidate不会立即强制执行绘制操作. Windows只是存储请求,并且只会响应它当前程序完全执行后,并且只要系 ...

  9. Delphi如何在Form的标题栏绘制自定义文字

    Delphi中Form窗体的标题被设计成绘制在系统菜单的旁边,如果你想要在标题栏绘制自定义文本又不想改变Caption属性,你需要处理特定的Windows消息:WM_NCPAINT.. WM_NCPA ...

随机推荐

  1. 新测 thinkphp3.2 整合 PHPMailer 发送邮件

    PHPMailer 的官方网站:http://phpmailer.worxware.com/ PHPMailer 最新类库下载地址:[点击下载] PHPMailer GitHub 下载地址:https ...

  2. ISP图像质量自动化测试方法

    背景介绍 ISP(Image Signal Processor),即图像处理,主要作用是对前端图像传感器输出的信号做后期处理,主要功能有线性纠正.噪声去除.坏点去除.内插.白平衡.自动曝光控制等,依赖 ...

  3. 三角形(hd1249)

    三角形 Problem Description 用N个三角形最多可以把平面分成几个区域?   Input 输入数据的第一行是一个正整数T(1<=T<=10000),表示测试数据的数量.然后 ...

  4. Nginx 变量漫谈(五)

    前面在 (二) 中我们已经了解到变量值容器的生命期是与请求绑定的,但是我当时有意避开了“请求”的正式定义.大家应当一直默认这里的“请求”都是指客户端发起的 HTTP 请求.其实在 Nginx 世界里有 ...

  5. Oracle 修改密码 解锁

    1.怎么修改oracle用户密码 在以SYSDBA身份登陆时可以修改其他用户的密码,比如: SQL> alter user 用户名 identified by 新密码; 用户已更改. 这个是把U ...

  6. android重要的对象

    Context----------------访问全局信息的api Activity Window Intent/Bundle ImageView----------onclick View----- ...

  7. 蜂鸟A20开发板刷 cubietruck 的 SD 卡固件

    美睿视讯 为蜂鸟A20准备的 MerriiLinux 功能非常简陋.所以能用上主流的 debian 或者 LUbuntu 就可以说是非常迫切的需求了.蜂鸟A20(Merrii Hummingbird ...

  8. 顶尖数据挖掘教学案例库(TipDM-C10)产品白皮书

          顶尖数据挖掘教学案例库 (TipDM-C10)           产  品  说  明  书 广州泰迪智能科技有限公司 版权所有 地址: 广州市经济技术开发区科学城232号 网址: ht ...

  9. 使用 fastlane 实现 iOS 持续集成(转)

    http://www.cocoachina.com/ios/20150916/13433.html 简介 持续集成是个“一次配置长期受益”的工作.但很多小公司都没有.以前在做Windows开发配置感觉 ...

  10. hdu4135Co-prime 容斥原理水题

    //问一个区间[a,b]与n互素的数的个数 //利用容斥原理可知 //在[a,b] 区间内对n的素数因子 //ans = 被一个数整除的数的个数 - 被两个数的最小公倍数整除的数的个数 + 被三个数的 ...