D2007 下 memo 的问题解决

摘自橙子的Delphi技术专区.
昨天群里有人问了个很有趣的问题,代码如下:

var
s: string;
p: Integer;
begin
s:=Edit1.Text;
p := Pos(s, memo1.Lines.Text)-1;
Memo1.SelStart := p;
memo1.SelLength := Length(s);
Memo1.SetFocus;
end;

照正常的情况,这段代码将搜索到memo1中,第一次出现edit1中文本的位置,并把它选中。

但是这段代码在D7中运行正常,而D2007却产生了偏移,如果有中文,被选中的内容会向后移几个字节。

一直以为这是 D2007 的 Bug,于是进行了一些研究,最终发现,这是由于 D2007 在内部处理用 Unicode 的关系,于是,上面的代码稍做修改就对了。如下:

var
s: widestring;
p: Integer;
begin
s:=widestring(Edit1.Text);
p := Pos(s, widestring(memo1.Lines.Text))-1;
Memo1.SelStart := p;
memo1.SelLength := Length(s);
Memo1.SetFocus;
end;
原文地址:https://www.cnblogs.com/y232995558/p/1413876.html