// Hiermit kann man Eingaben in eine Zelle eines Stringgrids rückgängig
// machen. Es werden nicht einzelne Zeichen sondern der komplette Inhalt
// einer Zelle aufgezeichnet bzw. zurückgespeichert.

// Getestet mit D4 unter WinME

type 
  rcd = record 
    ACol, ARow: Integer; 
    txt: string; 
  end; 
 
const 
  anzahl = 10; // Anzahl der Schritte, die rückgängig gemacht werden können 
  welcher: byte = 0; 
  eingabe: boolean = false; 
 
var 
  a: array[0..anzahl - 1] of rcd; 
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  stringgrid1.options := stringgrid1.options + [goEditing]; 
// kann auch im Objektinspektor eingestellt werden 
end; 
 
procedure undo_proc(C, R: integer; txt: string); 
var x: integer; 
begin 
  if welcher = anzahl then begin 
    for x := 0 to anzahl - 2 do begin 
      a[x].ACol := a[x + 1].ACol; 
      a[x].ARow := a[x + 1].ARow; 
      a[x].txt := a[x + 1].txt; 
    end; 
    dec(welcher); 
  end; 
  a[welcher].ACol := C; 
  a[welcher].Arow := R; 
  a[welcher].txt := txt; 
  inc(welcher); 
end; 
 
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, 
  ARow: Integer; var CanSelect: Boolean); 
begin 
  eingabe := false; 
end; 
 
procedure TForm1.StringGrid1Exit(Sender: TObject); 
begin 
  eingabe := false; 
end; 
 
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char); 
begin 
  if key = #13 then eingabe := false; 
end; 
 
procedure TForm1.StringGrid1GetEditText(Sender: TObject; ACol, 
  ARow: Integer; var Value: string); 
begin 
  if not eingabe then undo_proc(ACol, ARow, Value); 
  eingabe := true; 
end; 
 
 
// Undo durchführen 
 
procedure TForm1.Button3Click(Sender: TObject); 
begin 
  if welcher > 0 then begin 
    dec(welcher); 
    stringgrid1.col := a[welcher].ACol; 
    stringgrid1.row := a[welcher].ARow; 
    stringgrid1.cells[a[welcher].ACol, a[welcher].ARow] := a[welcher].txt; 
  end; 
end; 

 


 

Zugriffe seit 6.9.2001 auf Delphi-Ecke