zoukankan      html  css  js  c++  java
  • 让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;
  • 相关阅读:
    python epoll
    解决linux下/etc/rc.local开机器不执行的原因
    xen4.1.2网桥配置
    用户激励设计[转]
    C#4.0的dynamic和var及object关键字辨析
    动态设置和修改Membership/Profile/RoleProvider的ConnectionString数据库连接字符串
    UseCase用例怎么画_UML用例UseCase的几个理解误区
    C#的delegate/event/Action/Func/Predicate关键字
    我为什么鄙视提倡加班的公司
    [转]个人成长之通关路!
  • 原文地址:https://www.cnblogs.com/westsoft/p/5969119.html
Copyright © 2011-2022 走看看