天天头条:Delphi TStringGrid单元格合并

2023-06-22 16:43:15 来源:个人图书馆-hncdman

设定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

标签:

企业要闻

新闻快讯