Глава 7 блокнот-шифрувальник

Розробити програму, що повторює функції стандартного блокнота з додатковою можливістю шифрування і дешифрування даних.

Мал. 7.1. Меню програми Блокнот-шифрувальник

# 8662; Розробка меню розглядається в попередньому розділі.

Для пункту меню Формат → Перенесення за словами слід встановити властивість Checked рівним True, оскільки цей пункт меню буде виконувати роль перемикача.

Більше нічого додавати на форму не потрібно, і результат оформлення повинен відповідати рис. 7.2.

Мал. 7.2. Форма блокнота-шифрувальника

Шифрувати текст будемо за допомогою функції xor або звичайного зсуву. Для того щоб зашифровані тексти можна було розшифровувати за шаблоном, будемо пропонувати користувачеві самому вибирати число xor, на яке треба зміщувати символ.

Перш за все оголосіть глобальну змінну xr_num типу string:

Тепер займемося командами меню. Обробник події OnClick для пункту Файл → Відкрити:

procedure TForm1.N1Click (Sender: TObject);

// починаємо огляд з поточної папки

if not OpenDialog1.Execute then ShowMessage ( 'File not selected!')

else // завантажуємо обраний файл в Memo

Тут ми відкриваємо стандартне діалогове вікно огляду і просимо користувача вибрати текстовий або будь-який інший файл. Після того як користувач вибрав файл, завантажуємо його в нашу програму.

Обробник події OnClick для пункту Файл → Зберегти:

procedure TForm1.N2Click (Sender: TObject);

SaveDialog1 .InitialDir: = GetCurrentDir;

if not SaveDialog1.Execute then ShowMessage ( 'File not saved!')

else // зберігаємо в файл

Відкриваємо діалогове вікно збереження файлу. Після того як користувач вибрав місце збереження файлу, витягуємо текст з Memo і зберігаємо його в обраній папці.

Обробник події OnClick для пункту Файл → Вихід:

procedure TForm1.N4Click (Sender: TObject);

Close; // закрити програму

Обробник події OnClick для пункту Правка → Число XOR:

procedure TForm1.XoR1Click (Sender: TObject);

if not InputQuery ( 'XOR', 'Введіть число xor:', xr_num)

Тут ми відображає вікно для вибору числа xor. Зазначене користувачем число буде занесено в змінну xr_num.

Обробник події OnClick для пункту Правка → Зашифрувати / Розшифрувати:

procedure TForm1.N5Click (Sender: TObject);

xr: string; // зашифрований текст

i: integer; // лічильник циклу begin

for i: = 1 to Length (Memo1.Text) do

begin // перебираємо кожен символ в тексті

// виконуємо вказане користувачем зміщення

xr: = xr + Chr (Ord (Memo1.Text [i]) xor StrToInt (xr_num));

// замінюємо оригінальний текст на зашифрований

За цією командою меню виконується шифрування тексту, який зараз знаходиться в полі Memo. У циклі перебираються всі символи, і кожен з них шифрується окремо.

Обробник події OnClick для пункту Правка → Очистити:

procedure TForm1.N8Click (Sender: TObject);

Memo1.lines.Clear; // очищення Memo

Очищаємо поле Memo від міститься в ньому тексту.

Обробник події OnClick для пункту Формат → Перенесення за словами:

procedure TForm1.N9Click (Sender: TObject);

if N9.Checked then // якщо прапорець встановлений

N9.Checked: = False; // скидаємо прапорець

// Відображаємо горизонтальну смугу прокрутки

else begin // якщо прапорець не встановлений

N9.Checked: = True; // встановлюємо прапорець

// прибираємо горизонтальну смугу прокрутки

За цією командою меню ми перевіряємо, який стан зараз у пункту Формат → Перенесення за словами. Якщо прапорець встановлений, то ми скидаємо його і відображаємо горизонтальну смугу прокрутки. В іншому випадку, встановлюємо прапорець і прибираємо горизонтальну смугу прокрутки.

Обробник події OnClick для пункту Формат → Шрифт:

procedure TForm1.N10Click (Sender: TObject);

// Визначаємо всі налаштування шрифту та відображаємо їх

// в діалоговому вікні

FontDialog1.Font.Color: = Memo1.Font.Color; // колір шрифту

FontDialog1.Font.Style:= Memo1.Font.Style; // стиль

FontDialog1.Font.Size: = Memo1.Font.Size; // розмір

FontDialog1.Font.Charset: = Memo1.Font.Charset; // кодування

FontDialog1.Font.Name:= Memo1.Font.Name; // назва шрифту

if FontDialog1.Execute then

begin // застосовуємо всі вибрані настройки

Перед тим як відкрити діалогове вікно вибору шрифту, ми визначаємо всі поточні настройки шрифту, щоб потім відобразити їх в діалоговому вікні. Після того як користувач натиснув в цьому вікні кнопку OK, всі вибрані настройки шрифту застосовуються до поля Memo.

Тепер залишилося тільки реалізувати автоматичне завантаження файлів, пов'язаних з нашим блокнотом в файл-менеджерах. Для цього створимо обробник події OnCreate головної форми:

procedure TForm1.FormCreate (Sender: TObject);

Str: String; // шлях до параметру

xr_num: = '2'; // за замовчуванням зсув = 2

if (ParamCount> 0) then begin

Str: = ParamStr (1); // Формуємо шлях до аргументу

for i: = 2 to ParamCount do Str: = Str + '' + ParamStr (i);

if Str <> '' Then Memo1.Lines.LoadFromFile (str);

Тут ми задаємо початкове значення для зміщення і перевіряємо, чи надійшли на вхід програми будь-які параметри. Якщо так, то дізнаємося шлях до файлу і відображаємо його вміст в поле Memo. Приклад шифрування зі зміщенням 10 представлений на рис. 7.3.

Мал. 7.3. Приклад шифрування зі зміщенням 10

Повний вихідний код модуля програми Блокнот-шифрувальник представлений в лістингу 7.1.

Лістинг 7.1. Модуль програми Блокнот-шифрувальник

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls Forms, Dialogs, StdCtrls, Menus;

type TForm1 = class (TForm)

Схожі статті