gpt4 book ai didi

delphi - 在 Delphi 中更新 TMemo 文本后保留负/反向字符串选择?

转载 作者:行者123 更新时间:2023-12-02 08:17:53 24 4
gpt4 key购买 nike

在 Delphi 中,我无法在备忘录中保留 SelStartSelLength ,当选择是否定/反向时,该备忘录每 5 秒更新一次文本。

对于负/反向选择,我的意思是我已经在某处开始选择,并且在按住 Shift 的同时按下向左箭头键几次。

代码:

var
caret: TPoint;
sel_start, sel_length: Integer;
begin
sel_start := Memo1.SelStart; // = 5
sel_length := Memo1.SelLength; // = 10
caret := Memo1.CaretPos; // caret.x = 15

//'adi and bl' selected
caret.x := sel_start;
Memo1.Lines.Clear;
Memo1.Lines.Add('laditadi and blah blah');
Memo1.SelStart := sel_start;
Memo1.SelLength := sel_length;

Memo1.CaretPos := caret;
end;

问题是,设置 SelLength 似乎实际上移动了插入符号。在设置 SelLength 后设置插入符号会使 SelLength := 0;。由于文本不断变化,我无法在前后使用 TMemo.SelText/TMemo.SetSelText

我找不到保留插入符号位置的方法...有什么线索吗?

最佳答案

如果 sel_start 的值与插入符的字符位置相同,则通过将 selstart 设置为 selstart+sellength 并将 sellength 设置为 -sellength 来反转选择。

procedure TForm1.Button1Click(Sender: TObject);
var
caret: TPoint;
sel_start, sel_length,CharFromPos: Integer;
begin
Memo1.SetFocus;
GetCaretPos(Caret);
CharFromPos := SendMessage(Memo1.Handle, EM_CHARFROMPOS, 0 ,Caret.Y*$FFFF + Caret.X) AND $FFFF;
sel_start := Memo1.SelStart; // = 5
sel_length := Memo1.SelLength; // = 10

Memo1.Lines.Clear;
Memo1.Lines.Add('laditadi and blah blah'#13#10'laditadi and blah blah');
if sel_start<>CharFromPos then
begin
Memo1.SelStart := sel_start;
Memo1.SelLength := sel_length;
end
else
begin
Memo1.SelStart := sel_start + sel_length;
Memo1.SelLength := - sel_length;
end;

end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
p:Tpoint;
b:Boolean;
CharFromPos:Integer;
begin
b := GetCaretPos(p);
CharFromPos := SendMessage(Memo1.Handle, EM_CHARFROMPOS, 0 ,p.Y*$FFFF + p.X) AND $FFFF;
Caption := Format('SelStart %d CharFromPos %d',[Memo1.SelStart,CharFromPos])
end;

关于delphi - 在 Delphi 中更新 TMemo 文本后保留负/反向字符串选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14631735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com