加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

StringGrid行列控制/数据修改

(2008-04-11 14:35:53)
标签:

杂谈

分类: StringGrid学习
一、StringGrid如何控制某几列数据不允许修改
    1、在OnSelectCell事件  
       判断ACol,   ARow,   如果在不允许的范围内则CanSelect   :=   false;
    2、在OnSelectCell事件中控制可编辑属性
      例:With StringGrid1 do
            if ACol = 2 then   
               Options := Options [goEditing]  
            else   
               Options := Options [goEditing];   
二、单元格数据读取与修改
    1、数据读取:在OnSelectCell事件中完成
       例:With StringGrid1 do
             Edit1.Text := Cells[ACol,ARow];
    2、修改数据:如果按上面方式修改了单元格编辑属性,可以直接修改;
       或者直接赋值:
       With StringGrid1 do
         Cells[Col,Row] := Edit1.Text;
三、行、列数添加,删除

    type
    TStringCell = class(TStringGrid)

    public
      procedure DeleteRow(ARow: Longint);
      procedure DeleteColumn(ACol: Longint);
      procedure InsertRow(ARow: LongInt);
      procedure InsertColumn(ACol: LongInt);
    end;

    procedure TStringCell.InsertColumn(ACol: Integer);
    begin
      ColCount :=ColCount +1;
      MoveColumn(ColCount-1, ACol);
    end;

    procedure TStringCell.InsertRow(ARow: Integer);
    begin
      RowCount :=RowCount +1;
      MoveRow(RowCount-1, ARow);
    end;

    procedure TStringCell.DeleteColumn(ACol: Longint);
    begin
      MoveColumn(ACol, ColCount -1);
      ColCount := ColCount - 1;
    end;

    procedure TStringCell.DeleteRow(ARow: Longint);
    begin
      MoveRow(ARow, RowCount - 1);
      RowCount := RowCount - 1;
    end;

四、在StringGrid中双击一个单元格,怎样才能知道双击的是哪个单元格?
    Edit2.Text := RzStringGrid1.Cells[(Sender As TRzStringGrid).Col,(Sender As TRzStringGrid).Row];

五、实现单元格文字换行显示

    在OnDrawCell事件中添加如下代码

    with   StringGrid1   do  

      DrawText(Canvas.Handle,pchar(Cells[Acol,Arow]),Length(Cells[Acol,Arow]),Rect,DT_WORDBREAK or DT_LEFT);
六、在StringGrid中,根据数据条件显示相应颜色字体和背景颜色,并且显示居中。

   在OnDrawCell事件中添加如下代码

   with   StringGrid1   do  

      begin
          Canvas.FillRect(Rect);
          s:=Cells[ACol,ARow];
          if  ARow > 0   then    // 第一行除外
            if (S <> '-') and (S <> '') then 
               begin

                  //使字符改变颜色的设定条件 
                  if ABS(StrtoFloat(S)) > SetValue then

                     begin

                         Canvas.Font.Color := clRed;

                         Canvas.Brush.Color:= clYellow;

                      end
                  else
                     begin

                         Canvas.Font.Color := clWindowText;;

                         Canvas.Brush.Color:= clWhite;

                      end;
 
              end;
          //  使字符居中显示
          DrawText(Canvas.Handle, PChar(s), Length(s),Rect, DT_CENTER  or DT_SINGLELINE or DT_VCENTER);  
      end;



  

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有