Тема: Заміна частин тексту в полі 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;