OSDN Git Service

簡易Undo&Redoができました
authoryamat0jp <yamat0jp@yahoo.co.jp>
Sat, 25 Sep 2021 06:58:28 +0000 (15:58 +0900)
committeryamat0jp <yamat0jp@yahoo.co.jp>
Sat, 25 Sep 2021 06:58:28 +0000 (15:58 +0900)
Undo.pas
Unit1.dfm
Unit1.pas

index 53602f2..7aff5b2 100644 (file)
--- a/Undo.pas
+++ b/Undo.pas
@@ -56,6 +56,7 @@ type
     procedure Clear;
     procedure DelRedoStack;
     procedure SetMemo(const Value: TCustomMemo);
+    function GetCanRedo: Boolean;
   public
     constructor Create(AOwner: TComponent); override;
     procedure Deleted(const str: string; pos: integer; top: Boolean);
@@ -70,6 +71,7 @@ type
   published
     property Memo: TCustomMemo read FMemo write SetMemo;
     property CanUndo: Boolean read GetCanUndo;
+    property CanRedo: Boolean read GetCanRedo;
   end;
 
 implementation
@@ -135,6 +137,11 @@ begin
   end;
 end;
 
+function TUndoClass.GetCanRedo: Boolean;
+begin
+  result:=FReStack.Count > 0;
+end;
+
 function TUndoClass.GetCanUndo: Boolean;
 begin
   result := FStack.Count > 0;
index d859d89..ea6582c 100644 (file)
--- a/Unit1.dfm
+++ b/Unit1.dfm
@@ -87,6 +87,7 @@ object Form1: TForm1
       Left = 87
       Top = 0
       Action = Action5
+      Enabled = False
       ImageIndex = 1
     end
     object ToolButton4: TToolButton
@@ -219,7 +220,7 @@ object Form1: TForm1
     Left = 200
     Top = 88
     Bitmap = {
-      494C0101060008007C0010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+      494C010106000800800010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
       0000000000003600000028000000400000002000000001002000000000000020
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
index c5d64cd..a8d9f36 100644 (file)
--- a/Unit1.pas
+++ b/Unit1.pas
@@ -105,6 +105,7 @@ var
 procedure TForm1.Action3Execute(Sender: TObject);
 begin
   Undo.Execute;
+  ToolButton11.Enabled := Undo.CanRedo;
 end;
 
 procedure TForm1.Action4Execute(Sender: TObject);
@@ -121,6 +122,7 @@ end;
 procedure TForm1.Action5Execute(Sender: TObject);
 begin
   Undo.ReDo;
+  ToolButton11.Enabled := Undo.CanRedo;
 end;
 
 procedure TForm1.arrloop(item: TTreeNode; arr: TJSONArray);
@@ -164,16 +166,16 @@ end;
 
 procedure TForm1.inputsub(Key: Char);
 begin
-    delstr := Memo1.SelText;
-    delpos := Memo1.SelStart;
-    charmodi := false;
-    if delstr <> '' then
-      Undo.Deleted(delstr, Memo1.SelStart, false);
-    if Key = Char(VK_RETURN) then
-      Undo.Returned(delpos)
-    else
-      Undo.Inputted(Key, delpos);
-    Undo.UpCount;
+  delstr := Memo1.SelText;
+  delpos := Memo1.SelStart;
+  charmodi := false;
+  if delstr <> '' then
+    Undo.Deleted(delstr, Memo1.SelStart, false);
+  if Key = Char(VK_RETURN) then
+    Undo.Returned(delpos)
+  else
+    Undo.Inputted(Key, delpos);
+  Undo.UpCount;
 end;
 
 procedure TForm1.loop(item: TTreeNode; JSON: TJSONObject);