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;
出自
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;
一般的grid多有 column的alignment的吧。
估计得用api,不知道能否解决,实在不行自己做个如何
MSHFlexGrid1.AllowUserResizing = True
'设置单元格水平左对齐,垂直居中
MSHFlexGrid1.CellAlignment = flexAlignLeftCenter
'列对齐方式用ColAlignment属性,比如设置第一列为水平垂直都居中对齐
MSHFlexGrid1.ColAlignment(1) = flexAlignCenterCenter