假设有一stringgrid,设置defaultdrawing:=false;
有2行,第0行为fixedrows,要求单元格的文字为竖行显示(一个字一行),并要第0行的背景颜色为设置的FixedColor的颜色,比如红色.
第1行要求文字上下左右都居中.背景色为默认的白色.字的颜色为默认的黑色.不知怎么写代码,重绘的时候似乎总有问题.单独一个有求做似乎都能实现,但是几个要求搞在一起做,就不知道怎么重绘了,请指教.
在procedure TMainFrm.StringGrid1DrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);begin
if arow=0 then
begin
with stringgrid1 do
begin
canvas.Brush.color:=StringGrid1.FixedColor;
canvas.FillRect(Rect);
DrawText(StringGrid1.Canvas.Handle,
pChar(StringGrid1.Cells[ACol,ARow]),
Length(StringGrid1.Cells[ACol,ARow]),
Rect, DT_CENTER or DT_WORDBREAK or DT_VCENTER); // 折行垂直居中
end;
end; if arow=1 then
begin
canvas.FillRect(Rect);
DrawText(StringGrid1.Canvas.Handle,
pChar(StringGrid1.Cells[ACol,ARow]),
Length(StringGrid1.Cells[ACol,ARow]),
Rect, // 包含文字的矩形
DT_CENTER or // 水平居中
DT_SINGLELINE or // 不折行
DT_VCENTER); // 垂直居中
end;end;
有2行,第0行为fixedrows,要求单元格的文字为竖行显示(一个字一行),并要第0行的背景颜色为设置的FixedColor的颜色,比如红色.
第1行要求文字上下左右都居中.背景色为默认的白色.字的颜色为默认的黑色.不知怎么写代码,重绘的时候似乎总有问题.单独一个有求做似乎都能实现,但是几个要求搞在一起做,就不知道怎么重绘了,请指教.
在procedure TMainFrm.StringGrid1DrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);begin
if arow=0 then
begin
with stringgrid1 do
begin
canvas.Brush.color:=StringGrid1.FixedColor;
canvas.FillRect(Rect);
DrawText(StringGrid1.Canvas.Handle,
pChar(StringGrid1.Cells[ACol,ARow]),
Length(StringGrid1.Cells[ACol,ARow]),
Rect, DT_CENTER or DT_WORDBREAK or DT_VCENTER); // 折行垂直居中
end;
end; if arow=1 then
begin
canvas.FillRect(Rect);
DrawText(StringGrid1.Canvas.Handle,
pChar(StringGrid1.Cells[ACol,ARow]),
Length(StringGrid1.Cells[ACol,ARow]),
Rect, // 包含文字的矩形
DT_CENTER or // 水平居中
DT_SINGLELINE or // 不折行
DT_VCENTER); // 垂直居中
end;end;
解决方案 »
- Delphi可以實現類似java的static方法,即不需要class的實例就可以直接調用類方法
- 这个XML属性怎么读取??谢谢谢谢谢谢~~~~
- .
- 在Delphi下使用 DevExpress 控件的朋友,希望在此留下E-Mail或QQ,诚心交流、共同提高。
- 怎样得到随机字符串,刚学DELPHI!!拿分了!
- 我得一个工程打不开了,好奇怪
- 小鱼儿弟弟,老叫你哥哥,哈哈,害羞了吧!来!我现在有开始研究什么Automation了!呵呵!
- 怎样知道一个Dll中输出了哪些函数(如何编程?)
- 用copymemory或move把record的值移到array中时,为什么只能移动第一个值。
- 报表打印的问题(qrdbtext,qrdbrichtext,qrrichtext).
- 怎么不能回复帖子了?
- 修改属性的问题
因为第一行允许修改,修改后会出现重影.重复的字体出现在cell的左上角的位置.
ARow: Integer; Rect: TRect; State: TGridDrawState); begin
if arow=0 then
begin
with stringgrid1 do
begin
canvas.Brush.color:=StringGrid1.FixedColor;
canvas.FillRect(Rect);
DrawText(StringGrid1.Canvas.Handle,
pChar(StringGrid1.Cells[ACol,ARow]),
Length(StringGrid1.Cells[ACol,ARow]),
Rect, DT_CENTER or DT_WORDBREAK or DT_VCENTER); // 折行垂直居中
end;
end; if arow=1 then
begin
canvas.Brush.color:=clwhite;
canvas.FillRect(Rect);
DrawText(StringGrid1.Canvas.Handle,
pChar(StringGrid1.Cells[ACol,ARow]),
Length(StringGrid1.Cells[ACol,ARow]),
Rect, // 包含文字的矩形
DT_CENTER or // 水平居中
DT_SINGLELINE or // 不折行
DT_VCENTER); // 垂直居中
end; end;
arow=1行的cell里的字还是有背景色啊,点击修改后还是会出现重影啊
Rect: TRect; State: TGridDrawState);
begin
with stringgrid1 do
begin
if arow=0 then
begin
canvas.Brush.color:=StringGrid1.FixedColor;
canvas.FillRect(Rect);
DrawText(StringGrid1.Canvas.Handle,
pChar(StringGrid1.Cells[ACol,ARow]),
Length(StringGrid1.Cells[ACol,ARow]),
Rect, DT_CENTER or DT_WORDBREAK or DT_VCENTER); // 折行垂直居中
end;
if gdSelected in State then
begin
canvas.Brush.color:=clwhite;
canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left , Rect.Top , Cells[ACol, ARow]);
end;
if arow=1 then
begin
canvas.Brush.color:=clwhite;
canvas.FillRect(Rect);
DrawText(StringGrid1.Canvas.Handle,
pChar(StringGrid1.Cells[ACol,ARow]),
Length(StringGrid1.Cells[ACol,ARow]),
Rect, // 包含文字的矩形
DT_CENTER or // 水平居中
DT_WORDBREAK or // 不折行
DT_VCENTER); // 垂直居中
end;
end;
end;