gpt4 book ai didi

delphi - 在 StringGrid 中撤消操作

转载 作者:行者123 更新时间:2023-12-03 02:44:35 24 4
gpt4 key购买 nike

我的表单中有一个 StringGrid,当我按下 Button1 时,我会在该网格内移动一些单元格。这是一个例子:

enter image description here

当我按下Button1时,我从情况A转到情况B。但我也希望能够做相反的事情:我的意思是我想当我按下另一个名为 Button2 的按钮时,从 B 转到 A。

我想创建一个类似“撤消”按钮的东西。我怎么能这样做呢?我正在使用拉撒路。

我只需要执行 1 次撤消操作。以下是移动 StringGrid 单元格的过程:

procedure TForm1.SortGrid(Grid : TStringGrid; const SortCol:integer; const datatype:integer; const ascending:boolean);

var
i : integer;
tempgrid:tstringGrid;
list:array of integer;
begin
tempgrid:=TStringgrid.create(self);

with tempgrid do
begin
rowcount:=grid.rowcount;
colcount:=grid.colcount;
fixedrows:=grid.fixedrows;
end;

with Grid do
begin
setlength(list,rowcount-fixedrows);
for i:= fixedrows to rowcount-1 do
begin
list[i-fixedrows]:=i;
tempgrid.rows[i].assign(grid.rows[i]);
end;

//Call the procedure and sort the stuff
Quicksort(Grid, list,0,rowcount-fixedrows-1,sortcol,datatype, ascending);

for i:=0 to rowcount-fixedrows-1 do
begin
rows[i+fixedrows].assign(tempgrid.rows[list[i]])
end;
row:=fixedrows;
end;

tempgrid.free;
setlength(list,0);
screen.cursor:=crdefault;

end;

当我点击 Button1 时...

SortGrid(StringGrid1,1,1,true);

最佳答案

您可以使用 Cols 属性来保存和恢复该列的内容:

var
MySavedData: TStringList;
begin
...
MySavedData := TStringList.Create;
// Save the contents of the column 1
MySavedData.Assign(StringGrid1.Cols[1]);
SortGrid(StringGrid1,1,1,true);
// Restore the contents of the column 1
StringGrid1.Cols[1] := MySavedData;
...
end;

显然 MySavedData 应该在某个时候被释放。

关于delphi - 在 StringGrid 中撤消操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24274211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com