dbgrid设置rowheight后如何将单元格内容垂直居中?

解决方案 »

  1.   

    俺不是高手,但是指点你一下还是可以的
    双击DBGRID,会出来一个
      

  2.   

    双击DBGRID,会出来一个名为EDITING DBgrid1 colunms的小框
    选中全部,将其ALIGNMENT 的属性改为TACENTER就可以啦
    另外属性TITLE属性里也有这一项,是用来改属性名的
      

  3.   

    很抱歉,这么晚才给你回复。(还没有习惯看短消息:):))//自动折行, 自动调整行高, 对齐方式为垂直居中
    procedure TMainForm.DBGridDrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    var
      ARect: TRect;
      HCell: Integer;
      RecNo: Integer;
      SCell: string;
    begin
      if DBGrid.DataSource.DataSet.RecordCount > 0 then
      begin
        RecNo := DBGrid.DataSource.DataSet.RecNo;
        //注意,我这里只是示范,实际应用要加上转换异常处理
        SCell := Column.Field.AsString;
        Arect := Rect;
        Column.Title.Alignment := taCenter;
        with DBGrid, DBGrid.Canvas do
        begin
          HCell := DrawText(Handle, PChar(SCell), Length(SCell), ARect, DT_CENTER or DT_VCENTER or DT_WORDBREAK);
          FillRect(ARect);
          if HCell >= RowHeights[RecNo] then
          begin
            RowHeights[RecNo] := HCell;
            DrawText(Handle, PChar(SCell), Length(SCell), ARect, DT_CENTER or DT_VCENTER or DT_WORDBREAK)
          end else
            DrawText(Handle, PChar(SCell), Length(SCell), ARect, DT_CENTER or DT_VCENTER or DT_SINGLELINE);
        end;
      end;
    end;//你可以在此基础上,再变化出你自己想要的单元格效果//可以根据不同的数据类型设置不同的对齐方式,如数字右对齐//请看下面绘制文本格式常量, 每个常量的效果你可以自己多测试。const
      { DrawText() Format Flags }
      {$EXTERNALSYM DT_TOP}
      DT_TOP = 0;
      {$EXTERNALSYM DT_LEFT}
      DT_LEFT = 0;
      {$EXTERNALSYM DT_CENTER}
      DT_CENTER = 1;
      {$EXTERNALSYM DT_RIGHT}
      DT_RIGHT = 2;
      {$EXTERNALSYM DT_VCENTER}
      DT_VCENTER = 4;
      {$EXTERNALSYM DT_BOTTOM}
      DT_BOTTOM = 8;
      {$EXTERNALSYM DT_WORDBREAK}
      DT_WORDBREAK = $10;
      {$EXTERNALSYM DT_SINGLELINE}
      DT_SINGLELINE = $20;
      {$EXTERNALSYM DT_EXPANDTABS}
      DT_EXPANDTABS = $40;
      {$EXTERNALSYM DT_TABSTOP}
      DT_TABSTOP = $80;
      {$EXTERNALSYM DT_NOCLIP}
      DT_NOCLIP = $100;
      {$EXTERNALSYM DT_EXTERNALLEADING}
      DT_EXTERNALLEADING = $200;
      {$EXTERNALSYM DT_CALCRECT}
      DT_CALCRECT = $400;
      {$EXTERNALSYM DT_NOPREFIX}
      DT_NOPREFIX = $800;
      {$EXTERNALSYM DT_INTERNAL}
      DT_INTERNAL = $1000;
      {$EXTERNALSYM DT_HIDEPREFIX}
      DT_HIDEPREFIX = $00100000;
      {$EXTERNALSYM DT_PREFIXONLY}
      DT_PREFIXONLY = $00200000;  {$EXTERNALSYM DT_EDITCONTROL}
      DT_EDITCONTROL = $2000;
      {$EXTERNALSYM DT_PATH_ELLIPSIS}
      DT_PATH_ELLIPSIS = $4000;
      {$EXTERNALSYM DT_END_ELLIPSIS}
      DT_END_ELLIPSIS = $8000;
      {$EXTERNALSYM DT_MODIFYSTRING}
      DT_MODIFYSTRING = $10000;
      {$EXTERNALSYM DT_RTLREADING}
      DT_RTLREADING = $20000;
      {$EXTERNALSYM DT_WORD_ELLIPSIS}
      DT_WORD_ELLIPSIS = $40000;