Her er et meget simpelt eksempel til at lave din egen undo liste!
type
TUndo = record
S : string;
I : Integer;
end;
var
Undo : array of TUndo;
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
//Hvis Ctrl+Z tastetur kombination blev fundet...
if Key = Chr(26) then
begin
//Kun hvis der findes noget i Undo array'en
if High(Undo) > -1 then
begin
//...så kopier tekst med teksten fra undo array'en...
Memo1.Text := Undo[High(Undo)].S;
//...og flyt markøren...
Memo1.SelStart := Undo[High(Undo)].I;
SetLength(Undo,High(Undo));
end;
//Disabler Ctrl+Z funktionen
Key := #0;
end
else
//...ellers kopier tekst og markørens position til Undo array'en!"
begin
SetLength(Undo,High(Undo)+2);
Undo[High(Undo)].S := Memo1.Text;
Undo[High(Undo)].I := Memo1.SelStart;
end;
end;
I eksemplet er der blevet brugt en TMemo og koden er skrevet i dens OnKeyPress property!
Som jeg sagde er det en meget simpel eksempel, da den stort set bare kopier hele teksten i en array! Dette er selvfølig ikke meget hensigtsmæssigt, hvis du vil skrive lange tekster, men det er kun for at vise dig hvordan det kan lade sig gøre!
På denne måde kan du fortryde, hver enkelt tast lige fra din start position! Jeg vil anbefale dig at korte det lidt ned, så foreksempel kun når der bliver trykket på space bliver der kopieret tekst til Undo array'en. Det vil dermed resultere i at du kun kan fortyde for hvert ord, men det vil også betyde at det ikke kommer til at fylde så meget i hukommelsen!
Held og Lykke
Søren Klit Lambæk
[Redigeret d. 27/03-04 20:10:17 af Søren Klit Lambæk]