在移动完以后取col信息吧,通过Cells[i, 0]取首行的col名称

解决方案 »

  1.   


    感谢一楼!
    这个方法我有想过,但在此需求里不适用,因为实际上文档里记录的等号前是初始栏位名,等号后是更改后的栏位名,有可能在拖动时栏位名已经被改了。这样写似乎更清楚:
    【拖动后】(把ddd拖到aaa和bbb之间)
    ---StringGrid---
    aaa  ddd  2  3  eee---文档---
    aaa =1
    ddd =4
    bbb =2
    ccc =3
    eee =5
      

  2.   

    楼主补充:这是一个修改报表的需求,下面我把用户的需求完整的列一下吧:1.生成报表的栏位可让user自行设定。
    2.生成报表的栏位名称可让user自行定义。
    3.生成报表的栏位顺序可让user自行设定。
    4.以上3点的设定可以储存(SAVE)与载入(LOAD)。就是这个栏位顺序不好办,没有思路啊~~大家帮帮忙!
      

  3.   

    自己琢磨出来了,贴上来,可以给以后进入这个帖子的人参考:
    procedure TfReport.strgridwoColumnMoved(Sender: TObject; FromIndex, ToIndex: Integer);
    var ListRep : TstringList;
    begin
      ListRep := TStringList.Create;
        ListRep.LoadFromFile('C:\temp.ini');  //关联文件
        ListRep.Insert(ToIndex+1,ListRep[FromIndex]); //从拖动前的位置insert到拖动后的位置
        ListRep.Delete(FromIndex+1); //将拖动前的资料删除
        ListRep.SaveToFile('C:\temp.ini');  //保存
        ListRep.Free; //释放
    end;
      

  4.   

    procedure TfReport.strgridwoColumnMoved(Sender: TObject; FromIndex, ToIndex: Integer);
    var ListRep : TstringList;
    begin
      ListRep := TStringList.Create;
        ListRep.LoadFromFile('C:\temp.ini');  //关联文件
        ListRep.Insert(ToIndex+1,ListRep[FromIndex]); //从拖动前的位置insert到拖动后的位置
        ListRep.Delete(FromIndex+1); //将拖动前的资料删除
        ListRep.SaveToFile('C:\temp.ini');  //保存
        ListRep.Free; //释放
    end; 
      

  5.   

    我们是把拖动后的列的名称和列的宽度都按先后顺序存在ini文件里的,下次加载就按这个顺序和宽度初始化这个stringgrid