VB下如何将dbgrid的单元格内容垂直居中?下面的代码是 Delphi 的,请各位高手帮帮转成VB,先谢了! 
出自
http://topic.csdn.net/t/20061217/09/5236146.html
  //自动折行,   自动调整行高,   对齐方式为垂直居中   
  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;

解决方案 »

  1.   

    dbgrid 和 Delphi都没用过。
    一般的grid多有 column的alignment的吧。
      

  2.   

    dbgrid是vb5的控件吧,本身没有这个功能,等我出差回来研究一下.
    估计得用api,不知道能否解决,实在不行自己做个如何
      

  3.   

    好像是 colalignment= 一个值 1到7的
      

  4.   

    lz为什么不试试MSHFlexGrid控件,挺方便的,连接类似datagrid控件'调整前必须使得 
    MSHFlexGrid1.AllowUserResizing = True
    '设置单元格水平左对齐,垂直居中
    MSHFlexGrid1.CellAlignment = flexAlignLeftCenter
    '列对齐方式用ColAlignment属性,比如设置第一列为水平垂直都居中对齐
    MSHFlexGrid1.ColAlignment(1) = flexAlignCenterCenter