cxGrid列中画checkbox

cxGrid列种有一种是CheckBox属性列,用于显示布尔类型数据,可以进行选择。如果改变了该列单元的高和宽之后,默认的checkbox的列和宽是不随着改变的,也就导致看起来显得太小,影响美观。有种像人一样,眼睛很大,眼珠子却长得小了。-_-。如图1:

1.

cxGrid列中画checkbox
如何能够改变checkbox的大小,让界面看起来更协调美观呢?可以通过该列的CustomDrawCell事件中实现,代码如下:

procedure TFSetItemInf.cxGridDBColumn17CustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var 
  AEditValue: Variant;
  FBounds:TRect;
  r: TRect;
  s: TSize;
  dx: Integer;
begin
  AEditValue := AViewInfo.GridRecord.Values[cxGridDBColumn17.Index];  //当前单元值
  FBounds := AViewInfo.Bounds;
  if (AViewInfo.GridRecord.RecordIndex mod 2) = 0 then  //保持和原有每行样式一致
    ACanvas.FillRect(FBounds, $00F9F4F9)
  else
    ACanvas.FillRect(FBounds, $00E6F4F1); 
  s.cx := GetSystemMetrics(SM_CXMENUCHECK);  //获得系统checkbox高
  s.cy := GetSystemMetrics(SM_CYMENUCHECK);  //获得系统checkbox宽
  Dx := (AViewInfo.Width - GetSystemMetrics(SM_CXMENUCHECK)) div 2;

  //获得要画checkbox框的位置参数
  r.Top := FBounds.Top + (FBounds.Bottom - FBounds.Top - s.cy) div 2;
  r.Bottom := r.Top + s.cy + 1;
  r.Left := FBounds.Left + Dx;
  r.Right := r.Left + s.cx + 1;

  //画出checkbox,并且根据当前值确定是否为选择状态
  DrawFrameControl(ACanvas.Handle, r, DFC_BUTTON, IfThen(
    CompareText(AEditValue,'True')=0, DFCS_CHECKED, DFCS_BUTTONCHECK));
  ADone := True;
end;

运行后的效果:
2.

cxGrid列中画checkbox

这样效果较之前要好得多了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值