如何用Delphi(Xe10)在TRichedit中选择某些表行

时间:2016-11-27 18:25:31

标签: delphi trichedit

我有一个TjvRichedit控件,其中包含一些表格,其中一些行/单元格中填充了文本。 我想选择一些整行(例如,行firstLine和firstLine + 1)并将它们复制到剪贴板(或流)。我使用下面的代码:

SelStart := Perform(EM_LINEINDEX, firstLine, 0);
SelLength:= length(lines[firstLine]) + length(lines[firstLine+1]);
CopyToClipboard;

但它从firstLine到firstLine + 3选择(甚至从下一个表中选择行!)。 如果我缩短长度(例如,SelLength:= 2),它会选择两条线! 我怎么能完全按照自己的意愿行事呢?

2 个答案:

答案 0 :(得分:1)

选择第一个Line并将所选文本复制到剪贴板:

RichEdit1.SelStart:=0;
RichEdit1.SelLength:=length(RichEdit1.Lines.[0]);
RichEdit1.CopyToClipboard;

从第二个Line中选择第一个Line +第一个字符并将所选文本复制到剪贴板:

RichEdit1.SelStart:=0;
RichEdit1.SelLength:=length(RichEdit1.Lines[0])+2;
RichEdit1.CopyToClipboard;

选择第二个Line

RichEdit1.SelStart:=length(RichEdit1.Lines[0])+1;
RichEdit1.SelLength:=length(RichEdit1.Lines[1]);

答案 1 :(得分:0)

如果选择位于tablerow的开头,则必须排除前两个字符

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

在多行的情况下相同(将整个长度减少一次仅两次)