Изменение конца строки на пробел delphi? - PullRequest
0 голосов
/ 31 марта 2020

Я хочу напечатать текст в RichEdit и сделать так, как будто он набирается в RichEdit. У меня есть этот код:

const
  intro = 'Hello world';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  i : integer;
begin
  for i := 1 to length(intro) do
  begin
    redout.Lines.Add(intro[i]);
    sleep(100);
    form1.Refresh;
  end;
end;

end.

Но это печатает текст в расширенном редактировании, как это

H (new line)
e (new line)
l (new line)
l (new line)
o (new line)
...

Я хочу напечатать его следующим образом, но, как будто он набирается по одному символу за раз:

Hello world

1 Ответ

2 голосов
/ 31 марта 2020

Каждый раз, когда вы вызываете 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...