我想修改 StringGrid1->Options->goRowSelect的属性(true和false之间切换)
StringGrid1.Options := StringGrid1.Options - [goRowSelect]
StringGrid1.Options := StringGrid1.Options + [goRowSelect]
这样可行吗?
我写有一段代码,改变stringgrid当前行颜色的. if gdSelected in State then
with TStringGrid(Sender) do
begin
StringGrid1.Canvas.Brush.Color:=colorGrid1.ForegroundColor;
StringGrid1.Canvas.FillRect(rect);
StringGrid1.Canvas.Font.Color := colorGrid1.BackgroundColor;
//绘制文本
StringGrid1.Canvas.FillRect(rect);
DrawText(StringGrid1.Canvas.Handle,Pchar(StringGrid1.Cells[aCol,aRow]),Length(StringGrid1.Cells[aCol,aRow]),rect,0);
end;
procedure TForm1.StringGrid1DblClick(Sender: TObject);
begin
StringGrid1.Options := StringGrid1.Options - [goRowSelect]
end;
procedure TForm1.StringGrid1Click(Sender: TObject);
begin
// StringGrid1.Options := StringGrid1.Options + [goRowSelect]
end;我发现要把goRowSelect设为true时才会修改一行的颜色,否则只会修改当前单元格的颜色.
可是当goRowSelect为true时,我不能双击修改单元格的内容了.
于是我想设置成鼠标单击时goRowSelect为true,改变一行颜色;鼠标双击时goRowSelect为false,能修改当前单元格.
不过上面我写的代码并不能实现.当我单击时,只能修改每行第一列中单元格的数据.
不知道是我属性设置方法错误,还是哪里不对,请大家帮我参考下
StringGrid1.Options := StringGrid1.Options - [goRowSelect]
StringGrid1.Options := StringGrid1.Options + [goRowSelect]
这样可行吗?
我写有一段代码,改变stringgrid当前行颜色的. if gdSelected in State then
with TStringGrid(Sender) do
begin
StringGrid1.Canvas.Brush.Color:=colorGrid1.ForegroundColor;
StringGrid1.Canvas.FillRect(rect);
StringGrid1.Canvas.Font.Color := colorGrid1.BackgroundColor;
//绘制文本
StringGrid1.Canvas.FillRect(rect);
DrawText(StringGrid1.Canvas.Handle,Pchar(StringGrid1.Cells[aCol,aRow]),Length(StringGrid1.Cells[aCol,aRow]),rect,0);
end;
procedure TForm1.StringGrid1DblClick(Sender: TObject);
begin
StringGrid1.Options := StringGrid1.Options - [goRowSelect]
end;
procedure TForm1.StringGrid1Click(Sender: TObject);
begin
// StringGrid1.Options := StringGrid1.Options + [goRowSelect]
end;我发现要把goRowSelect设为true时才会修改一行的颜色,否则只会修改当前单元格的颜色.
可是当goRowSelect为true时,我不能双击修改单元格的内容了.
于是我想设置成鼠标单击时goRowSelect为true,改变一行颜色;鼠标双击时goRowSelect为false,能修改当前单元格.
不过上面我写的代码并不能实现.当我单击时,只能修改每行第一列中单元格的数据.
不知道是我属性设置方法错误,还是哪里不对,请大家帮我参考下
是不是,要stringgrid可以编辑,并且实现点击单元格该行变色
可是当我用StringGrid1.Options := StringGrid1.Options +/- [goRowSelect]等方式设置时,单击只能修改每行第一列的单元格内容
procedure TForm3.StringGrid1Click(Sender: TObject);
begin
StringGrid1.Refresh;
end;procedure TForm3.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
With StringGrid1 Do
Begin
If ARow = StringGrid1.Row Then
Begin
Canvas.Brush.Color := clHighlight;
Canvas.Font.Color := clGreen;
End
else
begin
if (ARow<>0)and (ACol<>0) then
begin
Canvas.Brush.Color := clwhite;
Canvas.Font.Color := clGreen;
end;
end;
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, Cells[ACol, ARow]);
End;
end;
你的代码解决了我的问题,谢谢.
本来我是取消单击事件,在右键菜单添加编译模式(StringGrid1.Options := StringGrid1.Options - [goRowSelect],原单击事件代码)
和只读模式(StringGrid1.Options := StringGrid1.Options + [goRowSelect],原双击事件代码)
来解决的,因为单击事件和双击事件在实际操作时有冲突,不方便.
可以安心结贴了^_^
http://topic.csdn.net/u/20080724/09/25457ebc-b544-4632-90b3-39ae0a56a71a.html?seed=1970045154
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;