chFirstLetter: char = 'а'; chLastLetter: char = 'я'; var iMinOrd: integer; // Код символа с наименьшим кодом iMaxOrd: integer; // Код символа с наибольшим кодом i: integer; // Для фикла iTempOrd: integer; // Код подставляемого символа ch: char; // Каждый символ текста s: string; // Преобразуемый текст begin // Проверка шага на диапазон допустимых значений if (n > Ord(chBigLastLetter) - Ord(chBigFirstLetter)) or (n < 1) then begin MessageDlg(Format(sMsgRangeErr, [1, Ord(chBigLastLetter) - Ord(chBigFirstLetter)]), mtError, [mbOk], 0); Exit; end;
s := Trim(mmText.Text); if s <> '' then// Если есть текст for i := 1 to Length(s) do// Проходит каждый символ begin ch := s[i];
// Если очередной символ нужно кодировать if ch in [chBigFirstLetter .. chBigLastLetter] then// Заглавные буквы begin iMinOrd := Ord(chBigFirstLetter); iMaxOrd := Ord(chBigLastLetter); end else if ch in [chFirstLetter .. chLastLetter] then// Строчные буквы begin iMinOrd := Ord(chFirstLetter); iMaxOrd := Ord(chLastLetter); end else// Символ кодировать не нужно continue;
if bCode then// Закодировать begin iTempOrd := Ord(ch) + n; // Получаем потенциальную позицию if iMaxOrd - iTempOrd < 0 then// Если символ зашел за границу предельного ch := Chr(iMinOrd + abs(iMaxOrd - iTempOrd) - 1) // Возьмем символ с другого конца круга else// Если нет.. ch := chr(iTempOrd); //..все нормально end else// Раскодировать begin iTempOrd := Ord(ch) - n; // Получаем потенциальную позицию if iMinOrd - iTempOrd > 0 then// Если символ зашел за границу предельного ch := Chr(iMaxOrd - (iMinOrd - iTempOrd - 1)) // Возьмем символ с другого конца круга else// Если нет.. ch := chr(iTempOrd); //..все нормально end;
s[i] := ch; end; mmText.Text := s; end;
procedure TForm1.btEncodeClick(Sender: TObject); begin Encode(boolean((Sender as TButton).Tag), seN.Value); end;