Тема: Заміна частин тексту в полі Memo в Delphi
У мене виникли питання із заміною тексту в Memo
Задумом такий:- у додатку з три поля  Memo. З першого поля Memo копіюю рядки у змінну, ділю її на три частини, а тими частинами заміняю текст у двох інших полях Memo.
Проблема в тому що додаток дуже тормозить і підвисає, хоча той результат що я задумав - видає.
Підкажіть що в коді не так, буду щиро вдячний
procedure TMainForm.sbtDecodeTextClick(Sender: TObject);
//mm-це приставка до компонентів Memo
//ed-це приставка до компонентів Edit
var
  iCopyLines:integer;//Порядковий номер рядка в мемо
  iSizeLines:integer;//Кількість символів у рядку
  iNumLetterS:integer;//Порядковий номер символу "\" у рядку
  iNumLetterES:integer;//Порядковий номер символу "=" у рядку
  sLines:String;//Скопійований рядок з мемо1
  sLetter:String;//Частина рядка до знаку "\"
  sKodeTrue:String;//Частина рядка між знаками "\" та "="
  sKodeFalse: String;//Частина рядка після знаку "="
begin
//---  Тут ми зозбиваємо строку з Memo1 на три частини  ---
//----------------------------------------------------------
  for iCopyLines:=0 to mmCode.Lines.Count-1 do
    begin
      sLines:=mmCode.Lines[iCopyLines];//копіюємо строку у змінну з Memo1
      with mmCode do//виділяємо текст(цілий рядок) у Memo1
        begin
          SetFocus();
          SelStart:=Pos(sLines,mmCode.Lines.Text)-1;
          SelLength:=Length(sLines);
        end;
      iSizeLines:=Length(sLines);//знаходимо кількість символів строки
      iNumLetterS:=Pos('\',sLines);//дізнаємося порядковий номер символу "\"
      iNumLetterES:=Pos('=',sLines);//дізнаємося порядковий номер символу "="
      sLetter:=Copy(sLines,1,iNumLetterS-1);//копіюємо частину рядка до знаку "\"
      edLetter.Text:=sLetter;//записуємо у поле Edit1
      sKodeTrue:=Copy(sLines,iNumLetterS,iNumLetterES-iNumLetterS);//копіюємо частину рядка між знаками ("\"-1)та "="
      edKodeTrue.Text:=sKodeTrue;//записуємо у поле Edit2
      sKodeFalse:=Copy(sLines,iNumLetterES+1,iSizeLines-iNumLetterES);//копіюємо частину рядка після знаку "="
      edKodeFalse.Text:=sKodeFalse;//записуємо у поле Edit3
//--- Тут ми замінюємо частини тексту у полях Memo2 та Memo3 ---
//-----------------------------------------------------------
      if Pos(sKodeFalse,mmText.Lines.Text)<>0 then//Якщо є такий фрагмент тексту то замінюємо його
        begin            {
          with mmText do
            begin
              SetFocus();
              SelStart:=Pos(sKodeFalse,mmText.Lines.Text)-1;
              SelLength:=Length(sKodeFalse);
            end;  }
          mmText.Lines.Text:=StringReplace(mmText.Lines.Text,sKodeFalse,sKodeTrue,[RFREPLACEALL]);//Замінюємо частини тексту у Memo2
          mmTextVisible.Lines.Text:=StringReplace(mmTextVisible.Lines.Text,sKodeFalse,sLetter,[RFREPLACEALL]);//Замінюємо частини тексту у Memo3
        end
          else
        begin
          if Pos(sKodeTrue,mmTextVisible.Lines.Text)<>0 then //Якщо є такий фрагмент тексту то замінюємо його
            begin
              mmTextVisible.Lines.Text:=StringReplace(mmTextVisible.Lines.Text,sKodeTrue,sLetter,[RFREPLACEALL]);//Замінюємо частини тексту у Memo3
            end;
        end;
    end;  
  ShowMessage('Завершено');
end;