Stringgrid 的异常显示(40分)

  • 主题发起人 主题发起人 C.g.Lee
  • 开始时间 开始时间
C

C.g.Lee

Unregistered / Unconfirmed
GUEST, unregistred user!
Grd(Stringgrid)的DefaultDraw:=True;
procedure TForm.GrdDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
Begin
with StringGrd do
begin
if (ARow Mod 2=1)and(ACol<>0) then
begin
Canvas.Brush.Color :=clInfoBk;
Canvas.FillRect(Rect);
Canvas.Font.Name:='Tahoma';
end;
Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, Cells[ACol,ARow]);
end;
end;


初始化状态 Grd1.Cells[1,1]:='';
Grd1.Cells[1,1]:='xx';
它不能使Cells[1,1]立即显示为xx,但在StringGrd.Cells[1,1]位置CLick
Cells[1,1]显示出'XX'
问题出在哪里,该如何解决!谢谢!
 
defaultDraw := False.
 
StrGrd.DefaultDraw:=False;
StrGrd.ongrdDrawCell()
with StrGrd do
begin
if (ARow Mod 2=0) then
Begin
if ARow=0 then
Begin
Canvas.Brush.Color:=ClBtnFace;
Canvas.FillRect(Rect);
End
Else Begin
Canvas.Brush.Color:=ClWIndow;
Canvas.FillRect(Rect);
End;
end;
if (ARow Mod 2=1)and(ACol<>0) then
begin
Canvas.Brush.Color :=clInfoBk;
Canvas.FillRect(Rect);
Canvas.Font.Name:='Tahoma';
end;
Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, Cells[ACol,ARow]);
end;
但是Grd1的标题栏的绘制效果没有它本身绘出的3D效果,该如何绘制!
 

我试了一下上面的程序,建议还是将 DefaultDrawing 设为 True, 另外在
ongrdDrawCell()的开始加上下面一句:if (ARow=0) or (ACol=0) then exit;
这样的话你就不用考虑标题栏的3D效果了。

至于初始化状态 Grd1.Cells[1,1]:='';Grd1.Cells[1,1]:='xx';
它不能使Cells[1,1]立即显示为xx, 如果允许的话,将StringGrid的TabOrder设为
第一个,就没有问题了,否则可以想点别的小招,总比自己去考虑标题栏的3D效果
要省事些。
 
>>Grd(Stringgrid)
>>with StringGrd do
到底是哪个?好象不同的名啊。
我怎么看想是不同的两个?
 
康夫:
你的方法好象没有用,请另想它法!

白马小将:
不要钻文字的空子,可以帮我搞定吗!

 
继续帮忙吧!
C.g.Lee
 
附加功能 将问题提前
 
下面是我的代码,DefaultDrawing 保持原来的值:True
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
with StringGrid1 do
begin
if (ARow Mod 2=1)and(ACol<>0) then
begin
Canvas.Brush.Color :=clInfoBk;
Canvas.FillRect(Rect);
Canvas.Font.Name:='Tahoma';
Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
with Stringgrid1 do
begin
Cells[1,1]:='xx';
end;
end;
没有任何问题,但是我发现,如果该单元格处于被选中的状态,文字就看不见了,这是因为
你没有考虑单元格状态的原因,也就是 OnDrawCell 事件传入的参数:State: TGridDrawState。
State 可能有以下几种状态:
TGridDrawState = set of (gdSelected, gdFocused, gdFixed);
From: BaKuBaKu
 
>>如果该单元格处于被选中的状态,文字就看不见了,这是因为你没有考虑单元格状态的原因
文字看不见是因为和背景颜色相同了,需要在TextOut前加上一句:
... ...
Canvas.Font.Color := clBlack;
Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);
... ...
绝对不会出现文字看不见的问题。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
830
SUNSTONE的Delphi笔记
S
I
回复
0
查看
548
import
I
I
回复
0
查看
612
import
I
后退
顶部