我希望实现以下操作:
在AdvStringGrid中输入:
输入        显示
1     :    1
12    :    12
123   :    123
1234  :    1,234
......
我写了个加“,”的函数(SetData)和去“,”的函数(ResumeData),在KeyUp中是这样用的: 
  r := AdvStringGrid1.Row;
  c := AdvStringGrid1.Col;
  AdvStringGrid1.Cells[c, r] := SetData(ResumeData(TmpStr));
不能实现;
但在Edit的KeyUp中用: Edit1.Text := SetData(ResumeData(Edit1.Text));
却可以实现,请大家帮帮忙,谢谢!

解决方案 »

  1.   

    给你写好了,可以给分了
    var
      Form1: TForm1;
      ECol,Erow:integer;
    implementation{$R *.dfm}
    function aa(s:string):string;
    var
    left,i,n:integer;
    begin
    n:=ceil(length(s)/3);
    if n>1 then
    begin
    left:=length(s) mod 3;
    result:=copy(s,1,left);
    for i:=1 to n-1 do
    result:=result+','+copy(s,left+(i-1)*3+1,3);
    end else result:=s;
    end;procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol,
      ARow: Integer; const Value: String);
    begin
    ECol:=ACol;
    ERow:=ARow;
    end;procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
      ARow: Integer; var CanSelect: Boolean);
    begin
    StringGrid1.Cells[ECol,ERow]:=aa(StringGrid1.Cells[ECol,ERow]);
    end;
      

  2.   

    设置GetFloatFormat事件就可以达到你的要求procedure TForm1.AdvStringGrid1GetFloatFormat(Sender: TObject; ACol,
      ARow: Integer; var IsFloat: Boolean; var FloatFormat: String);
    begin
      IsFloat :=  ACol in [1,2,3];
      FloatFormat := '%8.2n';
    end;
      

  3.   

    To : hys_427
      谢谢回复,我的加“,”的函数已经写了,而且要求的是在输入的过程中就自动加“,”,而不是改变焦点才加。
    To : hotzhu 
      谢谢回复,你提供的方法很好,不过会改变输入的格式,而且也不是在输入的过程中自动加“,”。
      

  4.   

    没人做过类似的吗?能在AdvStringGrid中得到光标位置也行啊!
      

  5.   

    终于解决了,将AdvStringGrid的Navigation中的EditSelectAll属性设置为False就可以像Edit那样用了。谢谢大家的参与!