Автор: Пользователь скрыл имя, 26 Февраля 2013 в 22:15, курсовая работа
Цель курсовой работы – осуществить шифровку текста с помощью средств Delphi.
Для достижения названной цели в исследовании необходимо решить следующие задачи:
- осуществить постановку задач;
- создать блок-схемы алгоритмов;
- осуществить описание объектов, свойств, методов;
- разработать формы и представить текст программы;
- привести результаты тестирования программного продукта.
После отрисовки форма получает фокус сообщений от системных устройств, т.е. становится активной. Узнать, активна ли форма, можно посредством обращения к ее свойству Active.
События OnActivate и OnShow имеют парные события OnDeactivate и OnHide, возникающие при утере фокуса или исчезновении формы с экрана. Сделать форму невидимой позволяет сделать метод Hide (изменяет свойство Visible), парный методу Show. Он не уничтожает форму как метод Free, а делает ее только невидимой на экране.
Основной способ закрытия формы - это вызов метода Close, который автоматически вызывается при нажатии оконной кнопки закрытия окна. При вызове этого метода происходит вызов обработчиков событий в следующем порядке:
OnCloseQuery, которое имеет выходной параметр var CanClose: Boolean, изначально имеющий значение True и с помощью которого можно отменить закрытие окна, установив его в False. Это лучшее место проверки возможности закрытия формы (например, для диалоговой панели проверки все ли поля заполнены). При закрытии родительской MDI формы сначала должны закрываться все дочерние окна, для чего вызываются их методы CloseQuery. Если хоть один из них возвращает False, закрытие отменяется.
OnClose, которое позволяет определить дальнейшую реакцию по закрытию формы, поскольку закрытие можно реализовать различными способами через его выходной параметр var Action: TCloseAction, принимающий след. значения (при закрытии главной формы приложения любое значение, отличное от caNone, вызывает завершение приложения):
caNoneзакрытие недопустимо, ничего не делать
caHideсделать форму только невидимой
caFreeуничтожить форму
CaMinimize свернуть форму в значок
OnHide – убрать с экрана форму.
OnDestroy - событие обратное OnCreate и здесь надо освободить все ресурсы, запрошенные при создании формы.
Событие OnResize возникает при изменении размеров формы во время работы приложения. Его нужно использовать для переустановки размеров компонентов формы или при их перемещении. Здесь есть два тонких момента. Во-первых, изменение размеров внутри обработчика влечет за собой как минимум новый вызов этого события, поэтому возможные неоднократные перерисовки. Во-вторых, чтобы этот процесс рано или поздно остановился, нужно ввести условия, при достижении которых размеры не будут изменяться, иначе наступит зацикливание. Будьте внимательны, двойные или циклические вызовы событий могут возникать и при неправильном применении других событий других компонентов. После изменения размеров вновь возникнет событие OnPaint.
Важной проблемой является
заставить форму и ее элементы
выглядеть одинаково при
1.4. Модальные формы
Помимо того, что модальная форма остается активной до ее закрытия, она еще и возвращает информацию о способе ее закрытия, устанавливаемого в свойстве ModalResult:, который автоматически может устанавливаться с помощью кнопок TBitBtn. Метод function ShowModal: Integer; - это функция, результат которой соответствует следующим значениям свойства ModalResult:
- mrNone 0 не выходить из формы;
- mrOk idOK нормальный выход по кнопке ОК;
- mrCancel idCancel выход из формы по кнопке Отмена;
- mrAbort idAbort выход из формы по кнопке Прервать;
- mrRetry idRetry выход из формы по кнопке Повторить;
- mrIgnore idIgnore выход из формы по кнопке Игнорировать;
- mrYes idYes нормальный выход по кнопке Да;
- mrNo idNo выход из формы по кнопке Нет.
Пример вызова модального окна и обработки значения возврата:
BtnBottomDlg.ShowModal;
if BtnBottomDlg.ModalResult=mrOK then
MessageDlg('OK!', mtInformation, [mbOK], 0);
2.5. Другие полезные методы и свойства формы
Видимой форме можно передать фокус методом SetFocus; этот метод имеют и все остальные компоненты.
Установка свойства формы KeyPreview в True, означает, что поступающие от клавиатуры сообщения будут сначала поступать обработчикам событий клавиатуры формы и только затем элементу. С помощью этого метода можно на уровне формы сделать фильтр для нажатых клавиш, их перекодировку или их предварительную обработку.
Внешний вид формы можно получить методом function GetFormImage: Tbitmap, который потом можно поместить, например, в буфер обмена Windows (ClipBoard). Распечатать форму можно методом Print, которая будет распечатываться согласно свойству PrintScale = (poNone, poProportional, poPrintToFit).
Для форм MDI есть следующие дополнительные свойства и методы:
- ArrangeIcons - упорядочивает свернутые значки дочерних окон;
- Cascade - располагает дочерние окна каскадом;
- Tile - располагает дочерние окна мозаикой;
- TileMode = (tbHorizontal, tbVertical) - устанавливает стиль мозаики;
- Next - передает фокус следующей дочерней форме;
- Previous - передает фокус предыдущей дочерней форме;
- ActiveMDIChild: TForm - содержит указатель на активную дочернюю форму;
- MDIChildCount: Integer - содержит количество дочерних форм;
- TabOrder - указывает порядок обхода элементов формы.
1.6. Панели сообщений
Функция MessageDlg показывает в центре экрана панель сообщений, заголовком которой будет имя вашего приложения, а сообщением значение параметра Msg. Параметр AType опеределяет тип сообщения:
- mtWarning - желтый значок предупреждения;
- MtError - красный стоп сигнал;
- mtInformation - синий значок информации "i";
- mtConfirmation - зеленый знак вопроса;
- mtCustom - без значка.
Посредством параметра AButtons функция определяет какой набор кнопок появятся в панели. Функция возвращает значения кнопки, выбранной пользователем.
Функция MessageDlgPos подобна MessageDlg, но позволяет дополнительно задать координаты размещения панели на экране.
Функция InputBox показывает на экране панель для ввода строки, позволяя задавать заголовок панели, заголовок входного поля и начальное значение строки ввода. Если пользователь нажмет в панели кнопку Cancel, то возвращается значение строки по умолчанию, если OK, то возвращается введенная строка. Эта функция не может определить была ли нажата кнопка OK или Cancel.
Функция InputQuery также является панелью ввода строки пользователя. Она не имеет параметра для ввода значения по умолчанию, а имеет выходной параметр Value, который содержит строку введенную пользователем. Эта функция возвращает True, если ползователь нажал OK и False в противном случае.
2 Практическая часть
В ходе составления программы были использованы следующие объекты с их свойствами:
Label - текстовая метка (надпись) на форме. Используется для отображения любого текста в окне. Текст задаётся в свойстве Caption.
Edit - поле ввода. Используется для ввода любых данных (текста, числа и т.д.), представленных одной строкой. Текст хранится свойством Text. Свойство MaxLength позволяет задать максимальное число символов, которое может быть введено в поле. Значение 0 означает, что ограничение не установлено.
Memo - многострочный Edit. Используется для ввода больших объёмов текста. Свойство ReadOnly делает этот объект нередактируемым. Свойство ScrollBars позволяет указать полосы прокрутки, которые будут отображаться у поля при недостатке места для всего текста:
•ssNone - без полос прокрутки;
•ssHorizontal - горизонтальная полоса прокрутки;
•ssVertical - вертикальная;
•ssBoth - обе: и горизонтальная, и вертикальная.
Button – командная кнопка. Caption - текст на кнопке.
Компоненты OpenDialog — диалог «Открыть файл» и SaveDialog — диалог «Сохранить файл как...». Все свойства этих компонентов одинаковы, только их смысл несколько различен для открытия и закрытия файлов. Основное свойство, в котором возвращается в виде строки выбранный пользователем файл, — FileName. Типы искомых файлов, появляющиеся в диалоге в выпадающем списке "Тип файла", задаются свойством Filter.
При решении поставленной задачи будут использованы следующие объекты (рисунок 2.1)
Рисунок 2.1 Объекты программы
Примечание – источник: собственная разработка
Button1..6 - командные кнопки;
Label1..3 – информационные метки;
Edit1 – поле ввода ключа шифра;
Memo1..2 – многострочные текстовые редакторы;
OpenDialog1 – диалог открытия файлов;
SaveDialog1 – диалог сохранения файлов.
Данные объекты размещены нами на форме пользовательского интерфейса, которая представлена на рисунке 2.2 и 2.3.
Рисунок 2.2 Форма пользовательского интерфейса в режиме шифровки
Рисунок 2.3 Форма пользовательского интерфейса в режиме дешифровки
Главной кнопке «Зашифровать»/«Дешифровать» назначим программный код:
procedure TForm1.Button1Click(Sender: TObject);
var w,w0,w1: string; i,k: integer;
begin
str:=Memo1.Text; memo2.Text:=''; w0:=''; w:=Edit1.Text;
if (w='') or (str='') then begin MessageDlg('Присутствуют пустые поля',mtInformation, [mbOK], 0);
exit; end;
if Button1.Caption='Зашифровать' then begin k:=1;
for i:=1 to Length(str) do begin
Memo2.Text:=Memo2.Text+str[i]+
k:=k+1;
if k>length(w) then k:=1;
end;
end
else begin
if op then for i:=1 to Length(str) do
if (str[i]=#$A) then Delete(str,i,1);
for i:=1 to Length(str) do
if not (odd(i)) then w0:=w0+str[i];
k:=1;
for i:=1 to length(w0) do begin
w1:=w1+w[k];
k:=k+1;
if k>length(w) then k:=1; end;
if w1=w0 then begin
for i:=1 to length(str) do begin
if (str[i]=#$D) and (op) then Memo2.Text:=Memo2.Text+#10;
if odd(i) then Memo2.Text:=Memo2.Text+str[i]; end; end
else MessageDlg('Неправильный ключ', mtWarning, [mbcancel],0); exit; end;
op:=false;
end;
Кнопка «<-->» отвечает за переключение между режимами программы. Ей назначим код:
procedure TForm1.Button2Click(Sender: TObject);
begin
if Label1.Caption='Исходный текст' then begin
Label1.Caption:='Зашифрованный текст';
Label2.Caption:='Исходный текcт';
Button1.Caption:='Дешифровать'
end
else
begin
Label1.Caption:='Исходный текст';
Label2.Caption:='Зашифрованный текст';
Button1.Caption:='Зашифровать'
end; end;
Для проверки правильности работы программы зашифруем какое-нибудь одно слово, чтобы с легкостью проверить правильность результата вручную.
Запишем в поле «Исходный текст» слово «Мобильник», а в поле «Слово-пароль» - «кот» и нажмем кнопку «Зашифровать» (рисунок 2.4)
Рисунок 2.4 Шифрование слова при помощи программы.
Зашифровав слово ручным методом и с помощью программы, мы убедились в правильности ее работы.
Проверим работу программы, зашифровав большой текст, а затем проведя обратный процесс. Шифровка представлена на рисунке 2.5
Рисунок 2.5 Диалоговое окно программы после процесса шифровки
Также выполним
обратный процесс с зашифрованным
текстом, поменяв режим работы, скопировав
зашифрованный текст в
Рисунок 2.6 Диалоговое окно программы в процессе дешифровки при неправильно введенном ключе
Введя правильный ключ, при дешифровке мы получили такой же исходный текст, что показывает правильную работу программы (рисунок 2.7).
Рисунок 2.7 Диалоговое окно программы после процесса дешифровки
Анализируя результаты, полученные при выполнении программы, приходим к выводу, что программа способна шифровать и дешифровать текст и то, что она работает корректно.
Заключение
В процессе выполнения курсовой работы были усвоены некоторые возможности Delphi. Даже эта их небольшая часть показывает нам колоссальные возможности этой среды.
Целью курсовой работы было осуществление шифровки и дешифровки текста с помощью средств среды Delphi.
При выполнении курсовой работы:
Полученная нами программа способна шифровать, дешифровать текст, выполнять его открытие из файла и сохранение в файл.
Знания, полученные в результате работы над курсовым проектом, позволят в дальнейшем использовать Delphi для решения технических задач.