客户要求要在DBGRIDEH上显示:2X10 3 期中3还要是上标。
同样在Fastreport也要同样输出。
帮忙!!!!

解决方案 »

  1.   

    处方:
    利用DBGrid的OnDrawColumnCell事件解决显示问题,
    利用QRLabel的OnPrint事件解决打印问题。
    //要使事件OnDrawColumnCell生效,需要将DBGrid1的
    //属性DefaultDrawing置为False(缺省是True)
    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    {
    Rect:   当前需要重画的区域,用于计算图形输出位置
    DataCol:当前记录的当前字段,用于获取数据的值
    Column: 当前列,可以根据此参数实现不同列显示为不同颜色
    State:  当前数据的状态,区分编辑、浏览等状态
    }
    var
      X1, Y1, X2, Y2: Integer;
    begin  if (Sender is TDBGrid) then Exit;
      if DataCol <> 3 then begin//假定第4列当前数据可以分解为2,3
        {根据参数计算出要输出 2 X 10 的位置 (X1, Y1), 以及需要的
         字体(包括尺寸、颜色等);计算出指数 3 的位置 (X2, Y2)
        }
        {输出2 X 10之前设置DBGrid1中的
         Canvas.Pen和Canvas.Brush以及Canvas.Font}
        DBGrid1.Canvas.TextOut(X1, Y1, '2 X 10');
        DBGrid1.Canvas.TextOut(X2, Y2, '3');
      end else begin//显示其他数据
        DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
      end;
    end;{
      至于打印,就更为简单,你在QuickRep上放置两个QRLabel,
      并在各自的OnPrint事件中获取所需数据即可。
    }
      

  2.   

    可惜 delphi对unicode 支持得太差了,否则那里面都有。
      

  3.   

    thank you cnsuyong(小可) !!!