以下代码是我编写的,请各位高人帮忙解决以下,修改后在发上来,如果正确分都给。
代码:(两个文字对比,当RICHEDIT1删除文字的时候,在Richeidt2中显示出来,并且带删除线,如果在Richedit1中添加或修改过的文字,在Richedit2中改变颜色显示出来 )
procedure TForm1.Button1Click(Sender: TObject);
begin
  rc2.Text := rc1.Text;
end;procedure TForm1.Button2Click(Sender: TObject);
var
  s1,s2: string;
  l1,l2: integer;
  i1,i2: integer;
  last1,next1: integer;
  last2,next2: integer;
  diflist: Tlist;
  dif: pdiff;
  i: integer;
  sub1,sub2,stemp: string;
begin
  diflist := Tlist.Create;
  s1 := rc1.Text;
  s2 := rc2.Text;
  l1 := length(s1);
  l2 := length(s2);
  i1 := 1;
  i2 := 1;
  while true do
  begin
    if (i1 >= l1) or (i2 >= l2) then
      break;
    sub1 := copy(s1,i1,2);
    sub2 := copy(s2,i2,2);
    if sub1 = sub2 then
    begin
      i1 := i1 + 2;
      i2 := i2 + 2;
    end else
    begin
      last1 := i1;
      last2 := i2;
      getNextPos(s1,s2,last1,last2,next1,next2);
      dif := new(pdiff);
      dif.star := last2 - 1;
      dif.leng := next1 - last1;
      dif.diftype := true;
      diflist.Add(dif);
      stemp := copy(s1,last1,next1 - last1);
      insert(copy(s1,last1,next1 - last1),s2,last2);
      if next2 - last2 > 0 then
      begin
        dif := new(pdiff);
        dif.star := last2 + next1 - last1 - 1;
        dif.leng := next2 - last2;
        dif.diftype := false;
        diflist.Add(dif);
      end;
      i1 := next1;
      i2 := next1 - last1 + next2;
      l2 := length(s2);
    end;
  end;
  rc2.Text := s2;
  for i := 0 to diflist.Count - 1 do
  begin
    rc2.SelStart := pdiff(diflist.Items[i]).star;
   // rc2.SelStart := 3;
    rc2.SelLength := pdiff(diflist.Items[i]).leng;
    if pdiff(diflist.Items[i]).diftype then
    begin
      rc2.SelAttributes.Color := clred;
      rc2.SelAttributes.Style := [fsStrikeOut];
    end
    else
      rc2.SelAttributes.Color := clblue;
  end;
end;procedure TForm1.getNextPos(s1, s2: string; last1, last2: integer;
  var next1, next2: integer);
var
  parray: array[1..20] of TPoint;
  i,j,k,mix: integer;
  l1,l2: integer;
  sub2,subtemp: string;
begin
  l1 := last1 + 2;
  //l2 := last2 + 2;
  sub2 := copy(s2,last2,length(s2));
  for i := 1 to 20 do
  begin
    if l1 >= length(s1) then
    begin
      parray[i].X := l1;
      parray[i].Y := length(s2);
      break;
    end;
    subtemp := copy(s1,l1,2);
    k := pos(subtemp,sub2);
    if k > 0 then
    begin
      parray[i].X := l1;
      parray[i].Y := last2 + k - 1;
    end else
    begin
      parray[i].X := l1;
      parray[i].Y := length(s2);
    end;
    l1 := l1 + 2;
  end;
  k := abs(parray[1].y - last2);
  mix := 1;
  if i > 20 then
     i := i - 1;
  for j := 1 to i do
  begin
    if abs(parray[j].y - last2) < k then
    begin
      k := abs(parray[j].y - last2);
      mix := j;
    end;
  end;
  next1 := parray[mix].X;
  next2 := parray[mix].Y;
end;end.