Главная » Статьи » Delphi » Статьи Delphi

Скачивать материалы с сайта, могут только зарегистрированные пользователи.
Для регистрации заполните два поля ниже!

Через минуту Вы получите "Гостевой доступ"




Кодирование русского текста методом сдвига
Кодирование русского текста методом сдвига



Автор: ___Nikolay
WEB-сайт: http://delphiworld.narod.ru

unit uMain;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ComCtrls, Spin;

type
TForm1 = class(TForm)
Panel1: TPanel;
mmText: TMemo;
Label1: TLabel;
seN: TSpinEdit;
Label2: TLabel;
btEncode: TButton;
btDecode: TButton;
procedure btEncodeClick(Sender: TObject);
private
{ Private declarations }
procedure Encode(bCode: boolean; n: integer); // Encode - ПРОЦЕДУРА
// bCode - зашифровать/расшифровать
// n - шаг смещения
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

// ПРОЦЕДУРА КОДИРОВАНИЯ
procedure TForm1.Encode(bCode: boolean; n: integer);
const
sMsgRangeErr = 'Значение шага должно быть от %d до %d!';

// Крайние символы для кодирования
chBigFirstLetter: char = 'А';
chBigLastLetter: char = 'Я';

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;

end.
Скачать весь проект
Категория: Статьи Delphi | Добавил: c1 (2009 Июль 10)
Просмотров: 1041 | Теги: Кодирование русского текста методом | Рейтинг: 0.0/0

Выразить благодарность - Поделиться с друзьями!

 

Здесь все о технической стороне 1С!

 

Узнай, как правильно администрировать 1С Предприятие
Регистрируйся на бесплатный 7-ми дневный курс сейчас:

Ваш E-Mail в безопасности



Всего комментариев: 0
avatar