请问如何才能将:ExpressQuantumGrid 4 中的分组文字:Drag a column header here to group by that column 改成中文字???我记得以前在3.0版时要使用OnDraw功能,可很久未用了,已经忘了,有哪位高手提示一下???

解决方案 »

  1.   

    以下文档将GroupPanel的背景画面和显示的字符串进行修改,并为Band和Header显示特效unit Main;interfaceuses
      Windows, Forms, dxDBGrid, Controls, Db, DBTables, dxGrClms, Graphics,
      ExtCtrls, dxTL, dxCntner, ComCtrls, Classes, dxDBCtrl, dxDBTLCl, ImgList;type
      ...控件部分省略
        procedure dxDBGrid1BackgroundDrawEvent(Sender: TObject; ACanvas: TCanvas;
          ARect: TRect);
        procedure dxDBGrid1CustomDrawBand(Sender: TObject; ABand: TdxTreeListBand;
          ACanvas: TCanvas; ARect: TRect; var AText: String;
          var AColor: TColor; AFont: TFont; var AAlignment: TAlignment;
          var ADone: Boolean);
        procedure dxDBGrid1CustomDrawColumnHeader(Sender: TObject;
          AColumn: TdxTreeListColumn; ACanvas: TCanvas; ARect: TRect;
          var AText: String; var AColor: TColor; AFont: TFont;
          var AAlignment: TAlignment; var ASorted: TdxTreeListColumnSort;
          var ADone: Boolean);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      MainForm: TMainForm;implementationuses SysUtils, dxDemoUtils{$IFDEF VER140}, Variants{$ENDIF};
    {$R *.DFM}//这是最重要的一个过程
    // Draw GroupPanel, Bands, Headers
    procedure PaintImageTiled(ACanvas: TCanvas; ARect: TRect; ABitmap: TBitmap);
    var
      X, Y: Integer;
    begin
      X := ARect.Left;
      repeat
        Y := ARect.Top;
        repeat
          ACanvas.Draw(X, Y, ABitmap);
          Inc(Y, ABitmap.Height);
        until Y >= ARect.Bottom;
        Inc(X, ABitmap.Width);
      until X >= ARect.Right
    end;//以下的内容为GroupPanel显示背景图和显示区域内的文字
    procedure TMainForm.dxDBGrid1BackgroundDrawEvent(Sender: TObject;
      ACanvas: TCanvas; ARect: TRect);
    var
      CustomDrawRgn: TdxCustomDrawRegion;
    begin
      CustomDrawRgn := TdxCustomDrawRegion.Create(ACanvas.Handle, ARect);
      try
        //Image1.Picture.Bitmap 是将要显示的背景图
        PaintImageTiled(ACanvas, ARect, Image1.Picture.Bitmap);
        if TdxDBGrid(Sender).GroupColumnCount = 0 then
          with ACanvas do
          begin
            Font.Color := clBlack;
            Brush.Style := bsClear;
            //在这里显示GroupPanel的字符串
            TextOut(10,(ARect.Bottom - ARect.Top + ACanvas.Font.Height) div 2, '这里显示字符串');
          end;
      finally
        CustomDrawRgn.Free;
      end;
    end;//以下内容为Band显示背景图
    procedure TMainForm.dxDBGrid1CustomDrawBand(Sender: TObject;
      ABand: TdxTreeListBand; ACanvas: TCanvas; ARect: TRect;
      var AText: String; var AColor: TColor; AFont: TFont;
      var AAlignment: TAlignment; var ADone: Boolean);
    const
      BandFontColor : Array[Boolean] of TColor = (clBtnShadow, clWhite);
    var
      X, Y: Integer;
      CustomDrawRgn: TdxCustomDrawRegion;
      IsBandDown: Boolean;
    begin
      CustomDrawRgn := TdxCustomDrawRegion.Create(ACanvas.Handle, ARect);
      try
        //Image2.Picture.Bitmap是将要显示的背景图
        PaintImageTiled(ACanvas, ARect, Image2.Picture.Bitmap);    ACanvas.Font.Size := 11;
        X := ARect.Left + 5;
        Y := ARect.Top + (ARect.Bottom - ARect.Top - ACanvas.TextHeight(AText)) div 2;
        ACanvas.Font.Style := ACanvas.Font.Style + [fsBold];    IsBandDown := (Sender as TdxDBGrid).DownBandIndex = ABand.VisibleIndex;
        if IsBandDown then
          ACanvas.Brush.Color := clBtnFace;
        ACanvas.Brush.Style := bsClear;
        ACanvas.Font.Color := BandFontColor[IsBandDown];
        ACanvas.TextRect(ARect, X + 3, Y + 3, AText);
        if not IsBandDown then
        begin
          ACanvas.Font.Color := clWhite;
          ACanvas.TextRect(ARect, X, Y, AText );
        end;    DrawEdge(ACanvas.Handle, ARect, BDR_RAISEDINNER, BF_TOPLEFT);
        DrawEdge(ACanvas.Handle, ARect, BDR_RAISEDOUTER, BF_BOTTOMRIGHT);  finally
        CustomDrawRgn.Free;
      end;  ADone := True;
    end;//以下内容为Header显示特效,可以更改字体和背景色
    procedure TMainForm.dxDBGrid1CustomDrawColumnHeader(Sender: TObject;
      AColumn: TdxTreeListColumn; ACanvas: TCanvas; ARect: TRect;
      var AText: String; var AColor: TColor; AFont: TFont;
      var AAlignment: TAlignment; var ASorted: TdxTreeListColumnSort;
      var ADone: Boolean);
    begin
      // 更改字体:字体显示为灰色并且加粗
      if (AColumn.Caption = 'City') or (AColumn.Caption = 'State') or
         (AColumn.Caption = 'Country') or (AColumn.Caption = 'Zip') then
      begin
        AFont.Style := AFont.Style + [fsBold];
        AFont.Color := clGray;
      end;  // 更改背景色,把背景色改为绿色
      if AColumn.Caption = 'CustNo' then
        AColor := clGreen;
    end;function GetColor(BColor, EColor: TColor; N, H: Integer): TColor;
    begin
      Result := RGB(Trunc(GetRValue(BColor) + (GetRValue(EColor)-GetRValue(BColor)) * N / H),
        Trunc(GetGValue(BColor) + (GetGValue(EColor)-GetGValue(BColor)) * N / H),
        Trunc(GetBValue(BColor) + (GetBValue(EColor)-GetBValue(BColor)) * N / H));
    end;end.
      

  2.   

    //这是他Demo下的,不过是3.22 的.
    procedure TMainForm.dxDBGrid1BackgroundDrawEvent(Sender: TObject;
      ACanvas: TCanvas; ARect: TRect);
    var
      CustomDrawRgn: TdxCustomDrawRegion;
    begin
      CustomDrawRgn := TdxCustomDrawRegion.Create(ACanvas.Handle, ARect);
      try
        PaintImageTiled(ACanvas, ARect, Image1.Picture.Bitmap);
        if TdxDBGrid(Sender).GroupColumnCount = 0 then
          with ACanvas do
          begin
            Font.Color := clBlack;
            Brush.Style := bsClear;
            TextOut(10,(ARect.Bottom - ARect.Top + ACanvas.Font.Height) div 2, 'Drag a column header here to group that column');
          end;
      finally
        CustomDrawRgn.Free;
      end;
    end;procedure TMainForm.dxDBGrid1BackgroundDrawEvent(Sender: TObject;
      ACanvas: TCanvas; ARect: TRect);
    var
      CustomDrawRgn: TdxCustomDrawRegion;
    begin
      CustomDrawRgn := TdxCustomDrawRegion.Create(ACanvas.Handle, ARect);
      try
        PaintImageTiled(ACanvas, ARect, Image1.Picture.Bitmap);
        if TdxDBGrid(Sender).GroupColumnCount = 0 then
          with ACanvas do
          begin
            Font.Color := clBlack;
            Brush.Style := bsClear;
            TextOut(10,(ARect.Bottom - ARect.Top + ACanvas.Font.Height) div 2, 'Drag a column header here to group that column'); //Here
          end;
      finally
        CustomDrawRgn.Free;
      end;
    end;