中易网

delphi richedit如何做到返回当前光标所在的位置,不是行,如Editor.Lines[1]

答案:2  悬赏:0  
解决时间 2021-01-12 13:50
  • 提问者网友:兔牙战士
  • 2021-01-11 23:38
delphi richedit如何做到返回当前光标所在的位置,不是行,如Editor.Lines[1]
最佳答案
  • 二级知识专家网友:患得患失的劫
  • 2021-01-11 23:54
你所谓的“光标”应该是指插入符号(Caret)吧,这个问题很难么?
RichEdit.SelStart,不管选没选中文字,它都返回光标所在字符的索引。追问对啊,那如何确定到这个字符,Editor.Lines[x]只能确定到某一行,就是我要精确到某一个字符,改变它的颜色追答RichEdit.SelStart就是精确到字符,真是服了你!追问那么如何表示他前面的字符呢?追答RichEdit.SelStart - 1。您是初学么?服了。
给你写了个例程,用来改变当前光标前一个字符的颜色(可以辨别汉字和ASCII):
procedure TForm1.Button1Click(Sender: TObject);
var
sel, len: Integer;
begin
sel := RichEdit1.SelStart;
len := RichEdit1.SelLength;
if len = 0 then
begin
with RichEdit1 do
begin
if (CaretPos.X = 0) and (CaretPos.Y > 0) then
SelStart := SelStart - 2;
if (CaretPos.X > 1) and IsDBCSLeadByte(Byte(Lines[CaretPos.Y][CaretPos.X - 1])) then
begin
SelStart := SelStart - 2;
SelLength := 2;
end
else if CaretPos.X > 0 then
begin
SelStart := SelStart - 1;
SelLength := 1;
end;
end;
end;
RichEdit1.SelAttributes.Color := clRed;
if len = 0 then
begin
RichEdit1.SelStart := sel;
RichEdit1.SelLength := len;
end;
end;追问初一孩纸一枚初学ing。。。别嘲笑。。。追答初一啊,看来我要顶礼膜拜了。
对了,如果我写的没问题,请你麻溜结贴。
全部回答
  • 1楼网友:逐風
  • 2021-01-12 00:12
RichEdit1.CaretPos.X是文本字符的列坐标,CaretPos.Y是文本字符的行坐标。根据X,Y就可知光标所在位置是哪行哪列。比如,我这段话的“R”,就是第一行第一个字符。另外,SelStart是光标所在位置的绝对坐标,等于光标前所有字符总数。SelLength是光标选中的字符数。你可以拿楼上的代码试一下。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息