dbgrid设置rowheight后如何将单元格内容垂直居中? dbgrid设置rowheight后如何将单元格内容垂直居中? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 俺不是高手,但是指点你一下还是可以的双击DBGRID,会出来一个 双击DBGRID,会出来一个名为EDITING DBgrid1 colunms的小框选中全部,将其ALIGNMENT 的属性改为TACENTER就可以啦另外属性TITLE属性里也有这一项,是用来改属性名的 很抱歉,这么晚才给你回复。(还没有习惯看短消息:):))//自动折行, 自动调整行高, 对齐方式为垂直居中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; 导出到EXCEL的问题,请指教 点击按钮两次弹出两个窗口,关掉一个在关掉第二个是出错,请高手赐教。 (分数倾囊相送)急求-Delphi-多线程下载-FTP客户端-源码(或多线程关键部分) 问一个关于程序打包的问题。 10年假球白练了! 动态连接库中的入口\出口函数你测试过没有? 如何实现将文本框中的内容转为查询条件的问题? DELPHI 7 的MD5加密组件呢?怎么找不到 如何模拟VC IDE 中的这个动作? ADOStoredProc1 调用存储过程中文乱码问题? 用delphi2006的请进? 怎么屏蔽程序退出异常?
双击DBGRID,会出来一个
选中全部,将其ALIGNMENT 的属性改为TACENTER就可以啦
另外属性TITLE属性里也有这一项,是用来改属性名的
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;