在ListView的Item中显示CheckBox与Button

在ListView的Item中显示CheckBox与Button,主要思路就是在绘制每一个Item时创建一个CheckBox与Button,并显示在Item对应Column的位置.主要注意于3点:

  • 将要显示的CheckBox与Button(其实可以更多其它控件)定义在一个结构中,使用指针连接到Item.Data,以便与该Item对应
  • 要检查Item.Data是否为nil,防止重复创建控件
  • 通过Item.SubItem所对应的Column.Width得出CheckBox与Button应该放置的坐标

    代码并不难懂,首先定义一个结构:

    type   PItemCtrl = ^TItemCtrl   
      TtemCtrl = record
         CheckBox: TCheckBox;
         Button: TButton;
       end; 
    end;

     

    procedure TfrmMain.ListView1CustomDrawSubItem(Sender: TCustomListView;

     

      Item: TListItem; SubItem: Integer; State: TCustomDrawState;

     

      var DefaultDraw: Boolean);

     

    var

     

      Rect: TRect;

     

      P: PItemCtrl;

     

    begin

     

      { 2个子项目上显示CheckBox,5个子项目上显示Button }

     

      if SubItem in [2, 5] then

     

      begin

     

        DefaultDraw:= False;        // 不显示默认的文本.

     

        Rect:= Item.DisplayRect(drBounds);  // 获取Item显示的区域.

     

     

     

        if Item.Data = nil then     // 如果为空则创建CheckBoxButton.

     

        begin

     

          new(P);   // 创建一个指针用于存储CheckBoxButton.          

     

     

     

          { 创建并显示CheckBox }

     

          P.CheckBox:= TCheckBox.Create(ListView1);

     

          P.CheckBox.Parent:= ListView1;

     

          P.CheckBox.Caption:= '';

     

          P.CheckBox.Width:= 20;

     

          P.CheckBox.Height:= 20;

     

          P.CheckBox.Left:= Rect.Right - ListView1.Columns[3].Width

     

            - ListView1.Columns[4].Width - ListView1.Columns[5].Width

     

            - ((ListView1.Columns[2].Width + P.CheckBox.Width) div 2);

     

          P.CheckBox.Top:= Rect.Top;

     

          P.CheckBox.Visible:= True;

     

          { SubItems[2 -1].Caption01,直接转换为Boolean型并给CheckBox赋值. }

     

          P.CheckBox.Checked:= StrToBool(Item.SubItems[SubItem -1]);

     

     

     

          { 创建并显示Button }

     

          P.Button:= TSpeedButton.Create(ListView1);

     

          P.Button.Parent:= ListView1;

     

          P.Button.Caption:= '...';

     

          P.Button.Width:= 20;

     

          P.Button.Height:= 20;

     

          P.Button.Left:= Rect.Right - ((ListView1.Columns[5].Width

     

            + P.Button.Width) div 2);

     

          P.Button.Top:= Rect.Top;

     

          P.Button.Visible:= True;

     

     

     

          Item.Data:= P;    // CheckBoxButton的结构指针保存于Item.Data属性.

     

        end;

     

      end;

     

    end;

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值