如何使用 Delphi (Xe10) select TRichedit 中的某些 table 行
How to select certain table rows in TRichedit with Delphi (Xe10)
我有一个 TjvRichedit 控件,其中包含 table 和一些 rows/cells 填充的文本。
我想 select 一些整行(例如行 firstLine 和 firstLine+1)并将它们复制到剪贴板(或流)。我使用下面的代码:
SelStart := Perform(EM_LINEINDEX, firstLine, 0);
SelLength:= length(lines[firstLine]) + length(lines[firstLine+1]);
CopyToClipboard;
但是它是从第一行到第一行+3 的 select(甚至是从下一个 table 开始的 select 行!)。
如果我减少长度(例如 SelLength:= 2)它 select 是两行!
请问我怎样才能做我想做的事?
到 select 第一个 Line
并将 selected 文本复制到剪贴板:
RichEdit1.SelStart:=0;
RichEdit1.SelLength:=length(RichEdit1.Lines.[0]);
RichEdit1.CopyToClipboard;
到 select 第一个 Line
+ 第二个 Line
的第一个字符并将 selected 文本复制到剪贴板:
RichEdit1.SelStart:=0;
RichEdit1.SelLength:=length(RichEdit1.Lines[0])+2;
RichEdit1.CopyToClipboard;
到select第二个Line
:
RichEdit1.SelStart:=length(RichEdit1.Lines[0])+1;
RichEdit1.SelLength:=length(RichEdit1.Lines[1]);
如果所选内容位于表格行的开头,则必须排除前两个字符
RichEdit1.SelStart := Perform(EM_LINEINDEX, LineNo, 0) + 2; // start two chars beyond the linestart
RichEdit1.SelLength:= Perform(EM_LINELENGTH, RichEdit1.SelStart,0) - 2; // decrease the whole length by these two chars
多行也一样(整个长度只减少一次两倍)
我有一个 TjvRichedit 控件,其中包含 table 和一些 rows/cells 填充的文本。 我想 select 一些整行(例如行 firstLine 和 firstLine+1)并将它们复制到剪贴板(或流)。我使用下面的代码:
SelStart := Perform(EM_LINEINDEX, firstLine, 0);
SelLength:= length(lines[firstLine]) + length(lines[firstLine+1]);
CopyToClipboard;
但是它是从第一行到第一行+3 的 select(甚至是从下一个 table 开始的 select 行!)。 如果我减少长度(例如 SelLength:= 2)它 select 是两行! 请问我怎样才能做我想做的事?
到 select 第一个 Line
并将 selected 文本复制到剪贴板:
RichEdit1.SelStart:=0;
RichEdit1.SelLength:=length(RichEdit1.Lines.[0]);
RichEdit1.CopyToClipboard;
到 select 第一个 Line
+ 第二个 Line
的第一个字符并将 selected 文本复制到剪贴板:
RichEdit1.SelStart:=0;
RichEdit1.SelLength:=length(RichEdit1.Lines[0])+2;
RichEdit1.CopyToClipboard;
到select第二个Line
:
RichEdit1.SelStart:=length(RichEdit1.Lines[0])+1;
RichEdit1.SelLength:=length(RichEdit1.Lines[1]);
如果所选内容位于表格行的开头,则必须排除前两个字符
RichEdit1.SelStart := Perform(EM_LINEINDEX, LineNo, 0) + 2; // start two chars beyond the linestart
RichEdit1.SelLength:= Perform(EM_LINELENGTH, RichEdit1.SelStart,0) - 2; // decrease the whole length by these two chars
多行也一样(整个长度只减少一次两倍)