WinForm下Grid单元格的合并讨论摘录【2】
来源:互联网 发布:c语言生命游戏 编辑:程序博客网 时间:2024/05/17 02:12
Q1:dbgrid如何合并单元格?那stringgrid可以合并吗?
A1:
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State)
{
int c1 = 3, r1 = 3, c2 = 5, r2 = 5;//自己修改这些行、列值
if( ACol > = c1 && ACol <= c2 && ARow > =r1 && ARow <= r2 ) {
TRect rect1 = StringGrid1-> CellRect(c1,r1);
TRect rect2 = StringGrid1-> CellRect(c2,r2);
TRect rect = TRect(rect1.left,rect1.top,rect2.left-1,rect2.bottom-1);
TStringGrid *grid = (TStringGrid*)Sender;
TCanvas *canvas = grid-> Canvas;
canvas-> FillRect(rect);
canvas-> Pen-> Color = clBlack;
canvas-> TextOutA(
rect.left + rect.Width()/2 - canvas-> TextWidth( "合并Grids ")/2,
rect.top + rect.Height()/2 - canvas-> TextHeight( "合并Grids ")/2,
"合并Grids ");
}
}
这个bcb的,你参考一下
A2:
unit Unit1;
//建立一工程,
//粘贴本单元代码即可看 STringGrid 行列合并效果
//但发现非固定行非固定列的合并效果不好
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Db, ADODB, DBTables, Grids;//注意这里要引用
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure SGDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure SGTopLeftChanged(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
// 以下 StringGrid 为固定行,固定列的合并所必须进行的处理
// 非固定行,非固定列的合并效果不好
var
sg:TStringGrid;
procedure TForm1.FormCreate(Sender: TObject);
var
i,j:integer ;
begin
Sg:=TStringGrid.Create(self);
with SG do
begin
parent:=self;
align:=alclient;
DefaultDrawing:=false;
FixedColor:=clYellow;
RowCount:=30;
ColCount:=20;
FixedCols:=1;
FixedRows:=1;
GridLineWidth:=0;
Options:=Options+[goEditing]-[goVertLine,goHorzLine,goRangeSelect];
OnDrawCell:=SGDrawCell;
OnTopLeftChanged:=SGTopLeftChanged;
Canvas.Font.name:= '宋体 ';
Canvas.Font.Size:=10;
for i:=0 to colCount-1 do
for j:=0 to RowCount-1 do
cells[i,j]:=Format( '%d行%d列 ',[j,i]);
for i:=0 to colCount-1 do
cells[i,0]:=Format( '第%d列 ',[i]);
for i:=0 to RowCount-1 do
cells[0,i]:=Format( '第%d行 ',[i]);
Cells[0,0]:= ' 左上角 ';
Cells[1,0]:= 'AA这是列合并BB ';
Cells[0,1]:= 'A这是行 '#10 '合并BB ';
Cells[1,1]:= '1111111 ';
Cells[1,2]:= '1111222 ';
Cells[2,1]:= '2222111 ';
Cells[2,2]:= '2222222 ';
end;
end;
//重载 OnDrawCell 事件
procedure TForm1.SGDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
r:TRect;
d:TStringGrid;
s:string;
ts:TStrings;
i,n:integer;
fixed:Boolean;
begin
d:=TStringGrid(sender);
if (Acol=2) and (ARow=0) then
begin
r.left:=Rect.left-1-d.colwidths[ACol-1];
r.top:=rect.top-1;
r.right:=rect.right;
r.bottom:=rect.bottom;
s:=d.cells[ACol-1,ARow];
end else
if (Acol=1) and (ARow=0) then
begin
r.left:=Rect.left-1;
r.top:=rect.top-1;
r.right:=rect.right+d.colwidths[ACol+1];
r.bottom:=rect.bottom;
s:=d.cells[ACol,ARow];
end //////////以上列合并
else
if (Acol=0) and (ARow=2) then
begin
r.left:=Rect.left-1;
r.top:=rect.top-1-d.RowHeights[ARow-1];
r.right:=rect.right;
r.bottom:=rect.bottom;
s:=d.cells[ACol,ARow-1];
end else
if (Acol=1) and (ARow=0) then
begin
r.left:=Rect.left-1;
r.top:=rect.top-1;
r.right:=rect.right;
r.bottom:=rect.bottom+d.RowHeights[ARow+1];
s:=d.cells[ACol,ARow];
end ////////以上为行合并
else
begin
r.left:=Rect.left-1;
r.top:=rect.top-1;
r.right:=rect.right;
r.bottom:=rect.bottom;
s:=d.cells[ACol,ARow];
end;
d.Canvas.brush.color:=d.color;
d.canvas.Font.color:=$ff0000;
Fixed:=false;
if (Arow <d.FixedRows) or (ACol <d.Fixedcols) then
begin
d.Canvas.brush.color:=d.FixedColor;
d.Canvas.Font.color:=$ff00ff;
Fixed:=True;
//d.Canvas.Font.style:=d.Canvas.Font.style+[fsBold];
end;
if gdfocused in state then
begin
d.canvas.Brush.color:=$00ff00;
end;
if fixed then
begin
d.Canvas.Pen.color:=$0;
d.canvas.Rectangle(r);
d.Canvas.Pen.color:=$f0f0f0;
d.Canvas.Pen.Width:=2;
d.canvas.Moveto(r.left+1,r.top+2);
d.canvas.Lineto(r.left+r.right,r.top+2);
d.Canvas.Pen.color:=$808080;
d.Canvas.Pen.Width:=1;
d.canvas.Moveto(r.Left+1,r.bottom-1);
d.canvas.Lineto(r.left+r.right,r.bottom-1);
end else
begin
d.Canvas.Pen.color:=$0;
d.Canvas.Pen.Width:=1;
d.canvas.Rectangle(r);
end;
n:=r.top+4;
ts:=TStringList.Create;
ts.CommaText:=s;
for i:=0 to ts.Count-1 do
begin
d.canvas.Textout(r.left+4,n,ts[i]);
inc(n,d.RowHeights[ARow]);
end;
end;
//重载 OnTopLeftChange事件,特别是行的合并
procedure TForm1.SGTopLeftChanged(Sender: TObject);
var
d:TStringGrid;
begin
d:=TStringGrid(Sender);
d.Cells[0,1]:=d.Cells[0,1];
d.Cells[0,2]:=d.Cells[0,2];
end;
end.
A3:dbgrid是stringgrid的子类,应该有相通之处
- WinForm下Grid单元格的合并讨论摘录【2】
- winform的DataGridView合并单元格
- Ext4.1grid单元格合并的解决方案
- ext grid合并单元格
- Extjs grid 合并单元格
- Ligerui grid 合并单元格
- ExtJs grid合并单元格
- Extjs Grid合并单元格
- ExtJS4 grid合并单元格
- 合并单元格 Winform
- ExtJs - grid 合并单元格 跨行跨列
- ExtJs - grid 合并单元格 跨行跨列
- liger 中grid 合并单元格
- ExtJs4 - grid 合并单元格 跨行跨列
- ExtJs4 - grid 合并单元格 跨行跨列
- 关于VS2005 WinForm下DataGridView单元格合并,背景色设置
- 关于VS2005 WinForm下DataGridView单元格合并,背景色设置
- extjs4.2 grid 合并单元格并居中显示
- 淡淡的微笑,静悄悄地过
- 淘宝笔试
- 我原来如此
- How to call code behind method in JavaScript in C# and VS2010?
- 断想
- WinForm下Grid单元格的合并讨论摘录【2】
- 紫薇花开的季节(二)
- 做饭记
- Android Location在GPS中的应用(二)
- 那时,我们正年轻
- android2.2源码编译过程遇到的问题
- 薄荷花开
- 详解Spring中bean的scope
- 青春划过指尖