Каждый раз, когда вы вызываете Lines.Add()
, после добавления строки вставляется жесткий разрыв строки. Чтобы сделать то, что вы хотите, вам нужно вместо этого переместить текущую позицию каретки в конец RichEdit, а затем вставить строку в новую позицию каретки без разрыва строки, например:
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
begin
for i := 1 to Length(intro) do
begin
redout.SelStart := redout.GetTextLen;
redout.SelLength := 0;
redout.SelText := intro[i];
Sleep(100);
Update;
end;
end;
, которая может затем доработайте, чтобы избежать дополнительных затрат:
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
mask: Integer;
rng: TCharRange;
txt: string;
begin
SetLength(txt, 1);
mask := SendMessage(redout.Handle, EM_SETEVENTMASK, 0, 0);
try
for i := 1 to Length(intro) do
begin
rng.cpMin := redout.GetTextLen;
rng.cpMax := rng.cpMin;
SendMessage(redout.Handle, EM_EXSETSEL, 0, LPARAM(@rng));
txt[1] := intro[i];
SendMessage(redout.Handle, EM_REPLACESEL, TRUE, LPARAM(PChar(txt)));
SendMessage(redout.Handle, EM_SCROLLCARET, 0, 0);
Sleep(100);
Update;
end;
finally
SendMessage(redout.Handle, EM_SETEVENTMASK, 0, mask);
end;
end;