首页 > 代码库 > 让cxGrid像Excel那样高亮显示选区的行号列标
让cxGrid像Excel那样高亮显示选区的行号列标
http://www.oschina.net/code/snippet_54100_1102
Developer Express的cxGrid控件是一个相当有特色的数据栅格组件,支持自动分组、卡片式显示、和像Excel那样的过滤功能等。不过它在多选区时的显示 方式却不太友善,对于我这样还有点追求的人来说肯定是不会满足的了,于是通过它的OnDrawColumnHeader事件和 OnDrawIndicatorCell事件把它变成像Excel那样以高亮显示行号列标。
PS:我平时是用来显示数据的,没有考虑编辑状态;为了说明效果,cxGrid使用DBTableView并设成允许多选和选区方式(在OptionsView里有设)。
OnDrawColumnHeader事件源码如下:
标签: cxGrid 表格 DBTableView
procedure TfrmAccount.cxtvMasterCustomDrawColumnHeader( Sender: TcxGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridColumnHeaderViewInfo; var ADone: Boolean); var AButtonState: TcxButtonState; ARect: TRect; begin if AViewInfo.Column.Selected then begin AButtonState := cxbsHot; ARect := AViewInfo.Bounds; Sender.LookAndFeelPainter.DrawHeader(ACanvas, ARect, AViewInfo.TextAreaBounds , [], cxBordersAll, AButtonState, AViewInfo.Column.HeaderAlignmentHorz , AViewInfo.Column.HeaderAlignmentVert, False, False , AViewInfo.Column.Caption, ACanvas.Font, Sender.Styles.Selection.TextColor , Sender.Styles.Selection.Color); {======================================================================== DESIGN BY : 彭国辉 DATE: 2007-03-02 SITE: http://kacarton.yeah.net/ BLOG: http://blog.csdn.net/nhconch EMAIL: kacarton#sohu.com 文章为作者原创,转载前请先与本人联系,转载请注明文章出处、保留作者信息,谢谢支持! =========================================================================} ARect.Left := ARect.Right - 19; ARect.Right := ARect.Right - 1; InflateRect(ARect, -1, -3); if AViewInfo.Column.Options.Filtering then begin Sender.LookAndFeelPainter.DrawFilterDropDownButton(ACanvas, ARect , cxbsNormal, AViewInfo.Column.Filtered); OffsetRect(ARect, -16, 0); end; if AViewInfo.Column.SortIndex <> -1 then Sender.LookAndFeelPainter.DrawSortingMark(ACanvas, ARect , AViewInfo.Column.SortOrder=soAscending); ADone := true; end; end; OnDrawIndicatorCell事件源码如下: procedure TfrmAccount.cxtvMasterCustomDrawIndicatorCell( Sender: TcxGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxCustomGridIndicatorItemViewInfo; var ADone: Boolean); var AButtonState: TcxButtonState; clFont, clBrush: TColor; begin if not (AViewInfo is TcxGridIndicatorRowItemViewInfo) then Exit; if TcxGridIndicatorRowItemViewInfo(AViewInfo).GridRecord.Selected then begin AButtonState := cxbsHot; if Sender.LookAndFeelPainter.LookAndFeelStyle = lfsOffice11 then begin clFont := ACanvas.Font.Color; clBrush := ACanvas.Brush.Color; end else begin clFont := Sender.Styles.Selection.TextColor; clBrush := Sender.Styles.Selection.Color; end; end else begin AButtonState := cxbsNormal; clFont := ACanvas.Font.Color; clBrush := ACanvas.Brush.Color; end; Sender.LookAndFeelPainter.DrawHeader(ACanvas, AViewInfo.ContentBounds, AViewInfo.ContentBounds, [], [bLeft, bRight, bBottom], AButtonState, taCenter , vaCenter, False, False, IntToStr(TcxGridIndicatorRowItemViewInfo(AViewInfo).GridRecord.Index + 1) , ACanvas.Font, clFont, clBrush); ADone := True; end;
让cxGrid像Excel那样高亮显示选区的行号列标
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。