-
Notifications
You must be signed in to change notification settings - Fork 0
/
MainForm.pas
815 lines (741 loc) · 29.2 KB
/
MainForm.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
unit MainForm;
interface
uses
Winapi.ShellAPI, Winapi.Windows, Winapi.Messages, System.SysUtils,
System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls,
Vcl.WinXPanels, Vcl.ComCtrls, Vcl.Menus, Data.DB, Vcl.Grids, Vcl.DBGrids,
Data.Win.ADODB, Clipbrd, Vcl.NumberBox;
type
TForm2 = class(TForm)
Panel1: TPanel;
ShifrShow: TButton;
labelLogo: TLabel;
nameUser: TLabel;
ShifrPanel: TPanel;
AccountShow: TButton;
AdminShow: TButton;
Button3: TButton;
AccountPanel: TPanel;
AdminPanel: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
ADOQuery1: TADOQuery;
ADOConnection1: TADOConnection;
ShifrAdd: TPanel;
brnAddShifr: TButton;
btnDeleteShifr: TButton;
Label6: TLabel;
statusAdmin: TLabel;
ComboBox1: TComboBox;
Label7: TLabel;
Edit1: TEdit;
Label8: TLabel;
Button1: TButton;
Button2: TButton;
Label5: TLabel;
Button4: TButton;
Button5: TButton;
Label9: TLabel;
Button6: TButton;
DBGrid2: TDBGrid;
CheckBox1: TCheckBox;
Edit2: TEdit;
Label10: TLabel;
NumberBox1: TNumberBox;
Label11: TLabel;
Label12: TLabel;
Edit3: TEdit;
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure ShifrShowClick(Sender: TObject);
procedure AccountShowClick(Sender: TObject);
procedure AdminShowClick(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure brnAddShifrClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure DBGrid1CellClick(Column: TColumn);
procedure FormCreate(Sender: TObject);
procedure btnDeleteShifrClick(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure DBGrid2CellClick(Column: TColumn);
procedure ComboBox1Select(Sender: TObject);
protected
procedure CreateParams(var Params: TCreateParams); override;
private
FUserName: string;
FUserRole: string;
FUserID: Integer;
FSelectedRowIndex: Integer;
FSelectedRowIndex2: Integer;
{ Private declarations }
public
property UserName: string read FUserName write FUserName;
property UserRole: string read FUserRole write FUserRole;
property UserID: Integer read FUserID write FUserID;
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
Params.WndParent := 0;
end;
// Ïðîöåäóðà, âûçûâàåìàÿ ïðè êëèêå íà êíîïêó "AccountShow"
procedure TForm2.AccountShowClick(Sender: TObject);
begin
// Ïîêàçàòü ïàíåëü "AccountPanel"
AccountPanel.Visible := True;
// Ïåðåíåñòè ïàíåëü "AccountPanel" íà ïåðåäíèé ïëàí
AccountPanel.BringToFront;
// Çàäàòü çíà÷åíèå äëÿ ìåòêè "label5", ñîäåðæàùåé èíôîðìàöèþ îá àêêàóíòå ïîëüçîâàòåëÿ
Label5.Caption := 'Èìÿ ïîëüçîâàòåëÿ: ' + FUserName + #13#10 +
'Äîñòóïíàÿ ðîëü: ' + FUserRole + #13#10 + 'Ïåðñîíàëüíûé èäåíòèôèêàòîð: ' +
FUserID.ToString;
// Ñêðûòü ïàíåëü "ShifrPanel"
ShifrPanel.Visible := False;
// Ñêðûòü ïàíåëü "AdminPanel"
AdminPanel.Visible := False;
end;
// Îòêðûâàåòñÿ ôîðìà àäìèíèñòðàòîðà ïðè íàæàòèè íà ñîîòâåòñòâóþùóþ êíîïêó
procedure TForm2.AdminShowClick(Sender: TObject);
begin
// Ïîêàçûâàåòñÿ ïàíåëü àäìèíèñòðàòîðà è îíà ïåðåâîäèòñÿ íà ïåðåäíèé ïëàí
AdminPanel.Visible := True;
AdminPanel.BringToFront;
// Ñîçäàåòñÿ ADOQuery1 äëÿ ðàáîòû ñ áàçîé äàííûõ
ADOQuery1 := TADOQuery.Create(nil);
ADOQuery1.Connection := ADOConnection1;
// Â SQL-çàïðîñå óêàçûâàåòñÿ, ÷òî íåîáõîäèìî âûáðàòü âñå çàïèñè èç òàáëèöû "Users"
ADOQuery1.SQL.Text := 'SELECT * FROM [Users]';
// Âûïîëíÿåòñÿ çàïðîñ ê áàçå äàííûõ
ADOQuery1.Open;
// Ñîçäàåòñÿ îáúåêò DataSource1, êîòîðûé ñâÿçûâàåò êîìïîíåíò DBGrid2 ñ áàçîé äàííûõ
DataSource1 := TDataSource.Create(nil);
DataSource1.DataSet := ADOQuery1;
// Óñòàíàâëèâàþòñÿ çàãîëîâêè äëÿ ñòîëáöîâ òàáëèöû â DBGrid2 è èõ øèðèíà
DBGrid2.DataSource := DataSource1;
DBGrid2.Columns[0].Title.Caption := 'Íîìåð â áàçå';
DBGrid2.Columns[0].Width := 80;
DBGrid2.Columns[1].Title.Caption := 'Èìÿ ïîëüçîâàòåëÿ';
DBGrid2.Columns[1].Width := 215;
DBGrid2.Columns[2].Title.Caption := 'Ëîãèí';
DBGrid2.Columns[2].Width := 150;
DBGrid2.Columns[3].Title.Caption := 'Ïàðîëü';
DBGrid2.Columns[3].Width := 85;
DBGrid2.Columns[4].Title.Caption := 'Ðîëü';
DBGrid2.Columns[4].Width := 97;
// Ñêðûâàþòñÿ ïàíåëè ñ àêêàóíòîì è øèôðîâàíèåì
ShifrPanel.Visible := False;
AccountPanel.Visible := False;
end;
procedure TForm2.brnAddShifrClick(Sender: TObject);
begin
ShifrAdd.Visible := True; // äåëàåì ïàíåëü âèäèìîé
ShifrAdd.BringToFront; // âûçûâàåì ïàíåëü íà ïåðåäíèé ïëàí
if ComboBox1.Text = 'Öåçàðü' then
begin
// Ïîêàçûâàåì êîìïîíåíò äëÿ ââîäà ñäâèãà
NumberBox1.Visible := True;
// Ïîêàçûâàåì ìåòêó ñ ïîäñêàçêîé
Label11.Visible := True;
// Ñêðûâàåì êîìïîíåíò äëÿ ââîäà êëþ÷à
Edit3.Visible := False;
// Ñêðûâàåì ìåòêó ñ ïîäñêàçêîé äëÿ êëþ÷à
Label12.Visible := False;
end;
end;
procedure TForm2.btnDeleteShifrClick(Sender: TObject);
var
IDText: Integer;
begin
// Ïîëó÷àåì IDText èç âûáðàííîé ñòðîêè â DBGrid1
if FSelectedRowIndex > 0 then
begin
// ïåðåõîäèì ê âûáðàííîé ñòðîêå
DBGrid1.DataSource.DataSet.RecNo := FSelectedRowIndex;
// ïîëó÷àåì çíà÷åíèÿ èç ÿ÷ååê âûáðàííîé ñòðîêè
IDText := DBGrid1.Columns[0].Field.AsInteger;
// Ïðåäóïðåæäåíèå ïåðåä óäàëåíèåì
if MessageBox(Handle,
PChar('Âû óâåðåíû, ÷òî õîòèòå óäàëèòü çàïèñü ñ IDText = ' +
IntToStr(IDText) + '?'), PChar('Óäàëåíèå çàïèñè'), MB_ICONWARNING or
MB_YESNO) = IDYES then
begin
// Âûïîëíÿåì SQL-çàïðîñ íà óäàëåíèå çàïèñè
ADOQuery1.SQL.Text := 'DELETE FROM [Text] WHERE [IDText] = ' +
IntToStr(IDText);
ADOQuery1.ExecSQL;
// îáíîâëÿåì òàáëèöó (ýòî äóáëÿæ êîäà, îí èñïîëüçóåòñÿ ïî íàæàòèþ è îòîáðàæåíèþ ïàíåëè)
ADOQuery1 := TADOQuery.Create(nil);
ADOQuery1.Connection := ADOConnection1;
ADOQuery1.SQL.Text :=
'SELECT [IDText], [EncryptionText], [EncryptionMethod], [DateAdded] FROM [Text] WHERE [IDUser] = :UserID ORDER BY [DateAdded] ASC';
ADOQuery1.Parameters.ParamByName('UserID').Value := FUserID;
ADOQuery1.Open;
DataSource1 := TDataSource.Create(nil);
DataSource1.DataSet := ADOQuery1;
DBGrid1.DataSource := DataSource1;
DBGrid1.Columns[0].Title.Caption := 'Íîìåð â áàçå';
DBGrid1.Columns[0].Width := 80;
DBGrid1.Columns[1].Title.Caption := 'Øèôðîâàííûé òåêñò';
DBGrid1.Columns[1].Width := 215;
DBGrid1.Columns[2].Title.Caption := 'Ìåòîä øèôðîâàíèÿ';
DBGrid1.Columns[2].Width := 150;
DBGrid1.Columns[3].Title.Caption := 'Äàòà ñîçäàíèÿ';
DBGrid1.Columns[3].Width := 125;
// -----
MessageBox(Handle, 'Óäàëåíî óñïåøíî!', 'Óñïåõ', MB_OK or MB_ICONWARNING);
end;
end
else
ShowMessage('Âûáåðèòå ñòðîêó äëÿ óäàëåíèÿ!');
end;
// Îáðàáîò÷èê íàæàòèÿ íà êíîïêó "Button3"
procedure TForm2.Button3Click(Sender: TObject);
var
ExeName: string; // Îáúÿâëÿåì ñòðîêîâóþ ïåðåìåííóþ ExeName
begin
ExeName := Application.ExeName;
// Ïîëó÷àåì ïîëíûé ïóòü ê çàïóùåííîìó exe-ôàéëó è ñîõðàíÿåì åãî â ïåðåìåííóþ ExeName
// Îòêðûâàåì íîâûé ýêçåìïëÿð ïðîãðàììû
// Handle - äåñêðèïòîð îêíà, êîòîðîå çàïóñêàåò íîâûé ýêçåìïëÿð ïðîãðàììû
// nil - óêàçàòåëü íà ñòðîêó ïàðàìåòðîâ êîìàíäíîé ñòðîêè (îíè íå òðåáóþòñÿ)
// PChar(ExeName) - óêàçàòåëü íà èìÿ ôàéëà, êîòîðûé áóäåò çàïóùåí
// nil - óêàçàòåëü íà ðàáî÷óþ ïàïêó (îíà íå òðåáóåòñÿ)
// SW_SHOWNORMAL - ôëàã, óêàçûâàþùèé, êàê îòêðûòü ïðèëîæåíèå
ShellExecute(Handle, nil, PChar(ExeName), nil, nil, SW_SHOWNORMAL);
Application.Terminate; // Çàâåðøàåì òåêóùèé ýêçåìïëÿð ïðîãðàììû
end;
// Îáðàáîò÷èê êëèêà ïî êíîïêå "Button4"
procedure TForm2.Button4Click(Sender: TObject);
begin
// Ñîçäàíèå íîâîãî îáúåêòà çàïðîñà ê áàçå äàííûõ
ADOQuery1 := TADOQuery.Create(nil);
// Ïðèñâîåíèå ñîåäèíåíèÿ ê áàçå äàííûõ
ADOQuery1.Connection := ADOConnection1;
// Óñòàíîâêà òåêñòà SQL-çàïðîñà, êîòîðûé âûáèðàåò âñå çàïèñè èç òàáëèöû "Text"
// â îïðåäåëåííîì ïîðÿäêå (ASC - ïî âîçðàñòàíèþ äàòû äîáàâëåíèÿ)
ADOQuery1.SQL.Text :=
'SELECT [IDText], [EncryptionText], [EncryptionMethod], [DateAdded], [IDUser] FROM [Text] ORDER BY [DateAdded] ASC';
// Îòêðûòèå çàïðîñà
ADOQuery1.Open;
// Ñîçäàíèå íîâîãî îáúåêòà èñòî÷íèêà äàííûõ
DataSource1 := TDataSource.Create(nil);
// Ïðèñâîåíèå íàáîðà äàííûõ ê èñòî÷íèêó äàííûõ
DataSource1.DataSet := ADOQuery1;
// Ïðèñâîåíèå èñòî÷íèêà äàííûõ ê êîìïîíåíòó DBGrid1
DBGrid1.DataSource := DataSource1;
// Óñòàíîâêà çàãîëîâêà ïåðâîé êîëîíêè â DBGrid1
DBGrid1.Columns[0].Title.Caption := 'Íîìåð â áàçå';
// Óñòàíîâêà øèðèíû ïåðâîé êîëîíêè â DBGrid1
DBGrid1.Columns[0].Width := 80;
// Óñòàíîâêà çàãîëîâêà âòîðîé êîëîíêè â DBGrid1
DBGrid1.Columns[1].Title.Caption := 'Øèôðîâàííûé òåêñò';
// Óñòàíîâêà øèðèíû âòîðîé êîëîíêè â DBGrid1
DBGrid1.Columns[1].Width := 215;
// Óñòàíîâêà çàãîëîâêà òðåòüåé êîëîíêè â DBGrid1
DBGrid1.Columns[2].Title.Caption := 'Ìåòîä øèôðîâàíèÿ';
// Óñòàíîâêà øèðèíû òðåòüåé êîëîíêè â DBGrid1
DBGrid1.Columns[2].Width := 100;
// Óñòàíîâêà çàãîëîâêà ÷åòâåðòîé êîëîíêè â DBGrid1
DBGrid1.Columns[3].Title.Caption := 'Äàòà ñîçäàíèÿ';
// Óñòàíîâêà øèðèíû ÷åòâåðòîé êîëîíêè â DBGrid1
DBGrid1.Columns[3].Width := 125;
// Óñòàíîâêà çàãîëîâêà ïÿòîé êîëîíêè â DBGrid1
DBGrid1.Columns[4].Title.Caption := '¹ àêêàóíòà';
// Óñòàíîâêà øèðèíû ïÿòîé êîëîíêè â DBGrid1
DBGrid1.Columns[4].Width := 70;
end;
// Îáðàáîò÷èê ñîáûòèÿ íàæàòèÿ íà êíîïêó Button5
procedure TForm2.Button5Click(Sender: TObject);
begin
// Ñîçäàåì îáúåêò ADOQuery1
ADOQuery1 := TADOQuery.Create(nil);
// Ïðèñâàèâàåì åìó ñîåäèíåíèå ADOConnection1
ADOQuery1.Connection := ADOConnection1;
// Óñòàíàâëèâàåì SQL-çàïðîñ, êîòîðûé âûáèðàåò èç òàáëèöû Text çàïèñè ñ çàäàííûì çíà÷åíèåì IDUser
ADOQuery1.SQL.Text :=
'SELECT [IDText], [EncryptionText], [EncryptionMethod], [DateAdded] FROM [Text] WHERE [IDUser] = :UserID ORDER BY [DateAdded] ASC';
// Çàäàåì çíà÷åíèå ïàðàìåòðà :UserID, èñïîëüçóÿ ñâîéñòâî Value îáúåêòà Parameters, àíàëîãè÷íî ñèíòàêñèñó ïàðàìåòðà ïðè âûïîëíåíèè çàïðîñà â SQL-ñåðâåðå
ADOQuery1.Parameters.ParamByName('UserID').Value := FUserID;
// Îòêðûâàåì îáúåêò ADOQuery1
ADOQuery1.Open;
// Ñîçäàåì îáúåêò DataSource1 è ñâÿçûâàåì åãî ñ îáúåêòîì ADOQuery1
DataSource1 := TDataSource.Create(nil);
DataSource1.DataSet := ADOQuery1;
// Óñòàíàâëèâàåì èñòî÷íèê äàííûõ äëÿ îáúåêòà DBGrid1
DBGrid1.DataSource := DataSource1;
// Çàäàåì çàãîëîâêè äëÿ ñòîëáöîâ òàáëèöû DBGrid1
DBGrid1.Columns[0].Title.Caption := 'Íîìåð â áàçå';
DBGrid1.Columns[0].Width := 80;
DBGrid1.Columns[1].Title.Caption := 'Øèôðîâàííûé òåêñò';
DBGrid1.Columns[1].Width := 215;
DBGrid1.Columns[2].Title.Caption := 'Ìåòîä øèôðîâàíèÿ';
DBGrid1.Columns[2].Width := 150;
DBGrid1.Columns[3].Title.Caption := 'Äàòà ñîçäàíèÿ';
DBGrid1.Columns[3].Width := 125;
end;
procedure TForm2.Button6Click(Sender: TObject);
var
Login: string;
Role: string;
begin
// Ïîëó÷àåì çíà÷åíèÿ èç âûáðàííîé ñòðîêè â DBGrid1
if FSelectedRowIndex2 > 0 then
begin
// ïåðåõîäèì ê âûáðàííîé ñòðîêå
DBGrid2.DataSource.DataSet.RecNo := FSelectedRowIndex2;
// ïîëó÷àåì çíà÷åíèÿ èç ÿ÷ååê âûáðàííîé ñòðîêè
Login := DBGrid2.Columns[2].Field.AsString;
Role := DBGrid2.Columns[4].Field.AsString;
// Ìåíÿåì ðîëü ïîëüçîâàòåëÿ
if Role = 'User' then
Role := 'Admin'
else if Role = 'Admin' then
Role := 'User';
// Âûïîëíÿåì SQL-çàïðîñ íà îáíîâëåíèå ðîëè ïîëüçîâàòåëÿ
ADOQuery1.SQL.Text := 'UPDATE [Users] SET Role = ' + QuotedStr(Role) +
' WHERE [Login] = ' + QuotedStr(Login);
ADOQuery1.ExecSQL;
// Îáíîâëÿåì ñîäåðæèìîå DBGrid2
ADOQuery1 := TADOQuery.Create(nil);
ADOQuery1.Connection := ADOConnection1;
ADOQuery1.SQL.Text := 'SELECT * FROM [Users]';
ADOQuery1.Open;
DataSource1 := TDataSource.Create(nil);
DataSource1.DataSet := ADOQuery1;
DBGrid2.DataSource := DataSource1;
DBGrid2.Columns[0].Title.Caption := 'Íîìåð â áàçå';
DBGrid2.Columns[0].Width := 80;
DBGrid2.Columns[1].Title.Caption := 'Èìÿ ïîëüçîâàòåëÿ';
DBGrid2.Columns[1].Width := 215;
DBGrid2.Columns[2].Title.Caption := 'Ëîãèí';
DBGrid2.Columns[2].Width := 150;
DBGrid2.Columns[3].Title.Caption := 'Ïàðîëü';
DBGrid2.Columns[3].Width := 85;
DBGrid2.Columns[4].Title.Caption := 'Ðîëü';
DBGrid2.Columns[4].Width := 97;
ShowMessage('Óñïåøíî!');
end
else
ShowMessage('Âûáåðèòå ñòðîêó!');
end;
// Îáðàáîò÷èê ñîáûòèÿ âûáîðà ýëåìåíòà â ComboBox
procedure TForm2.ComboBox1Select(Sender: TObject);
begin
// Åñëè âûáðàí ìåòîä "Öåçàðü"
if ComboBox1.Text = 'Öåçàðü' then
begin
// Ïîêàçûâàåì êîìïîíåíò äëÿ ââîäà ñäâèãà
NumberBox1.Visible := True;
// Ïîêàçûâàåì ìåòêó ñ ïîäñêàçêîé
Label11.Visible := True;
// Ñêðûâàåì êîìïîíåíò äëÿ ââîäà êëþ÷à
Edit3.Visible := False;
// Ñêðûâàåì ìåòêó ñ ïîäñêàçêîé äëÿ êëþ÷à
Label12.Visible := False;
end
// Åñëè âûáðàí ìåòîä "Øèôð Àòáàøà"
else if ComboBox1.Text = 'Øèôð Àòáàøà' then
begin
// Ñêðûâàåì êîìïîíåíò äëÿ ââîäà ñäâèãà
NumberBox1.Visible := False;
// Ñêðûâàåì ìåòêó ñ ïîäñêàçêîé äëÿ ñäâèãà
Label11.Visible := False;
// Ñêðûâàåì êîìïîíåíò äëÿ ââîäà êëþ÷à
Edit3.Visible := False;
// Ñêðûâàåì ìåòêó ñ ïîäñêàçêîé äëÿ êëþ÷à
Label12.Visible := False;
end
//  ïðîòèâíîì ñëó÷àå
else
begin
// Ïîêàçûâàåì êîìïîíåíò äëÿ ââîäà êëþ÷à
Edit3.Visible := True;
// Ïîêàçûâàåì ìåòêó ñ ïîäñêàçêîé äëÿ êëþ÷à
Label12.Visible := True;
// Ñêðûâàåì êîìïîíåíò äëÿ ââîäà ñäâèãà
NumberBox1.Visible := False;
// Ñêðûâàåì ìåòêó ñ ïîäñêàçêîé äëÿ ñäâèãà
Label11.Visible := False;
end;
end;
// Îáðàáîò÷èê ñîáûòèÿ êëèêà ïî ÿ÷åéêå òàáëèöû DBGrid1
procedure TForm2.DBGrid1CellClick(Column: TColumn);
begin
FSelectedRowIndex := DBGrid1.DataSource.DataSet.RecNo;
// ñîõðàíÿåì íîìåð âûáðàííîé ñòðîêè
end;
// Îáðàáîò÷èê ñîáûòèÿ êëèêà ïî ÿ÷åéêå òàáëèöû DBGrid2
procedure TForm2.DBGrid2CellClick(Column: TColumn);
begin
FSelectedRowIndex2 := DBGrid2.DataSource.DataSet.RecNo;
// ñîõðàíÿåì íîìåð âûáðàííîé ñòðîêè
end;
// Îáðàáîò÷èê ñîáûòèÿ çàêðûòèÿ ôîðìû
procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
Res: Integer;
begin
Res := MessageBox(Handle, 'Âû äåéñòâèòåëüíî õîòèòå çàêðûòü ïðèëîæåíèå?',
// âûâîäèì äèàëîãîâîå îêíî ñ âîïðîñîì î çàêðûòèè
'Çàêðûòü', MB_YESNO or MB_ICONQUESTION);
CanClose := Res = IDYES; // ñîõðàíÿåì îòâåò ïîëüçîâàòåëÿ íà âîïðîñ î çàêðûòèè
if CanClose then // åñëè ïîëüçîâàòåëü ñîãëàñåí çàêðûòü ïðèëîæåíèå
Application.Terminate; // çàêðûâàåì ïðèëîæåíèå
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
ADOConnection1.Connected := False;
ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;' +
'Data Source=' + GetCurrentDir + '\Data\data_clear.mdb;' +
'Persist Security Info=False;';
ADOConnection1.Connected := True;
inherited;
FSelectedRowIndex := -1;
end;
procedure TForm2.FormShow(Sender: TObject);
begin
nameUser.Caption := 'Äîáðî ïîæàëîâàòü: ' + FUserName;
if FUserRole = 'Admin' then
begin
// ïîêàçûâàåì äëÿ ðîëè àäìèíèñòðàòîðà
AdminShow.Visible := True;
statusAdmin.Visible := True;
Button4.Visible := True;
Button5.Visible := True;
end;
end;
// Îòîáðàæåíèå ïàíåëè äëÿ øèôðîâàíèÿ òåêñòà è çàãðóçêà äàííûõ èç áàçû äàííûõ
procedure TForm2.ShifrShowClick(Sender: TObject);
begin
ShifrPanel.Visible := True; // ïîêàçàòü ïàíåëü äëÿ øèôðîâàíèÿ
ShifrPanel.BringToFront; // ïåðåìåñòèòü ïàíåëü âïåðåä, ÷òîáû îíà áûëà âèäíà
ADOQuery1 := TADOQuery.Create(nil); // ñîçäàòü ýêçåìïëÿð ADOQuery
ADOQuery1.Connection := ADOConnection1;
// óñòàíîâèòü ñîåäèíåíèå ñ áàçîé äàííûõ
ADOQuery1.SQL.Text :=
'SELECT [IDText], [EncryptionText], [EncryptionMethod], [DateAdded] FROM [Text] WHERE [IDUser] = :UserID';
// âûáðàòü äàííûå èç òàáëèöû [Text], ãäå [IDUser] ñîîòâåòñòâóåò çàäàííîìó çíà÷åíèþ
ADOQuery1.Parameters.ParamByName('UserID').Value := FUserID;
// óñòàíîâèòü çíà÷åíèå ïàðàìåòðà :UserID ðàâíûì FUserID
ADOQuery1.Open; // âûïîëíèòü çàïðîñ è îòêðûòü ðåçóëüòàòû
DataSource1 := TDataSource.Create(nil); // ñîçäàòü èñòî÷íèê äàííûõ
DataSource1.DataSet := ADOQuery1; // óñòàíîâèòü èñòî÷íèê äàííûõ äëÿ ADOQuery1
DBGrid1.DataSource := DataSource1; // óñòàíîâèòü èñòî÷íèê äàííûõ äëÿ DBGrid1
DBGrid1.Columns[0].Title.Caption := 'Íîìåð â áàçå';
// óñòàíîâèòü çàãîëîâîê äëÿ ïåðâîé êîëîíêè
DBGrid1.Columns[0].Width := 80; // óñòàíîâèòü øèðèíó äëÿ ïåðâîé êîëîíêè
DBGrid1.Columns[1].Title.Caption := 'Øèôðîâàííûé òåêñò';
// óñòàíîâèòü çàãîëîâîê äëÿ âòîðîé êîëîíêè
DBGrid1.Columns[1].Width := 215; // óñòàíîâèòü øèðèíó äëÿ âòîðîé êîëîíêè
DBGrid1.Columns[2].Title.Caption := 'Ìåòîä øèôðîâàíèÿ';
// óñòàíîâèòü çàãîëîâîê äëÿ òðåòüåé êîëîíêè
DBGrid1.Columns[2].Width := 150; // óñòàíîâèòü øèðèíó äëÿ òðåòüåé êîëîíêè
DBGrid1.Columns[3].Title.Caption := 'Äàòà ñîçäàíèÿ';
// óñòàíîâèòü çàãîëîâîê äëÿ ÷åòâåðòîé êîëîíêè
DBGrid1.Columns[3].Width := 125; // óñòàíîâèòü øèðèíó äëÿ ÷åòâåðòîé êîëîíêè
AccountPanel.Visible := False; // ñêðûòü ïàíåëü àêêàóíòà
AdminPanel.Visible := False; // ñêðûòü ïàíåëü àäìèíèñòðàòîðà
end;
// ÌÅÒÎÄÛ ØÈÔÐÎÂÀÍÈß ÈÄÓÒ Â ÂÈÄÅ ÔÓÍÊÖÈÉ, ÊÎÒÎÐÛÅ ÏÐÈÍÈÌÀÞÒ È ÂÎÇÂÐÀÙÀÞÒ ÎÏÐÅÄÅËÅÍÍÛÅ ÇÍÀ×ÅÍÈß
// *** Öåçàðü ***
// Ýòîò ìåòîä ïðèíèìàåò òåêñò è ñäâèã è âîçâðàùàåò çàøèôðîâàííûé òåêñò.
// Îí ðàáîòàåò ïî ïðèíöèïó çàìåíû êàæäîé áóêâû âõîäíîãî òåêñòà íà áóêâó, íàõîäÿùóþñÿ íà ðàññòîÿíèè ñäâèãà â àëôàâèòå.
function CaesarCipher(PlainText: string; Shift: Integer): string;
var
i: Integer;
EncryptedText: string;
NumberBox1: TNumberBox;
begin
NumberBox1 := TNumberBox.Create(nil);
EncryptedText := '';
for i := 1 to Length(PlainText) do
// ïðîõîäèì ïî êàæäîìó ñèìâîëó âõîäíîãî òåêñòà
if PlainText[i] in ['a' .. 'z'] then
// åñëè ñèìâîë - ìàëåíüêàÿ áóêâà àíãëèéñêîãî àëôàâèòà
EncryptedText := EncryptedText +
Chr(Ord('a') + ((Ord(PlainText[i]) - Ord('a') + Shift) mod 26))
// øèôðóåì ñèìâîë ïî ôîðìóëå øèôðà Öåçàðÿ äëÿ ìàëåíüêèõ áóêâ
else if PlainText[i] in ['A' .. 'Z'] then
// åñëè ñèìâîë - áîëüøàÿ áóêâà àíãëèéñêîãî àëôàâèòà
EncryptedText := EncryptedText +
Chr(Ord('A') + ((Ord(PlainText[i]) - Ord('A') + Shift) mod 26))
// øèôðóåì ñèìâîë ïî ôîðìóëå øèôðà Öåçàðÿ äëÿ áîëüøèõ áóêâ
else
EncryptedText := EncryptedText + PlainText[i];
// îñòàâëÿåì ñèìâîë íåèçìåííûì, åñëè îí íå ÿâëÿåòñÿ áóêâîé
Result := EncryptedText; // âîçâðàùàåì çàøèôðîâàííûé èëè ðàñøèôðîâàííûé òåêñò
end;
// *** Øèôð Àòáàøà ***
// Ýòîò ìåòîä ïðèíèìàåò òåêñò è âîçâðàùàåò åãî çàøèôðîâàííóþ âåðñèþ ñ ïîìîùüþ øèôðà Àòáàøà.
// Øèôð Àòáàøà ÿâëÿåòñÿ îäíèì èç ïðîñòûõ ìåòîäîâ çàìåíû ñèìâîëîâ, ãäå êàæäûé ñèìâîë çàìåíÿåòñÿ íà ñèìâîë, ðàñïîëîæåííûé íà ïðîòèâîïîëîæíîì êîíöå àëôàâèòà.
// Òàêèì îáðàçîì, ïåðâàÿ áóêâà çàìåíÿåòñÿ íà ïîñëåäíþþ, âòîðàÿ íà ïðåäïîñëåäíþþ è ò.ä.
// Äëÿ ðàñøèôðîâêè òåêñòà íåîáõîäèìî ïðîñòî èñïîëüçîâàòü øèôð Àòáàøà åùå ðàç.
// Ôóíêöèÿ äëÿ øèôðîâàíèÿ òåêñòà ìåòîäîì Àòáàø
function AtbashCipher(PlainText: string): string;
var
i: Integer;
EncryptedText: string; // ïåðåìåííàÿ äëÿ õðàíåíèÿ çàøèôðîâàííîãî òåêñòà
begin
EncryptedText := ''; // èíèöèàëèçèðóåì ïåðåìåííóþ
for i := 1 to Length(PlainText) do // öèêë ïî âñåì ñèìâîëàì âõîäíîãî òåêñòà
begin
if (PlainText[i] >= 'A') and (PlainText[i] <= 'Z') then
// åñëè ñèìâîë - çàãëàâíàÿ áóêâà
EncryptedText := EncryptedText +
Chr(Ord('Z') - (Ord(PlainText[i]) - Ord('A')))
// äîáàâëÿåì â çàøèôðîâàííûé òåêñò ñîîòâåòñòâóþùèé ñèìâîë èç îáðàòíîãî àëôàâèòà
else if (PlainText[i] >= 'a') and (PlainText[i] <= 'z') then
// åñëè ñèìâîë - ñòðî÷íàÿ áóêâà
EncryptedText := EncryptedText +
Chr(Ord('z') - (Ord(PlainText[i]) - Ord('a')))
// äîáàâëÿåì â çàøèôðîâàííûé òåêñò ñîîòâåòñòâóþùèé ñèìâîë èç îáðàòíîãî àëôàâèòà
else // åñëè ñèìâîë íå ÿâëÿåòñÿ áóêâîé
EncryptedText := EncryptedText + PlainText[i];
// äîáàâëÿåì ñèìâîë â çàøèôðîâàííûé òåêñò áåç èçìåíåíèé
end;
Result := EncryptedText; // âîçâðàùàåì çàøèôðîâàííûé òåêñò
end;
// *** Øèôð Âèæíåðà ***
// Ýòîò ìåòîä ïðèíèìàåò òåêñò è êëþ÷ è âîçâðàùàåò çàøèôðîâàííûé òåêñò.
// Îí ðàáîòàåò ïî ïðèíöèïó çàìåíû êàæäîé áóêâû âõîäíîãî òåêñòà íà áóêâó, íàõîäÿùóþñÿ íà ðàññòîÿíèè ñèìâîëà êëþ÷à â àëôàâèòå.
// true - øèôðóåì, false - ðàñøèôðîâûâàåì
function VigenereCipher(PlainText, Key: string; Encrypt: Boolean): string;
var
i, j: Integer;
KeyIndex: Integer;
EncryptedText: string;
begin
EncryptedText := '';
KeyIndex := 1;
for i := 1 to Length(PlainText) do
begin
if not(PlainText[i] in ['a' .. 'z', 'A' .. 'Z']) then
begin
EncryptedText := EncryptedText + PlainText[i];
Continue;
end;
if Encrypt then
EncryptedText := EncryptedText +
Chr((Ord(UpCase(PlainText[i])) + Ord(UpCase(Key[KeyIndex])) - 2 *
Ord('A')) mod 26 + Ord('A'))
else
EncryptedText := EncryptedText +
Chr((Ord(UpCase(PlainText[i])) - Ord(UpCase(Key[KeyIndex])) + 26) mod 26
+ Ord('A'));
Inc(KeyIndex);
if KeyIndex > Length(Key) then
KeyIndex := 1;
end;
Result := EncryptedText;
end;
// *** Òàáëè÷íîå øèôðîâàíèå ***
// Ìåòîä òàáëè÷íîãî øèôðîâàíèÿ çàêëþ÷àåòñÿ â çàìåíå ñèìâîëîâ òåêñòà íà ñèìâîëû èç çàðàíåå îïðåäåëåííîé òàáëèöû çàìåí.
// Äëÿ øèôðîâàíèÿ èñïîëüçóåòñÿ òàáëèöà, ñîñòîÿùàÿ èç ñòðîê è ñòîëáöîâ, çàïîëíåííàÿ ïðîèçâîëüíûìè ñèìâîëàìè.
// Êëþ÷îì øèôðîâàíèÿ ÿâëÿåòñÿ ñàìà òàáëèöà, êîòîðóþ çíàåò òîëüêî îòïðàâèòåëü è ïîëó÷àòåëü.
function TableEncryption(Text, Key: string): string;
const
TableSize = 6; // ðàçìåð òàáëèöû òóò ñòàòè÷íûé, âñåãî 6 ÿ÷ååê
var
Table: array [1 .. TableSize, 1 .. TableSize] of Char;
i, j, k: Integer;
EncryptedText: string;
begin
// Çàïîëíÿåì òàáëèöó ñèìâîëàìè àëôàâèòà, íà÷èíàÿ ñ ñèìâîëà êëþ÷à
k := Pos(Key[1], 'ABCDEFGHIJKLMNOPQRSTUVWXYZ') - 1;
for i := 1 to TableSize do
for j := 1 to TableSize do
begin
Table[i, j] := Char(Ord('À') + (k mod 32));
// ïåðâûå 32 ñèìâîëà - ðóññêèå, ïîòîì àíãëèéñêèå
Inc(k);
end;
// Çàìåíÿåì ñèìâîëû òåêñòà íà ñèìâîëû èç òàáëèöû
EncryptedText := '';
for i := 1 to Length(Text) do
begin
for j := 1 to TableSize do
begin
for k := 1 to TableSize do
begin
if Text[i] = Table[j, k] then
begin
EncryptedText := EncryptedText + Table[j, k];
Break;
end;
end;
if EncryptedText <> '' then
Break;
end;
end;
Result := EncryptedText;
end;
// *** Ìàòðè÷íûé øèôð ***
// ýòî ìåòîä øèôðîâàíèÿ, êîòîðûé èñïîëüçóåò ìàòðèöó êëþ÷à äëÿ ïåðåñòàíîâêè ñèìâîëîâ â ñîîáùåíèè.
function MatrixCipher(const Text: string; Key: string): string;
var
Matrix: array [0 .. 4, 0 .. 4] of Char;
Rows, Columns, Len, KeyLen, Index, RowIndex, ColIndex: Integer;
ResultText: string;
begin
// Èíèöèàëèçèðóåì ìàòðèöó êëþ÷à
KeyLen := Length(Key);
Index := 1;
for Rows := 0 to 4 do
begin
for Columns := 0 to 4 do
begin
if Index <= KeyLen then
begin
Matrix[Rows, Columns] := Key[Index];
Inc(Index);
end
else
begin
Matrix[Rows, Columns] := Chr(65); // Äîïîëíèòåëüíîå çàïîëíåíèå ñèìâîëàìè
end;
end;
end;
// Øèôðóåì ñîîáùåíèå ñ ïîìîùüþ ìàòðèöû êëþ÷à
Len := Length(Text);
RowIndex := 0;
ColIndex := 0;
for Index := 1 to Len do
begin
// Ïðèìåíÿåì îïåðàöèþ xor äëÿ êàæäîãî ñèìâîëà â ñîîáùåíèè è ñîîòâåòñòâóþùåãî ñèìâîëà â ìàòðèöå êëþ÷à
ResultText := ResultText + Chr(Ord(Matrix[RowIndex, ColIndex])
xor Ord(Text[Index]));
Inc(ColIndex);
if ColIndex > 4 then
begin
Inc(RowIndex);
ColIndex := 0;
end;
if RowIndex > 4 then
begin
RowIndex := 0;
end;
end;
Result := ResultText;
end;
// ÊÎÍÅÖ ÌÅÒÎÄÎÂ ØÈÔÐÎÂÀÍÈß
procedure TForm2.Button1Click(Sender: TObject);
// øèôðîâàíèå è çàíåñåíè â áàçó, èñïîëüçóåì ìåòîäû èñõîäÿ èç âûáðàííîãî â êîìáîáîêñå
var
EncryptionMethod, EncryptedText: string;
begin
// Ïîëó÷àåì âûáðàííûé ìåòîä øèôðîâàíèÿ
EncryptionMethod := ComboBox1.Text;
// Çàøèôðîâûâàåì òåêñò â çàâèñèìîñòè îò âûáðàííîãî ìåòîäà
if EncryptionMethod = 'Öåçàðü' then
EncryptedText := CaesarCipher(Edit1.Text,
StrToInt(NumberBox1.Value.ToString))
// Ïðèìåð èñïîëüçîâàíèÿ ôóíêöèè CaesarCipher
else if EncryptionMethod = 'Øèôð Àòáàøà' then
EncryptedText := AtbashCipher(Edit1.Text)
// Ïðèìåð èñïîëüçîâàíèÿ ôóíêöèè AtbashCipher
else if EncryptionMethod = 'Øèôð Âèæíåðà' then
EncryptedText := VigenereCipher(Edit1.Text, Edit3.Text, True)
// Ïðèìåð èñïîëüçîâàíèÿ ôóíêöèè VigenereCipher
else if EncryptionMethod = 'Òàáëè÷íîå øèôðîâàíèå' then
EncryptedText := TableEncryption(Edit1.Text, Edit3.Text)
else if EncryptionMethod = 'Ìàòðè÷íûé øèôð' then
EncryptedText := MatrixCipher(Edit1.Text, Edit3.Text)
else
EncryptedText := ''; // Îáðàáîòêà íåêîððåêòíîãî âûáîðà ìåòîäà øèôðîâàíèÿ
// Çàïèñûâàåì èíôîðìàöèþ î øèôðîâàíèè â áàçó äàííûõ
if EncryptedText <> '' then // Åñëè çàøèôðîâàííûé òåêñò ïîëó÷åí óñïåøíî
begin
ADOQuery1.SQL.Text :=
'INSERT INTO [Text] ([IDUser], [EncryptionText], [EncryptionMethod], [DateAdded]) '
+ 'VALUES (:IDUser, :EncryptionText, :EncryptionMethod, :DateAdded)';
ADOQuery1.Parameters.ParamByName('IDUser').Value := FUserID;
ADOQuery1.Parameters.ParamByName('EncryptionText').Value := EncryptedText;
ADOQuery1.Parameters.ParamByName('EncryptionMethod').Value :=
EncryptionMethod;
ADOQuery1.Parameters.ParamByName('DateAdded').Value := Now;
ADOQuery1.ExecSQL;
// îáíîâëÿåì òàáëèöó (ýòî äóáëÿæ êîäà, îí èñïîëüçóåòñÿ ïî íàæàòèþ è îòîáðàæåíèþ ïàíåëè)
ADOQuery1 := TADOQuery.Create(nil);
ADOQuery1.Connection := ADOConnection1;
ADOQuery1.SQL.Text :=
'SELECT [IDText], [EncryptionText], [EncryptionMethod], [DateAdded] FROM [Text] WHERE [IDUser] = :UserID ORDER BY [DateAdded] ASC';
ADOQuery1.Parameters.ParamByName('UserID').Value := FUserID;
ADOQuery1.Open;
DataSource1 := TDataSource.Create(nil);
DataSource1.DataSet := ADOQuery1;
DBGrid1.DataSource := DataSource1;
DBGrid1.Columns[0].Title.Caption := 'Íîìåð â áàçå';
DBGrid1.Columns[0].Width := 80;
DBGrid1.Columns[1].Title.Caption := 'Øèôðîâàííûé òåêñò';
DBGrid1.Columns[1].Width := 215;
DBGrid1.Columns[2].Title.Caption := 'Ìåòîä øèôðîâàíèÿ';
DBGrid1.Columns[2].Width := 150;
DBGrid1.Columns[3].Title.Caption := 'Äàòà ñîçäàíèÿ';
DBGrid1.Columns[3].Width := 120;
Edit2.Text := EncryptedText;
// -
if CheckBox1.Checked then
begin
Clipboard.AsText := EncryptedText;
MessageBox(Handle,
'Çàøèôðîâàííûé òåêñò áûë óñïåøíî äîáàâëåí â áóôåð îáìåíà!', 'Óñïåõ',
MB_OK or MB_ICONWARNING)
end
else
begin
MessageBox(Handle, 'Ñîîáùåíèå çàøèôðîâàíî è äîáàâëåíî â áàçó!', 'Óñïåõ',
MB_OK or MB_ICONWARNING);
end;
EncryptionMethod := '';
end;
end;
procedure TForm2.Button2Click(Sender: TObject);
var
EncryptionMethod, EncryptedText: string;
begin
// Ïîëó÷àåì çíà÷åíèÿ èç âûáðàííîé ñòðîêè â DBGrid1
if FSelectedRowIndex > 0 then
begin
// ïåðåõîäèì ê âûáðàííîé ñòðîêå
DBGrid1.DataSource.DataSet.RecNo := FSelectedRowIndex;
// ïîëó÷àåì çíà÷åíèÿ èç ÿ÷ååê âûáðàííîé ñòðîêè
EncryptionMethod := DBGrid1.Columns[2].Field.AsString;
EncryptedText := DBGrid1.Columns[1].Field.AsString;
// Ðàñøèôðîâûâàåì ñîîáùåíèå ñ ïîìîùüþ âûáðàííîãî ìåòîäà
if EncryptionMethod = 'Öåçàðü' then
MessageBox(Handle, PChar(CaesarCipher(EncryptedText,
-StrToInt(NumberBox1.Value.ToString))),
'Ðàñøèôðîâàííîå ñîîáùåíèå', MB_OK)
else if EncryptionMethod = 'Øèôð Àòáàøà' then
MessageBox(Handle, PChar(AtbashCipher(EncryptedText)),
'Ðàñøèôðîâàííîå ñîîáùåíèå', MB_OK)
else if EncryptionMethod = 'Øèôð Âèæíåðà' then
MessageBox(Handle, PChar(VigenereCipher(EncryptedText, Edit3.Text, False)
), 'Ðàñøèôðîâàííîå ñîîáùåíèå', MB_OK)
else if EncryptionMethod = 'Òàáëè÷íîå øèôðîâàíèå' then
MessageBox(Handle, PChar(TableEncryption(EncryptedText, Edit3.Text)),
'Ðàñøèôðîâàííîå ñîîáùåíèå', MB_OK)
else if EncryptionMethod = 'Ìàòðè÷íûé øèôð' then
MessageBox(Handle, PChar(MatrixCipher(EncryptedText, Edit3.Text)),
'Ðàñøèôðîâàííîå ñîîáùåíèå', MB_OK)
else
ShowMessage('Íåèçâåñòíûé ìåòîä øèôðîâàíèÿ!');
end
else
ShowMessage('Âûáåðèòå ñòðîêó äëÿ ðàñøèôðîâêè!');
end;
end.