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