.


:




:

































 

 

 

 


Vizhener.

.

(Chiffre de Vigenère) .

. . (. Giovan Battista Bellaso) La cifra del. Sig. Giovan Battista Bellas 1553 , XIX , . , .

; +3, A D, B E . . , tabula recta () . 26 , . , 26 . . , . , , :

ATTACKATDAWN

, , (LEMON) , :

LEMONLEMONLE

A L, . L L A . ; X E T. .

: ATTACKATDAWN: LEMONLEMONLE : LXFOPVEFRNHR

: , ; . , , . .

A-Z 0-25, :

:

 

, , tabula recta, .

 

Vizhener.

 

. .TXT, , ( ). , Ctrl+H.

 

 

:

 

:

 

( ):

 

:

 

( ):

 

:

 

 

 

:

program Vizhener;

 

uses

Forms,

TablVin in 'TablVin.pas' {Form1};

 

{$R *.res}

 

begin

Application.Initialize;

Application.Title:= '';

Application.CreateForm(TForm1, Form1);

Application.Run;

end.

 

unit TablVin;

 

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Grids, ComCtrls, ExtCtrls, StdCtrls, Buttons, Menus;

 

type

TForm1 = class(TForm)

PC1: TPageControl;

TabSheet1: TTabSheet;

TabSheet2: TTabSheet;

SG1: TStringGrid;

Panel1: TPanel;

SB1: TSpeedButton;

SB2: TSpeedButton;

SG2: TStringGrid;

PopupMenu1: TPopupMenu;

N1: TMenuItem;

Edit1: TEdit;

Label1: TLabel;

REd1: TMemo;

REd2: TMemo;

SB3: TSpeedButton;

SB4: TSpeedButton;

SB5: TSpeedButton;

SB6: TSpeedButton;

SBar1: TStatusBar;

OD1: TOpenDialog;

SD1: TSaveDialog;

SB7: TSpeedButton;

MainMenu1: TMainMenu;

N2: TMenuItem;

N3: TMenuItem;

Timer1: TTimer;

SpeedButton1: TSpeedButton;

SpeedButton2: TSpeedButton;

procedure FormCreate(Sender: TObject);

procedure N1Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

procedure REd1KeyPress(Sender: TObject; var Key: Char);

procedure SG2KeyPress(Sender: TObject; var Key: Char);

procedure SB1Click(Sender: TObject);

procedure SB2Click(Sender: TObject);

procedure REd2KeyPress(Sender: TObject; var Key: Char);

procedure SB7Click(Sender: TObject);

procedure SB3Click(Sender: TObject);

procedure SB5Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure SB4Click(Sender: TObject);

procedure SB6Click(Sender: TObject);

procedure LokBut(Sender: TObject);

procedure SpeedButton1Click(Sender: TObject);

procedure SpeedButton2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

Const

DopChr = ['a'..'z', '0'..'9'];

 

var Rez:TStrings; Old1, Old2:String;

Cont:Set of Char; //

Form1: TForm1;

 

Function Det0(Tb:TStringGrid):Boolean;

Function Invert(S:String; N:LongInt):String;

Function KeyR(Tb:TStringGrid; Zn:Char; N:Integer=0):Integer;

Function KeyS(Tb:TStringGrid; Zn:Char; N:Integer=0):Integer;

Function Znak(Tb:TStringGrid; C, R:LongInt):Char;

 

implementation

 

{$R *.dfm}

 

procedure TForm1.FormCreate(Sender: TObject);

Var ColL:LongInt; Lst:TStrings;

begin

Cont:= [];

ColL:= 0; //

Lst:=TStringList.Create;

Try

Lst.Clear;

IF FileExists(ExtractFilePath(ParamStr(0))+'Grid.cfg') Then

Lst.LoadFromFile(ExtractFilePath(ParamStr(0))+'Grid.cfg');

ColL:= Lst.Count;

Finally

SG2.RowCount:= ColL;

Lst.Free;

End;

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

SG1.Visible:=False;

PC1.ActivePage:=TabSheet2;

IF FileExists(ExtractFilePath(ParamStr(0))+'Grid.cfg') Then

SG2.Cols[0].LoadFromFile(ExtractFilePath(ParamStr(0))+'Grid.cfg');

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Sg1.ColCount:= ColL;

Sg1.RowCount:= Sg1.ColCount;

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

N1.Click;

 

IF(REd1.Lines.Count>0)OR(REd2.Lines.Count>0)Then SB7.Enabled:=True ELSE

SB7.Enabled:=False;

end;

 

Function Det0(Tb:TStringGrid):Boolean;

VAR R:LongInt; //

begin

Det0:=True;

For R:=0 To Tb.RowCount-1 Do

IF Tb.Cells[0, R]='' Then

begin

Det0:=True;

ShowMessage(' Ѩ!'); Break;

end ELSE Det0:=False;

end;

 

procedure TForm1.N1Click(Sender: TObject);

Var R,I:LongInt; Ms, Sd:String;

begin

IF Det0(SG2) Then Exit;

//===============================================

Cont:= [];

For I:=0 To Sg2.RowCount - 1 Do

begin

Cont:= Cont + [ Znak(Sg2, 0, I) ];

end;

//===============================================

PC1.Enabled:=False;

Ms:='';

For I:=0 To Sg2.RowCount-1 Do

MS:=MS+SG2.Cells[0, I];

 

For R:=0 To SG1.RowCount-1 Do

begin

SG1.Rows[R].Clear;

 

Sd:=Invert(MS, R);

For I:=1 to Length(Sd) Do

SG1.Rows[R].Add(Sd[I]);

 

end;

 

PC1.Enabled:=True;

end;

 

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

IF Det0(Sg2) = False Then

SG2.Cols[0].SaveToFile(ExtractFilePath(ParamStr(0))+'Grid.cfg');

end;

 

Function Invert(S:String; N:LongInt):String;

Var S1,S2, Sum:String;

begin

 

IF(S='')OR(N>Length(S))Then Exit;

///////////////////////////

Try

IF N>0 Then

begin

 

S1:=''; S2:='';

S1:=Copy(S, 1, N);

S2:=Copy(S, N+1, Length(S)-N);

Sum:=S2+S1;

Invert:=Sum;

 

end ELSE

IF N<=0 Then

Begin

 

Invert:=S;

 

End;

Except

ShowMessage(' !'); Exit;

End;

end;

 

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

CASE Key OF

''..'',#8,#9:;

''..'', 'a'..'z': Key:=Chr(Ord(Key)-32);

'','': Key:='';

// ELSE Key:=#0;

End;

IF Not (Key in Cont) Then Key:=#0;

end;

 

procedure TForm1.REd1KeyPress(Sender: TObject; var Key: Char);

begin

CASE Key OF

''..'',#8,#9,#13,#10,' ':;

''..'', 'a'..'z': Key:=Chr(Ord(Key)-32);

'','': Key:='';

'0'..'9':;

End;

end;

 

procedure TForm1.REd2KeyPress(Sender: TObject; var Key: Char);

begin

CASE Key OF

''..'',#8,#9,#13,#10,' ':;

''..'', 'a'..'z': Key:=Chr(Ord(Key)-32);

'','': Key:='';

'0'..'9':;

// ELSE Key:=#0;

End;

end;

 

procedure TForm1.SG2KeyPress(Sender: TObject; var Key: Char);

begin

CASE Key OF

''..'',#8,#9,#13,#10,' ':;

''..'', 'a'..'z': Key:=Chr(Ord(Key)-32);

'','': Key:='';

'0'..'9':;

// ELSE Key:=#0;

End;

end;

 

Function KeyR(Tb:TStringGrid; Zn:Char; N:Integer=0):Integer;

Var R:LongInt; // :

begin // " 1- "

Result:=0;

For R:=0 To Tb.RowCount-1 Do

begin

Application.ProcessMessages();

IF Tb.Cells[N, R]=Zn Then Begin Result:=R; Break; End;

end;

end;

 

Function KeyS(Tb:TStringGrid; Zn:Char; N:Integer=0):Integer;

Var C:LongInt; // :

begin //

Result:=0;

For C:=0 To Tb.ColCount-1 Do

begin

Application.ProcessMessages();

IF Tb.Cells[C, N]=Zn Then Begin Result:=C; Break; End;

end;

end;

 

Function Znak(Tb:TStringGrid; C, R:LongInt):Char;

begin //

Result:=Tb.Cells[C, R][1];

end;

 

procedure TForm1.SB1Click(Sender: TObject);

Var I,J,K:LongInt; Key,Txt, Oyt:String; Ch:Char; A,B:Longint;

begin //

IF Edit1.Text='' Then Exit;

 

Timer1.Enabled:=False;

SB1.Enabled:=False;

SB2.Enabled:=False;

Edit1.Enabled:=False;

REd2.Enabled:=False;

REd1.Enabled:=False;

 

Key:=Edit1.Text;

J:=1;

 

REd2.Lines.Clear; //

FOR K:=0 To REd1.Lines.Count-1 Do

Begin Oyt:='';

Txt:=REd1.Lines.Strings[ K ]; //

 

For I:=1 To Length(Txt{REd1.Lines.Text})Do

begin

Application.ProcessMessages(); //

///////////////////////////////

IF {REd1.Lines.Text[I]}Txt[I] in Cont{[''..'','']} Then

Begin

Ch:=Key[J];

A:=KeyR(SG1, Ch, 0); //

Ch:=Txt[I]; //REd1.text[I];

B:=KeyS(SG1, Ch, 0); //

//REd2.Text:=REd2.Text+Znak(SG1, B, A);

Oyt:=Oyt+Znak(SG1, B, A);

 

IF J<=Length(Key)-1 Then J:=J+1 ELSE J:=1; //

 

End ELSE

Begin //

Ch:=Txt[ I ];

//REd2.Text:=REd2.Text+Ch;

Oyt:=Oyt+Ch;

End;

///////////////////////////////

end;

REd2.Lines.Add(Oyt);

End;

 

SB1.Enabled:=True;

SB2.Enabled:=True;

Edit1.Enabled:=True;

Timer1.Enabled:=True;

REd2.Enabled:=True;

REd1.Enabled:=True;

end;

 

procedure TForm1.SB2Click(Sender: TObject);

Var I,J,K:LongInt; Key,Txt, Oyt:String; Ch:Char; A,B:Longint;

begin //

IF Edit1.Text='' Then Exit;

Timer1.Enabled:=False;

SB1.Enabled:=False;

Edit1.Enabled:=False;

REd2.Enabled:=False;

REd1.Enabled:=False;

 

REd1.Clear; //

Key:=Edit1.Text;

J:=1;

 

For K:=0 To REd2.Lines.Count-1 Do

Begin Oyt:='';

Txt:=REd2.Lines.Strings[K];

Application.ProcessMessages(); //

 

For I:=1 To Length(Txt) DO

Begin

Application.ProcessMessages();

//////////////////////////////

IF Txt[I] IN Cont{[''..'','']} Then

Begin

Ch:=Key[J];

A:=KeyR(SG1, Ch, 0); //

Ch:=Txt[I]; //REd2.text[I];

B:=KeyS(SG1, Ch, A); // " Main "

//REd1.Text:=REd1.Text+Znak(SG1, B, 0);

Oyt:=Oyt+Znak(SG1, B, 0);

 

IF J<=Length(Key)-1 Then J:=J+1 ELSE J:=1; //

 

End ELSE

Begin

Ch:=Txt[ I ];

//REd1.Text:=REd1.Text+Ch;

Oyt:=Oyt+Ch;

End;

//////////////////////////////

End;

REd1.Lines.Add(Oyt);

End;

 

SB1.Enabled:=True;

SB2.Enabled:=True;

Edit1.Enabled:=True;

Timer1.Enabled:=True;

REd2.Enabled:=True;

REd1.Enabled:=True;

end;

 

procedure TForm1.SB7Click(Sender: TObject);

begin //

IF REd1.Lines.Count>0 Then REd1.Clear;

IF REd2.Lines.Count>0 Then REd2.Clear;

SB7.Enabled:=False; SB1.Enabled:=False;

SB2.Enabled:=False; SB4.Enabled:=False;

SB6.Enabled:=False;

SBar1.Panels[0].Text:='';

SBar1.Panels[1].Text:='';

end;

 

procedure TForm1.SB3Click(Sender: TObject);

begin

OD1.Title:=' ...';

IF OD1.Execute Then

Begin

SBar1.Panels[0].Text:=ExtractFileName(OD1.FileName);

Old1:=OD1.FileName;

 

Application.ProcessMessages(); //

Try

SD1.FileName:=Old1;

REd1.Lines.LoadFromFile(Old1);

Except

BEEP; ShowMessage(' : '+Old1);

SBar1.Panels[0].Text:=''; SD1.FileName:='';

End;

OD1.FileName:='';

End;

end;

 

procedure TForm1.SB5Click(Sender: TObject);

begin

OD1.Title:=' ...';

IF OD1.Execute Then

Begin

SBar1.Panels[1].Text:=ExtractFileName(OD1.FileName);

Old2:=OD1.FileName;

 

Application.ProcessMessages(); //

Try

REd2.Lines.LoadFromFile(Old2);

Except

BEEP; ShowMessage(' : '+Old2);

SBar1.Panels[1].Text:='';

End;

OD1.FileName:='';

End;

end;

 

procedure TForm1.N3Click(Sender: TObject);

begin

SG1.Visible:=Not SG1.Visible;

end;

 

procedure TForm1.SB4Click(Sender: TObject);

Label 0;

begin

SD1.Title:=' ...';

 

IF SBar1.Panels[0].Text='' Then

Begin

 

0: IF SD1.Execute Then

begin

Old1:=SD1.FileName;

Application.ProcessMessages();

REd1.Lines.SaveToFile(Old1);

SBar1.Panels[0].Text:=ExtractFileName(Old1);

end;

 

End ELSE

IF MessageBox(Handle, PChar(' '+

#13+'"'+Old1+'"'+

#13' " ".'), '',

MB_YESNO+MB_ICONINFORMATION)=MrYes Then

REd1.Lines.SaveToFile(Old1) ELSE GoTo 0;

//SBar1.Panels[0].Text

SD1.FileName:='';

end;

 

procedure TForm1.SB6Click(Sender: TObject);

Label 1;

begin

SD1.Title:=' ...';

 

IF SBar1.Panels[1].Text='' Then

Begin

 

1: IF SD1.Execute Then

begin

Old2:=SD1.FileName;

Application.ProcessMessages();

REd2.Lines.SaveToFile(Old2);

SBar1.Panels[1].Text:=ExtractFileName(Old2);

end;

 

End ELSE

IF MessageBox(Handle, PChar(' '+

#13+'"'+Old2+'"'+

#13' " ".'), '',

MB_YESNO+MB_ICONINFORMATION)=MrYes Then

REd2.Lines.SaveToFile(Old2) ELSE GoTo 1;

//SBar1.Panels[0].Text

SD1.FileName:='';

end;

 

procedure TForm1.LokBut(Sender: TObject);

begin //

IF REd1.Lines.Count>0 Then

begin

SB1.Enabled:=True;

SB4.Enabled:=True;

end ELSE

IF REd1.Lines.Count<=0 Then

begin

SB1.Enabled:=False;

SB4.Enabled:=False;

end;

 

IF REd2.Lines.Count>0 Then

begin

SB2.Enabled:=True;

SB6.Enabled:=True;

end ELSE

IF REd2.Lines.Count<=0 Then

begin

SB2.Enabled:=False;

SB6.Enabled:=False;

end;

 

IF(REd1.Lines.Count>0)OR(REd2.Lines.Count>0)Then SB7.Enabled:=True ELSE

SB7.Enabled:=False;

 

TabSheet1.Caption:=Format(' - [R=%d, C=%d]',

[SG1.RowCount, SG1.ColCount])

end;

 

// " STRINGGRID "

procedure DelCol(SG: TStringGrid);

Var I, J:LongInt;

begin //

with SG do

begin

J:= ColCount - 1;

Cols[ J ].Clear;

for I:=J to ColCount - 2 do

Cols[ I ].Assign(Cols[ I+1 ]);

ColCount:= ColCount - 1;

end;

end;

 

procedure DelRow(SG: TStringGrid);

Var I, J:LongInt;

begin //

with SG do

begin

J:= RowCount - 1; //

Rows[ J ].Clear;

for I:=J to RowCount - 2 do

Rows[I].Assign(Rows[ I+1 ]);

RowCount:= RowCount - 1;

end;

end;

 

procedure InsRow(SG: TStringGrid);

begin //

With SG do

RowCount:= RowCount + 1;

end;

 

procedure InsCol(StrGrid: TStringGrid);

begin //

StrGrid.ColCount:= StrGrid.ColCount + 1;

end;

 

 

procedure TForm1.SpeedButton1Click(Sender: TObject);

begin //

IF SG2.RowCount<256 Then

begin

InsRow(Sg2);

InsRow(Sg1);

InsCol(SG1);

end ELSE Beep;

end;

 

procedure TForm1.SpeedButton2Click(Sender: TObject);

begin //

IF Sg2.RowCount>33 Then

Begin

DelRow(Sg2);

DelRow(Sg1);

DelCol(SG1);

End ELSE Beep;

end;

 

end.



<== | ==>
58080. . |
:


: 2017-02-25; !; : 424 |


:

:

, ,
==> ...

1542 - | 1525 -


© 2015-2024 lektsii.org - -

: 0.211 .