Показать сообщение отдельно
  #1  
Старый 25.01.2012, 20:29
Аватар для Amilman
Amilman Amilman вне форума
Новичок
 
Регистрация: 27.03.2011
Адрес: г.Кемерово
Сообщения: 98
Версия Delphi: XE
Репутация: 10
По умолчанию Метод Цезаря с ключём в виде слова

Программа работает исправно с английскими буквами но если ввести в программу что ни будь на русском то ни чего не происходит.
Как это можно исправить?
При ключе hi
Hello - Hflmo
При ключе пр
Привет -Привет

Код:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, ComCtrls, ActnList, Menus, ClipBrd, Buttons;

type
  TMainForm = class(TForm)
    StatusBar1: TStatusBar;
    ActionList1: TActionList;
    actExit: TAction;
    actLoad: TAction;
    actSave: TAction;
    actRun: TAction;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    GrBoxOutPut: TGroupBox;
    memoOutput: TMemo;
    GrBoxInput: TGroupBox;
    memoInput: TMemo;
    Button1: TButton;
    GroupBox1: TGroupBox;
    edtKey: TLabeledEdit;
    CheckBox1: TCheckBox;
    BitBtn1: TBitBtn;
    Button2: TButton;
    Button3: TButton;
    procedure actExitExecute(Sender: TObject);
    procedure actLoadExecute(Sender: TObject);
    procedure actSaveExecute(Sender: TObject);
    procedure actRunExecute(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure actSaveUpdate(Sender: TObject);
    procedure actRunUpdate(Sender: TObject);
    procedure edtKeyKeyPress(Sender: TObject; var Key: Char);
    procedure CheckBox1Click(Sender: TObject);
    procedure memoInputChange(Sender: TObject);
    procedure memoInputKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}


procedure TMainForm.actExitExecute(Sender: TObject);
begin
  Close;
end;

procedure TMainForm.actLoadExecute(Sender: TObject);
begin
  if OpenDialog1.Execute then
    memoInput.Lines.LoadFromFile(OpenDialog1.FileName);
end;

procedure TMainForm.actRunExecute(Sender: TObject);
var i, j, n, fl, pw: integer;
    ch: Char;
    stKey: string;
    flag: Boolean;
begin
  memoOutput.Text := '';
  stKey := edtKey.Text;
  j := 1; fl := 0; pw := 0;
  for i := 1 to Length(memoInput.Text) do
  begin
    ch := memoInput.Text[i];
    flag := false;
    if ch in ['a'..'z'] then
    begin
      flag := true;
      fl := Ord('a'); pw := 26;
    end;
    if ch in ['A'..'Z'] then
    begin
      flag := true;
      fl := Ord('A'); pw := 26;
    end;
    if ch in ['а'..'я'] then
    begin
      flag := true;
      fl := Ord('а'); pw := 33;
    end;
    if ch in ['А'..'Я'] then
    begin
      flag := true;
      fl := Ord('А'); pw := 33;
    end;
    if flag then
    begin
      if CheckBox1.Checked then
        n := (ORD(ch) - fl - ORD(stKey[j])+ 10*pw) mod pw + fl
      else
        n := (ORD(ch) - fl + ORD(stKey[j])) mod pw + fl;
      ch := Chr(n);
      Inc(j);
      if j > Length(stKey) then j := 1;
    end;
    memoOutput.Text := memoOutput.Text + ch;
  end;
end;

procedure TMainForm.actRunUpdate(Sender: TObject);
begin
  actRun.Enabled := ((TRIM(memoInput.Text) <> '') AND (edtKey.Text <> ''));
end;

procedure TMainForm.actSaveExecute(Sender: TObject);
begin
  if SaveDialog1.Execute then
    memoOutput.Lines.SaveToFile(SaveDialog1.FileName);
end;

procedure TMainForm.actSaveUpdate(Sender: TObject);
begin
  actSave.Enabled := memoOutput.Text <>'';
end;

procedure TMainForm.Button2Click(Sender: TObject);
begin
  if SaveDialog1.Execute then
    memoOutput.Lines.SaveToFile(SaveDialog1.FileName);
end;

procedure TMainForm.Button3Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    memoInput.Lines.LoadFromFile(OpenDialog1.FileName);
end;

procedure TMainForm.CheckBox1Click(Sender: TObject);
begin
  if CheckBox1.Checked then
    actRun.Caption := 'Расшифровать'
  else
    actRun.Caption := 'Зашифровать';
end;

procedure TMainForm.edtKeyKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
    actRun.Execute;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  memoInput.Text:='';
  memoOutput.Text:='';
end;


procedure TMainForm.memoInputChange(Sender: TObject);
begin
  StatusBar1.Panels[0].Text := IntToStr(Length(memoInput.Text)) + ' символов';
end;

procedure TMainForm.memoInputKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if ((Key = VkKeyScan('a')) or (Key = VkKeyScan('ф'))) and (ssCtrl in Shift) then
    (Sender as TMemo).SelectAll;
end;

end.
Ответить с цитированием