Как l oop через каждый видимый символ текста TRichEdit? - PullRequest
1 голос
/ 13 января 2020

В Delphi 10.3.3, который является самым простым, быстрым и наиболее эффективным способом l oop через каждый видимый Char (т.е. исключая непечатные символы, такие как, например, #13) из ( многострочный) TRichEdit текст? Затем мне нужно получить и установить цвет каждого символа в соответствии с моими расчетами.

Я пробовал это:

function GetCharByIndex(Index: Integer): Char;
begin
  RichEdit1.SelStart := Index;
  RichEdit1.SelLength := 1;
  Result := RichEdit1.SelText[1];
end;

RichLen := RichEdit1.GetTextLen - RichEdit1.Lines.Count;
for i := 0 to RichLen - 1 do
begin
  c := GetCharByIndex(i);
  if c = #13 then CONTINUE;
  // ... do my stuff here
end;

Но я уверен, что должен быть лучший способ.

1 Ответ

1 голос
/ 14 января 2020
var
  i: Integer;  
  c: Char;
  cord: Integer;
...
i := -1;
for c in RichEdit1.Text do
begin
  Inc(i);
  cord := ord(c);
  if (cord = 13) then
    Dec(i);
  if (cord >= 32) and (not ((cord > 126) and (cord < 161))) then
  begin
    // do your stuff here, for example exchanging red and green colors:
    RichEdit1.SelStart := i;
    RichEdit1.SelLength := 1;
    if RichEdit1.SelAttributes.Color = clGreen then
      RichEdit1.SelAttributes.Color := clRed
    else if RichEdit1.SelAttributes.Color = clRed then
      RichEdit1.SelAttributes.Color := clGreen;
  end;
end;
...