From dce0557be35fe496752d68c913a32d1920faaec6 Mon Sep 17 00:00:00 2001 From: JianjunLiu Date: Wed, 29 Mar 2023 09:49:25 +0800 Subject: [PATCH] =?UTF-8?q?=E7=95=8C=E9=9D=A2=E5=BA=93-=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E6=8E=A7=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 鏁寸悊浠g爜 --- funcext/tvclib/utslmemo.tsf | 95 ++++++++++++++++++++----------------- 1 file changed, 52 insertions(+), 43 deletions(-) diff --git a/funcext/tvclib/utslmemo.tsf b/funcext/tvclib/utslmemo.tsf index 1235027..481ec02 100644 --- a/funcext/tvclib/utslmemo.tsf +++ b/funcext/tvclib/utslmemo.tsf @@ -1772,7 +1772,7 @@ type TCustomMemo = class(TCustomScrollControl,TCustomMemoCmd) // autosetgtwidth(); return DoTextChanged(p); end - function setcurrentLineColor(c); + function setcurrentLineColor(c); begin if ifnumber(c) and c<>fcurrentLineColor then begin @@ -2218,47 +2218,10 @@ type TCustomMemo = class(TCustomScrollControl,TCustomMemoCmd) // end function GetSelText(); begin - r := ""; - if not GetSelAvail()then return r; + if not GetSelAvail()then return ""; bb := GetBlockBegin(); ee := GetBlockEnd(); - if FSelectionMode=smLine then - begin - len := ee[0]; - for i := bb[0]to ee[0] do - begin - r += fLines[i-1].FStr; - if ibb[1]and ee[1]>1 then - try - r := s[bb[1]:ee[1]-1]; //可能出错,添加try - except - r := ""; - end; - end else - begin - //第一行 - s := fLines[bb[0]-1].FStr; - if bb[1]<= length(s)then r += s[bb[1]:]; - r += "\r\n"; - //中间 - for i := bb[0]to ee[0]-2 do - begin - r += fLines[i].FStr; - r += "\r\n"; - end - //最后一行 - s := fLines[ee[0]-1].FStr; - if s and ee[1]>1 then r += s[1:ee[1]-1]; - end - end - return r; + return buffer_getchars(bb,ee,FSelectionMode); end function SetCaretX(cx); begin @@ -2442,11 +2405,57 @@ type TCustomMemo = class(TCustomScrollControl,TCustomMemoCmd) // end FHasFocus; //buffer 处理 - function buffer_DeleteChars(bb,ee); //删除选择 + function buffer_getchars(bb,ee,sm); + begin + r := ""; + if sm=smLine then + begin + len := ee[0]; + for i := bb[0]to ee[0] do + begin + r += fLines[i-1].FStr; + if ibb[1]and ee[1]>1 then + try + r := s[bb[1]:ee[1]-1]; //可能出错,添加try + except + r := ""; + end;} + end else + begin + //第一行 + s := fLines[bb[0]-1].FStr; + if bb[1]<= length(s)then r += s[bb[1]:]; + r += "\r\n"; + //中间 + for i := bb[0]to ee[0]-2 do + begin + r += fLines[i].FStr; + r += "\r\n"; + end + //最后一行 + s := fLines[ee[0]-1].FStr; + if s and ee[1]>1 then r += s[1:ee[1]-1]; + end + end + return r; + end + function buffer_DeleteChars(bb,ee,sm); //删除选择 begin if bb=ee then return; if bb[0]=ee[0]then //删除一行中的 - begin + begin str := fLines.GetStringByIndex(bb[0]-1); str[bb[1]:ee[1]-1]:= ""; fLines.SetValueByIndex(bb[0]-1,str); @@ -2463,7 +2472,7 @@ type TCustomMemo = class(TCustomScrollControl,TCustomMemoCmd) // fLines.splices(bb[0],ee[0]-bb[0],array()); end end - function buffer_InsertChars(cxy,str); //插入 + function buffer_InsertChars(cxy,str,sm); //插入 begin if not(ifstring(str)and str)then return; ss := str2array(str,"\n");