我想修改 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,能修改当前单元格.
不过上面我写的代码并不能实现.当我单击时,只能修改每行第一列中单元格的数据.
不知道是我属性设置方法错误,还是哪里不对,请大家帮我参考下

解决方案 »

  1.   

    StringGrid1.Options:=StringGrid1.Options+[goediting]就可以随便修改
      

  2.   

    不懂...我要分别设置goRowSelect为true和false,怎么写?
      

  3.   

    你要实现什么?
    是不是,要stringgrid可以编辑,并且实现点击单元格该行变色
      

  4.   

    恩 就是这样
    可是当我用StringGrid1.Options := StringGrid1.Options +/- [goRowSelect]等方式设置时,单击只能修改每行第一列的单元格内容
      

  5.   


    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;
      

  6.   

    StringGrid的goRowSelect要设为False;goEditing要设为True;
      

  7.   

    to : xiangzi15 
    你的代码解决了我的问题,谢谢.
    本来我是取消单击事件,在右键菜单添加编译模式(StringGrid1.Options := StringGrid1.Options - [goRowSelect],原单击事件代码)
                                         和只读模式(StringGrid1.Options := StringGrid1.Options + [goRowSelect],原双击事件代码)
    来解决的,因为单击事件和双击事件在实际操作时有冲突,不方便.
    可以安心结贴了^_^
      

  8.   

    最后,浏览该贴的能教我解决另外一个问题就好了
    http://topic.csdn.net/u/20080724/09/25457ebc-b544-4632-90b3-39ae0a56a71a.html?seed=1970045154
      

  9.   

    应该是这样了。procedure TForm3.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      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;