advstringgrid合并了单元格后怎么实现字体上下居中?(10分)

  • 主题发起人 主题发起人 tianlove
  • 开始时间 开始时间
T

tianlove

Unregistered / Unconfirmed
GUEST, unregistred user!
ADVstringgrid1.MergeCells(0,0,1,2);
ADVstringgrid1.Cells[0,0]:='姓名';
ADVstringgrid1.VAlignment:=vtaCenter;//为什么不能居中?
ADVstringgrid1.Alignments[0,0]:=taCenter;//要是横向合并单元格可以居中

| 姓名 |
| |
 
AdvStringGrid.HAlignment 。
 
不对啊,楼上的,报错!好像没有.HAlignment
 
procedure TForm1.AdvStringGrid1GetAlignment(Sender: TObject; ARow,
ACol: Integer; var HAlign: TAlignment; var VAlign: TVAlignment);
begin
end;
 
是在AdvStringGrid的OnGetAlignment事件 。
 
需要定义么?怎么用阿?
 
你在AdvStringGrid的事件里就能找到此事件。 Object Inspector -> Event选项页 。
 
procedure TForm1.AdvStringGrid1GetAlignment(Sender: TObject; ARow,
ACol: Integer; var HAlign: TAlignment; var VAlign: TVAlignment);
begin
end;
ARow: 指定哪一行;
ACol: 指定哪一列;
HAlign: 水平控制;
VAlign: 垂直控制。
 
TAlignment = (taLeftJustify, taRightJustify, taCenter);
TVAlignment = (vtaTop,vtaCenter,vtaBottom);
 
ADVstringgrid1.MergeCells(0,0,1,2);
ADVstringgrid1.Cells[0,0]:='姓名';
ADVstringgrid1.VAlignment:=vtaCenter;//为什么不能居中?
ADVstringgrid1.Alignments[0,0]:=taCenter;//要是横向合并单元格可以居中
这个放在formshow里就可以
我要实现这个功能要把以上的内容放在
procedure TForm1.AdvStringGrid1GetAlignment(Sender: TObject; ARow,
ACol: Integer; var HAlign: TAlignment; var VAlign: TVAlignment);
begin
end; ?
 
procedure TForm1.AdvStringGrid1GetAlignment(Sender: TObject; ARow,
ACol: Integer; var HAlign: TAlignment; var VAlign: TVAlignment);
begin
if (ARow = 0) and (ACol = 0) then
begin
HAlign:= taCenter;
VAlign:= vtaCenter;
end;
end;
 
我是不是很笨啊?还是没有效果阿
 
那你执行代码以后的效果是怎样的?
 
| 姓名 |
| |
我把你给的代码放到了Grid1GetAlignment
没有任何效果
要是加上改称下面的格式就闪的特别厉害
HAlign:= taCenter;
VAlign:= vtaCenter;
ADVstringgrid1.Cells[0,0]:='姓名';
 
那就是说“姓名”仍然没有居中? 你知道AdvStringGrid第0行或第0列的单元格的颜色吗 ? 那是什么颜色的?
 
不好意思 ,刚才说错了。不可能得到颜色值。
 
procedure TForm1.AdvStringGrid1DrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
if (ARow = 0) and (ACol = 0) then
begin
DrawText(AdvStringGrid1.Canvas.Handle,'姓名',Length('姓名'),Rect,DT_CENTER + DT_SINGLELINE + DT_VCENTER);
end;
end;
 
那就是说“姓名”仍然没有(上下)居中?如果是一个单元格就可以了,我用的是合并两个单元格。
第0行或第0列的单元格的颜色?跟这个有关系么?我没有改过阿,默认的
第0行第1行都是固定行!
 
下面的代码应该可以了:
procedure TForm1.AdvStringGrid1DrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
if (ARow = 0) and (ACol = 0) then
begin
DrawText(AdvStringGrid1.Canvas.Handle,'姓名',Length('姓名'),Rect,DT_CENTER + DT_SINGLELINE + DT_VCENTER);
end;
end;
 
Rect错误提示:Types of actual and formal var parameters must be identical
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部