OSDN Git Service

改行問題が進展
authoryamat0jp <yamat0jp@yahoo.co.jp>
Sat, 25 Sep 2021 11:12:40 +0000 (20:12 +0900)
committeryamat0jp <yamat0jp@yahoo.co.jp>
Sat, 25 Sep 2021 11:12:40 +0000 (20:12 +0900)
Undo.pas
Unit1.dfm
Unit1.pas

index e941977..cb921fd 100644 (file)
--- a/Undo.pas
+++ b/Undo.pas
@@ -14,14 +14,6 @@ type
     procedure ReDo; virtual; abstract;
   end;
 
-  TUnInput = class(TUndoBase)
-  private
-    FData: Char;
-  public
-    procedure Execute; override;
-    procedure ReDo; override;
-  end;
-
   TUnDelete = class(TUndoBase)
   private
     FStr: string;
@@ -46,6 +38,13 @@ type
     procedure ReDo; override;
   end;
 
+  TUnDelRet = class(TUndoBase)
+  private
+    FTop: Boolean;
+  public
+    procedure Execute; override;
+  end;
+
   TUndoClass = class(TComponent)
   private
     FStack: TObjectStack;
@@ -64,6 +63,7 @@ type
     procedure Deleted(const str: string; pos: integer; top: Boolean);
     procedure Inputted(c: Char; pos: integer);
     procedure Returned(pos: integer);
+    procedure DelReturn(num: integer; top: Boolean);
     procedure Pasted(const str: string; pos: integer);
     procedure Execute;
     procedure ReDo;
@@ -122,7 +122,7 @@ begin
       else
       begin
         obj.FStr := str + obj.FStr;
-        obj.FPos := obj.FPos-1;
+        obj.FPos := obj.FPos - 1;
       end;
     end
     else
@@ -154,6 +154,17 @@ begin
       FReStack.Pop.Free;
 end;
 
+procedure TUndoClass.DelReturn(num: integer; top: Boolean);
+var
+  obj: TUnDelRet;
+begin
+  obj := TUnDelRet.Create;
+  obj.FPos := num;
+  obj.FTop := top;
+  obj.FMemo := FMemo;
+  FStack.Push(obj);
+end;
+
 destructor TUndoClass.Destroy;
 begin
   Clear;
@@ -351,22 +362,6 @@ begin
   end;
 end;
 
-{ TUnInput }
-
-procedure TUnInput.Execute;
-begin
-  if FMemo <> nil then
-  begin
-    FMemo.SelStart := FPos;
-    FMemo.SelText := '';
-  end;
-end;
-
-procedure TUnInput.ReDo;
-begin
-
-end;
-
 { TUnRETURN }
 
 procedure TUnRETURN.Execute;
@@ -392,4 +387,17 @@ begin
   end;
 end;
 
+{ TUnDelRet }
+
+procedure TUnDelRet.Execute;
+begin
+  if FMemo <> nil then
+  begin
+    FMemo.SelStart := FPos;
+    FMemo.SelText := #13#10;
+    if FTop = false then
+      FMemo.SelStart:=FMemo.SelStart+1;
+  end;
+end;
+
 end.
index ea6582c..adda4a2 100644 (file)
--- a/Unit1.dfm
+++ b/Unit1.dfm
@@ -220,7 +220,7 @@ object Form1: TForm1
     Left = 200
     Top = 88
     Bitmap = {
-      494C010106000800800010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+      494C010106000800840010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
       0000000000003600000028000000400000002000000001002000000000000020
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
index e1a7159..b345a12 100644 (file)
--- a/Unit1.pas
+++ b/Unit1.pas
@@ -242,7 +242,15 @@ begin
     case Key of
       VK_DELETE:
       begin
-        if Memo1.SelLength = 0 then
+        if Memo1.CaretPos.X = Length(Memo1.Lines[Memo1.CaretPos.Y]) then
+        begin
+          Undo.DelReturn(Memo1.SelStart,true);
+          Undo.ResetDel;
+          Undo.ResetBack;
+          charmodi := true;
+          Exit;
+        end
+        else if Memo1.SelLength = 0 then
           delstr := Memo1.Text[Memo1.SelStart + 1]
         else
           delstr := Memo1.SelText;
@@ -260,7 +268,15 @@ begin
     VK_BACK:
       if Memo1.SelStart > 0 then
       begin
-        if Memo1.SelLength = 0 then
+        if Memo1.CaretPos.X = 0 then
+        begin
+          Undo.DelReturn(Memo1.SelStart,false);
+          Undo.ResetDel;
+          Undo.ResetBack;
+          charmodi := true;
+          Exit;
+        end
+        else if Memo1.SelLength = 0 then
           delstr := Memo1.Text[Memo1.SelStart]
         else
           delstr := Memo1.SelText;
@@ -268,7 +284,11 @@ begin
         Undo.Deleted(delstr, Memo1.SelStart-1, false);
         Undo.UpBackCnt;
       end;
+    VK_DELETE:
+      ;
   else
+    Undo.ResetDel;
+    Undo.ResetBack;
     inputsub(Key);
   end;
 end;