5,388
社区成员
发帖
与我相关
我的任务
分享
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
RichEdit1: TRichEdit;
RichEdit2: TRichEdit;
Memo1: TMemo;
procedure RichEdit2Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Start:integer=0; //字符比较的起始位置
implementation
{$R *.dfm}
procedure TForm1.RichEdit2Change(Sender: TObject);
var
i,comparelen,uicode:integer;
str1,str2:string;
IsSame:bool;
begin
if Length(Richedit2.Text)>Length(Richedit1.Text) then exit;
comparelen:=Length(Richedit2.Text)-Start;
if comparelen<0 then //RichEdit2的字符减少时
begin
Start:=Length(Richedit2.Text);
RichEdit1.SelStart:=Start;
RichEdit1.SelLength:=0-comparelen;
RichEdit1.SelAttributes.Color:=clNone;
end
else
begin
str1:=copy(RichEdit1.Text,start+1,comparelen);
str2:=copy(RichEdit2.Text,start+1,comparelen);
i:=1;
while(i<=comparelen)do
begin
if ord(str1[i])>160 then //判别是否为汉字,可能不是160
begin
uicode:=2; //占2字节
if(str1[i]=str2[i])and(str1[i+1]=str2[i+1]) then
IsSame:=True
else
IsSame:=False;
end
else //非汉字
begin
uicode:=1; //占一个字节
if(str1[i]=str2[i]) then
IsSame:=True
else
IsSame:=False;
end;
if(IsSame) then
begin
RichEdit1.SelStart:=Start;
RichEdit1.SelLength:=uicode; //分别逐个比较,包括汉字和其他字符
RichEdit1.SelAttributes.Color:=clred;
end;
inc(Start,uicode);
inc(i,uicode);
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
RichEdit2.Text:='';
end;
end.