unit subrotine_without_parameters; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, Buttons, ExtCtrls, Grids; type TForm1 = class(TForm) Panel1: TPanel; StatusBar1: TStatusBar; GroupBox1: TGroupBox; GroupBox2: TGroupBox; GroupBox3: TGroupBox; BitBtn1: TBitBtn; StaticText1: TStaticText; UpDown1: TUpDown; Edit1: TEdit; StaticText2: TStaticText; StaticText3: TStaticText; StaticText4: TStaticText; StaticText5: TStaticText; StaticText6: TStaticText; Memo1: TMemo; Edit2: TEdit; RadioGroup1: TRadioGroup; BitBtn2: TBitBtn; Memo2: TMemo; BitBtn3: TBitBtn; Edit3: TEdit; StaticText7: TStaticText; BitBtn4: TBitBtn; Edit4: TEdit; StaticText8: TStaticText; Memo3: TMemo; BitBtn6: TBitBtn; StringGrid1: TStringGrid; BitBtn7: TBitBtn; procedure UpDown1Click(Sender: TObject; Button: TUDBtnType); procedure RadioGroup1Click(Sender: TObject); procedure BitBtn3Click(Sender: TObject); procedure BitBtn4Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure BitBtn6Click(Sender: TObject); procedure BitBtn7Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; inputtext:string; outputtext:string; cleartext:string; size:integer; clearsize:integer; versatzwert:byte; implementation {$R *.dfm} procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType); var i:byte; my_character:integer; l_versatzwert:byte; begin Edit1.Text:=chr(UpDown1.Position); Edit2.Text:=IntToStr(UpDown1.Position-65); StatusBar1.Panels[1].Text:=Edit2.Text; versatzwert:=UpDown1.Position; l_versatzwert:=StrToInt(Edit2.Text); my_character:=UpDown1.Position-65; if RadioGroup1.ItemIndex=0 then begin StringGrid1.Cells[0,0]:='Plain'; StringGrid1.Cells[1,0]:='Cipher'; StatusBar1.Panels[1].Text:=IntToStr(UpDown1.Position); for i:=1 to 26 do begin my_character:=i+l_versatzwert; if my_character>26 then begin my_character:=my_character-26; end; StringGrid1.Cells[1,i]:=chr(my_character+64); end; end else begin StringGrid1.Cells[0,0]:='Cipher'; StringGrid1.Cells[1,0]:='Plain'; StatusBar1.Panels[1].Text:=IntToStr(UpDown1.Position); for i:=26 downto 1 do begin my_character:=i-l_versatzwert; if my_character<1 then begin my_character:=my_character+26; end; StringGrid1.Cells[1,i]:=chr(my_character+64); end; end; end; procedure TForm1.RadioGroup1Click(Sender: TObject); var i:byte; my_character:integer; l_versatzwert:byte; begin l_versatzwert:=StrToInt(Edit2.Text); Memo1.Clear; Memo2.Clear; Memo3.Clear; Edit3.Text:='?'; Edit4.Text:='?'; if RadioGroup1.ItemIndex=0 then begin StringGrid1.Cells[0,0]:='Plain'; StringGrid1.Cells[1,0]:='Cipher'; BitBtn2.Caption:='Encrypt'; BitBtn3.Visible:=false; //Eingabetext muss bereinigt werden StatusBar1.Panels[1].Text:=IntToStr(UpDown1.Position); StatusBar1.Panels[3].Text:='Encrypt'; for i:=1 to 26 do begin my_character:=i+l_versatzwert; if my_character>26 then begin my_character:=my_character-26; end; StringGrid1.Cells[1,i]:=chr(my_character+64); BitBtn2.Enabled:=false; end; end else begin StringGrid1.Cells[0,0]:='Cipher'; StringGrid1.Cells[1,0]:='Plain'; StatusBar1.Panels[1].Text:=IntToStr(UpDown1.Position); BitBtn2.Caption:='Decrypt'; BitBtn3.Visible:=true; StatusBar1.Panels[3].Text:='Decrypt'; StatusBar1.Panels[7].Text:='?'; for i:=26 downto 1 do begin my_character:=i-l_versatzwert; if my_character<1 then begin my_character:=my_character+26; end; StringGrid1.Cells[1,i]:=chr(my_character+64); BitBtn2.Enabled:=false; BitBtn3.Enabled:=true; end; end; end; procedure TForm1.BitBtn3Click(Sender: TObject); var behind,changed:boolean; i:integer; begin BitBtn2.Enabled:=true; //Verschlüsseln möglich BitBtn3.Enabled:=false; //Eingabetext-Bereinigung nicht mehr möglich BitBtn4.Enabled:=true; //Fünfer Gruppen Verwaltung möglich inputtext:=Memo1.Text; cleartext:=inputtext; size:=length(inputtext); clearsize:=size; StatusBar1.Panels[5].Text:=IntToStr(size); Edit3.Text:=IntToStr(clearsize); i:=1; while behind=false do begin //begin of while changed:=false; cleartext[i]:=UpCase(cleartext[i]); if (not(cleartext[i] in['0'..'9','Ä','Ü','Ö','ä','ö','ü','A'..'Z','ß'])) then begin //begin of if delete(cleartext,i,1); changed:=true; end; //end of if3 if length(cleartext)>0 then begin //begin of if sekundaer0 case cleartext[i] of '0': begin //begin of 0 delete(cleartext,i,1); insert('NULL',inputtext,i); i:=i+3; end; //end of 0 '1': begin //begin of 1 delete(inputtext,i,1); insert('EINS',inputtext,i); i:=i+3; end; //end of 1 '2': begin delete(cleartext,i,1); insert('ZWEI',cleartext,i); i:=i+3; end; //end of 2 '3': begin //begin of 3 delete(cleartext,i,1); insert('DREI',cleartext,i); i:=i+3; end; //end of 3 '4': begin //begin of 4 delete(cleartext,i,1); insert('VIER',cleartext,i); i:=i+3; end; //end of 4 '5': begin //begin of 5 delete(cleartext,i,1); insert('FUENF',cleartext,i); i:=i+4; end; //end of 5 '6': begin //begin of 6 delete(cleartext,i,1); insert('SECHS',cleartext,i); i:=i+4; end; //end of 6 '7': begin //begin of 7 delete(cleartext,i,1); insert('SIEBEN',cleartext,i); i:=i+5; end; //end of 7 '8': begin //begin of 8 delete(cleartext,i,1); insert('ACHT',cleartext,i); i:=i+3; end; //end of 8 '9': begin //begin of 9 delete(cleartext,i,1); insert('NEUN',cleartext,i); i:=i+3; end; //end of 9 'Ö', 'ö': begin //begin of oe delete(cleartext,i,1); insert('OE',cleartext,i); i:=i+1; end; //end of oe 'Ä', 'ä': begin //begin of ae delete(cleartext,i,1); insert('AE',cleartext,i); i:=i+1; end; //end of ae 'Ü', 'ü': begin //begin of ue delete(cleartext,i,1); insert('UE',cleartext,i); i:=i+1; end; //end of ue 'ß': begin //begin of sz delete(cleartext,i,1); insert('SZ',cleartext,i); i:=i+1; end; //end of sz end; //end of case1 if changed=false then begin inc(i); end;{end of then} if i>length(cleartext) then begin behind:=true; end;{end of then} end; //end of while Memo2.Clear; Memo2.Text:=cleartext;{Text neu einschreiben} clearsize:=i-1; Edit4.Text:=IntToStr(clearsize); StatusBar1.Panels[7].Text:=IntToStr(clearsize); end;{end of while} if cleartext='' then begin with Application do begin NormalizeTopMosts; MessageBox('Die Eingabeseite darf nicht leer sein!', 'Achtung', MB_OK); RestoreTopMosts; BitBtn3.Enabled:=true; end; end;{end of then} end; procedure TForm1.BitBtn4Click(Sender: TObject); var blocktext:string; i:Integer; begin if BitBtn4.Caption = 'Fünfer-Gruppen schalten' then begin BitBtn4.Caption:='Blocktext'; blocktext:=cleartext; i:=0; repeat inc(i); if i mod 6=0 then begin insert(' ',blocktext,i); inc(size); end; until i=size; Memo2.Clear; Memo2.Text:=blocktext; end else begin BitBtn4.Caption:='Fünfer-Gruppen schalten'; Memo2.Text:=cleartext; end; end; procedure TForm1.BitBtn2Click(Sender: TObject); {Eventhandler zur Chiffrierung/Dechiffrierung mit der Grundidee: - Zeichen aus dem bereinigten Eingabetext herauslösen - aktuelles Zeichen in ASCII-Code umwandeln - Versatzwert addieren oder subtrahieren - neu berechneten ASCII-Wert umwandeln in Zeichen} var i:integer; current_character:char; current_ascii:integer; l_versatzwert:byte; begin l_versatzwert:=StrToInt(Edit2.Text); BitBtn2.Enabled:=false; BitBtn7.Enabled:=true; BitBtn6.Enabled:=true; //Wiederholen möglich outputtext:=cleartext; if RadioGroup1.ItemIndex=0 then begin for i:=1 to clearsize do begin current_character:=outputtext[i]; current_ascii:=ord(current_character); current_ascii:=current_ascii+l_versatzwert; if current_ascii>90 then begin current_ascii:=current_ascii-26; end; current_character:=chr(current_ascii); outputtext[i]:=current_character; end; end else begin for i:=1 to clearsize do begin current_character:=outputtext[i]; current_ascii:=ord(current_character); current_ascii:=current_ascii-l_versatzwert; if current_ascii<65 then begin current_ascii:=current_ascii+26; end; current_character:=chr(current_ascii); outputtext[i]:=current_character; end; end; Memo3.Text:=outputtext; end; procedure TForm1.FormCreate(Sender: TObject); var i:byte; begin versatzwert:=1; StringGrid1.Cells[0,0]:='Plain'; StringGrid1.Cells[1,0]:='Cipher'; for i:=1 to 27 do begin StringGrid1.Cells[0,i]:=chr(i+64); StringGrid1.Cells[1,i]:=chr(i+65); end; end; procedure TForm1.BitBtn6Click(Sender: TObject); begin Memo1.Clear; Memo2.Clear; Memo3.Clear; Edit3.Text:='?'; Edit4.Text:='?'; if RadioGroup1.ItemIndex=0 then begin BitBtn2.Enabled:=false; BitBtn3.Enabled:=true; end else begin BitBtn2.Enabled:=true; BitBtn3.Enabled:=false; end; end; procedure TForm1.BitBtn7Click(Sender: TObject); var blocktext:string; i:Integer; begin if BitBtn7.Caption = 'Fünfer-Gruppen schalten' then begin BitBtn7.Caption:='Blocktext'; blocktext:=outputtext; i:=0; repeat inc(i); if i mod 6=0 then begin insert(' ',blocktext,i); inc(size); end; until i=size; Memo3.Clear; Memo3.Text:=blocktext; end else begin BitBtn7.Caption:='Fünfer-Gruppen schalten'; Memo3.Text:=outputtext; end; end; end.