关于stringgrid的焦点问题(100分)

  • 主题发起人 主题发起人 ren1983_wa
  • 开始时间 开始时间
R

ren1983_wa

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾:
我在程序中使用了stringgrid,启动时是空的,但是启动后stringgrid的cell[1,1]是蓝色的,请教下,应该怎样去掉???
 
把stringgrid 默认放上去以后启动 没有兰色啊
 
有的阿,你把控件放到from上,看到cell[1,1]就是蓝色的,运行程序也是,象选中一样
 
如果你不想显示这个蓝色。启动程序的时候选择使用代码选择一个不存在的单元格,
[0,0,-1,-1],这样就不会有了。
 
怎么选择阿?代码该怎么写?
 
焦点不放在stringgrid上应该不显兰色了吧
 
默认情况下无法去掉,只要一个cell被选中,就会有这个被选择的颜色,除非你自己画
procedure TForm1.StringGrid1DrawCell(Sender: TObject;
ACol, ARow: Integer;
Rect: TRect;
State: TGridDrawState);
begin
with TStringGrid(Sender)do
begin
if gdFixed in State then
begin
Canvas.Brush.Color:=FixedColor;
Canvas.Font.Color:=clWindowText;
end
else
if Focused and (gdSelected in State) then
begin
Canvas.Brush.Color:=clHighlight;
Canvas.Font.Color:=clHighlightText;
end
else
begin
Canvas.Brush.Color:=Color;
Canvas.Font.Color:=clWindowText;
end;
Canvas.FillRect(rect);
Canvas.TextOut(rect.Left+2,rect.Top+2,Cells[ACol,ARow]);
end;
end;
 
恩,这是个头痛的问题,我知道的目前最方便的解决办法,如下:
在OnDrawCell事件里
procedure TFrmTestEdit.SG_CC_ConfigDrawCell(Sender: TObject;
ACol,
ARow: Integer;
Rect: TRect;
State: TGridDrawState);
var
tmpGrid: TStringGrid;
begin
tmpGrid := (Sender as TStringGrid);
if gdSelected in State then
{屏蔽默认的选中格 yyl 07.12.18}
begin
tmpGrid.Canvas.Brush.Color := tmpGrid.Color;
tmpGrid.Canvas.Font.Color := tmpGrid.Font.Color;
end;

tmpGrid.Canvas.FillRect(Rect);


DrawText(tmpGrid.Canvas.Handle,
pChar(tmpGrid.Cells[ACol, ARow]),
Length(tmpGrid.Cells[ACol, ARow]),
Rect, // 包含文字的矩形
DT_CENTER or {DT_CENTER,DT_LEFT} // 水平居中
DT_SINGLELINE or // 不折行
DT_VCENTER) // 垂直居中
end;

重画选中格的颜色,和没选中的一样,就看不出来了。
 
你这样试试看,还会不会有蓝色的。
procedure TForm1.FormCreate(Sender:TObject);
var t:TGridRect;
begin
t.Left:=-1;
t.Right:=-1;
t.Top:=-1;
t.Bottom:=-1;
StringGrid1.Selection:=t;
end;
 
后退
顶部