OSDN Git Service

区切りのコミット
authoryamat0jp <yamat0jp@yahoo.co.jp>
Sat, 25 Sep 2021 05:24:49 +0000 (14:24 +0900)
committeryamat0jp <yamat0jp@yahoo.co.jp>
Sat, 25 Sep 2021 05:24:49 +0000 (14:24 +0900)
Undo.pas
Unit1.pas
json_checker.dproj

index 65b81c4..2d47076 100644 (file)
--- a/Undo.pas
+++ b/Undo.pas
@@ -35,6 +35,11 @@ type
     procedure Execute; override;
   end;
 
+  TUnRETURN = class(TUndoBase)
+  public
+    procedure Execute; override;
+  end;
+
   TUndoClass = class(TComponent)
   private
     FStack: TObjectStack;
@@ -42,17 +47,19 @@ type
     FCnt: integer;
     function GetCanUndo: Boolean;
     procedure Clear;
+    procedure SetMemo(const Value: TCustomMemo);
   public
     constructor Create(AOwner: TComponent); override;
     procedure Deleted(const str: string; pos: integer; top: Boolean);
     procedure Inputted(c: Char; pos: integer);
+    procedure Returned(pos: integer);
     procedure Pasted(const str: string; pos: integer);
     procedure Execute;
     destructor Destroy; override;
     procedure UpCount;
     procedure ResetCnt;
   published
-    property Memo: TCustomMemo read FMemo write FMemo;
+    property Memo: TCustomMemo read FMemo write SetMemo;
     property CanUndo: Boolean read GetCanUndo;
   end;
 
@@ -114,7 +121,7 @@ procedure TUndoClass.Inputted(c: Char; pos: integer);
 var
   data: TUnPaste;
 begin
-  if (FCnt > 0) and (FStack.Count > 0) then
+  if (FCnt > 0) and (FStack.Count > 0) and (FStack.Peek is TUnPaste) then
   begin
     data := FStack.Peek as TUnPaste;
     data.FLen := data.FLen + 1;
@@ -145,6 +152,35 @@ begin
   FCnt := 0;
 end;
 
+procedure TUndoClass.Returned(pos: integer);
+var
+  obj: TUnRETURN;
+begin
+  obj := TUnRETURN.Create;
+  obj.FPos := pos;
+  obj.FMemo := FMemo;
+  FStack.Push(obj);
+end;
+
+procedure TUndoClass.SetMemo(const Value: TCustomMemo);
+var
+  obj: TUndoBase;
+  i: integer;
+  List: TList;
+begin
+  FMemo := Value;
+  List := TList.Create;
+  for i := 1 to FStack.Count do
+  begin
+    obj := FStack.Pop as TUndoBase;
+    obj.FMemo := Value;
+    List.Add(obj);
+  end;
+  for i := List.Count - 1 downto 0 do
+    FStack.Push(List[i]);
+  List.Free;
+end;
+
 procedure TUndoClass.UpCount;
 begin
   inc(FCnt);
@@ -177,17 +213,40 @@ end;
 
 procedure TUnPaste.Execute;
 begin
-  FMemo.SelStart := FPos;
-  FMemo.SelLength := FLen;
-  FMemo.SelText := '';
+  if FMemo <> nil then
+  begin
+    FMemo.SelStart := FPos;
+    FMemo.SelLength := FLen;
+    FMemo.SelText := '';
+  end;
 end;
 
 { TUnInput }
 
 procedure TUnInput.Execute;
 begin
-  FMemo.SelStart := FPos;
-  FMemo.SelText := '';
+  if FMemo <> nil then
+  begin
+    FMemo.SelStart := FPos;
+    FMemo.SelText := '';
+  end;
+end;
+
+{ TUnRETURN }
+
+procedure TUnRETURN.Execute;
+var
+  i: integer;
+  s: string;
+begin
+  if FMemo <> nil then
+  begin
+    FMemo.SelStart := FPos;
+    i := FMemo.CaretPos.Y;
+    FMemo.Lines[i] := FMemo.Lines[i] + FMemo.Lines[i + 1];
+    FMemo.Lines.Delete(i + 1);
+    FMemo.SelStart:=FPos;
+  end;
 end;
 
 end.
index c67167f..6c14800 100644 (file)
--- a/Unit1.pas
+++ b/Unit1.pas
@@ -76,6 +76,7 @@ type
     procedure loop(item: TTreeNode; JSON: TJSONObject);
     procedure arrloop(item: TTreeNode; arr: TJSONArray);
     function returnChar(c: TIndxChar): Char;
+    procedure inputsub(Key: Char);
   public
     { Public \90é\8c¾ }
   end;
@@ -151,6 +152,20 @@ begin
   Undo.Free;
 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;
+end;
+
 procedure TForm1.loop(item: TTreeNode; JSON: TJSONObject);
 var
   i: integer;
@@ -230,16 +245,8 @@ begin
           delstr := Memo1.Text[Memo1.SelStart]
         else
           delstr := Memo1.SelText;
-    VK_RETURN:
-      ;
   else
-    delstr := Memo1.SelText;
-    delpos := Memo1.SelStart;
-    charmodi := false;
-    if delstr <> '' then
-      Undo.Deleted(delstr, Memo1.SelStart, false);
-    Undo.Inputted(Key, delpos);
-    Undo.UpCount;
+    inputsub(Key);
   end;
 end;
 
index 5ea5979..348f24e 100644 (file)
@@ -5,7 +5,7 @@
         <FrameworkType>VCL</FrameworkType>
         <MainSource>json_checker.dpr</MainSource>
         <Base>True</Base>
-        <Config Condition="'$(Config)'==''">Release</Config>
+        <Config Condition="'$(Config)'==''">Debug</Config>
         <Platform Condition="'$(Platform)'==''">Win64</Platform>
         <TargetedPlatforms>3</TargetedPlatforms>
         <AppType>Application</AppType>