天天头条:Delphi TStringGrid单元格合并
设定StringGrid的属性
DefaultDrawing :=False; //不用系统默认风格 选择自己画
(资料图片仅供参考)
1、列合并
在 DataDrawCell 过程添加如下代码:
var
s:string;
d:TStringGrid;
begin
d:=TStringGrid(sender);
s:=d.Cells[ACol,ARow];
d.Canvas.Font.Assign(d.Font);//制定字体
with d.Canvas do
begin
Brush.Color := clWindow; //制定单元格颜色
if gdFixed in State then
Brush.Color := d.FixedColor;
Font.Color := clWindowText;
//下面是设定合并列 合并标题栏 和第四行
if ((acol=1) or (acol=3)) and ((ARow=0) or (ARow=4))then
rect.Right:=rect.Right+rect.Right-rect.Left;
if ((acol=2) or (acol=4)) and ((ARow=0) or (ARow=4))then
rect.Left:=rect.Right;
//填充合并rect
FillRect(Rect);
with d do
//文字不居中
//TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[ACol, ARow]);
//使字符居中显示
DrawText(Canvas.Handle,PChar(s),Length(s),Rect,DT_CENTER or DT_SINGLELINE or DT_VCENTER);
end;
end;
2、行合并
定义:
StRow, StCol : Integer; // 起始合并的行,列序号
EdRow, EdCol : Integer; // 结束合并的行,列序号
将如下代码加入上述即可,下面实现第0列,第1-9行合并
条件:均采用默认高度和宽度
StRow := 1;
EdRow := 9;
if acol = 0 then
begin
if (ARow >= StRow) and (ARow < EdRow) then
rect.Bottom := rect.Bottom + (d.DefaultRowHeight+1)*(EdRow-ARow); // +1为边线宽带
if (ARow > StRow) and (ARow <= EdRow) then
rect.Top:= rect.Bottom;
end;
————————————————
版权声明:本文为CSDN博主「滔Roy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/baidu_24930139/article/details/94399616
标签:
企业要闻
-
人民网杭州9月17日电 (记者孙博洋)9月16日至17日,中国质量(杭州)大会在浙江杭州举行。在16日举行...
2021-09-18