![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
![]() Программа работает исправно с английскими буквами но если ввести в программу что ни будь на русском то ни чего не происходит.
Как это можно исправить? При ключе 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. |
#2
|
||||
|
||||
![]() Символы а..я идут не подряд в кодировке. В середине (около буквы "п" кажется) есть разрыв.
А вообще имхо надо шифровать не только буквы, а всё. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 25.01.2012 в 20:49. |
#3
|
||||
|
||||
![]() Цитата:
Попробовал так, та же проблема. Код:
if ch in ['а'..'п'] then begin flag := true; fl := Ord('а'); pw := 16; end; if ch in ['р'..'я'] then begin flag := true; fl := Ord('р'); pw := 16; end; Последний раз редактировалось Amilman, 25.01.2012 в 21:16. |
#4
|
||||
|
||||
![]() Еще ord(stKey[j]) будет номером буквы не в алфавите, а в кодировке. И второго вычитания fl нету. Хотя повторюсь - лучше шифровать всё сразу.
jmp $ ; Happy End! The Cake Is A Lie. |
#5
|
||||
|
||||
![]() Цитата:
Можете привести пример? Если не трудно. |
#6
|
||||
|
||||
![]() Пример чего именно?
Если stKey[j] в данный момент равно "а", то ord(stKey[j]) будет равно номеру символа 'а' в кодовой таблице, а не 0, как предполагает шифр. jmp $ ; Happy End! The Cake Is A Lie. |
#7
|
||||
|
||||
![]() Цитата:
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#8
|
||||
|
||||
![]() А, да, попутал. Это в досе было так. Сейчас действительно нормально.
jmp $ ; Happy End! The Cake Is A Lie. |
#9
|
||||
|
||||
![]() Цитата:
![]() ![]() Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |