• 让cxGrid像Excel那样高亮显示选区的行号列标


    http://www.oschina.net/code/snippet_54100_1102
    Developer Express的cxGrid控件是一个相当有特色的数据栅格组件,支持自动分组、卡片式显示、和像Excel那样的过滤功能等。不过它在多选区时的显示 方式却不太友善,对于我这样还有点追求的人来说肯定是不会满足的了,于是通过它的OnDrawColumnHeader事件和 OnDrawIndicatorCell事件把它变成像Excel那样以高亮显示行号列标。

    PS:我平时是用来显示数据的,没有考虑编辑状态;为了说明效果,cxGrid使用DBTableView并设成允许多选和选区方式(在OptionsView里有设)。

    OnDrawColumnHeader事件源码如下:

     
     
    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;
  • 相关阅读:
    遇到的错误
    关于绝对路径的中斜杠和反斜杠
    为什么自动注入写的是接口名
    程序中什么时候打印什么级别的日志
    redis 实现点赞功能
    静态变量,静态代码块
    response.getWriter().write()和 response.getWriter().print()的区别
    SQL 语句
    vue 在v-for 里面动态加载 图片
    弹性布局
  • 原文地址:https://www.cnblogs.com/westsoft/p/5969119.html
Copyright © 2020-2023  润新知