unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons;
type
TfrmKodierung = class(TForm)
gbxSatz: TGroupBox;
gbxCode: TGroupBox;
edtCodeBuchstabe: TEdit;
lblCodeBuchstabe: TLabel;
bbtnEnde: TBitBtn;
bbtnNeu: TBitBtn;
bbtnCode: TBitBtn;
mmoSatz: TMemo;
procedure FormCreate(Sender: TObject);
procedure mmoSatzChange(Sender: TObject);
procedure bbtnCodeClick(Sender: TObject);
private
{ Private-Deklarationen}
public
{ Public-Deklarationen}
end;
var
frmKodierung: TfrmKodierung;
implementation
{$R *.DFM}
VAR CodeRichtung : -1 .. 1;
procedure TfrmKodierung.FormCreate(Sender: TObject);
begin
gbxSatz.Caption := 'Geben Sie den zu verschlüsselnden Text ein:';
WITH mmoSatz DO
BEGIN
Text := '';
Enabled := true
END;
WITH edtCodeBuchstabe DO
BEGIN
Text := '';
Enabled := true
END;
bbtnCode.Enabled := false;
CodeRichtung := 1 // d.h. als erstes wird kodiert
end;
procedure TfrmKodierung.mmoSatzChange(Sender: TObject);
begin
IF (mmoSatz.Text <> '') AND (edtCodeBuchstabe.Text <> '')
THEN bbtnCode.Enabled := true
ELSE bbtnCode.Enabled := false;
end;
FUNCTION EinLesen(AnzeigeText : STRING) : STRING;
var zwtext:string;
zeichen:integer;
BEGIN
Zwtext:='';
For zeichen:=1 to length(anzeigetext) do
case anzeigetext[zeichen] of
'a'..'z','A'..'Z':zwtext:=zwtext+uppercase(anzeigetext[zeichen]);
'ä','Ä' :zwtext:=zwtext+'AE';
'ö','Ö' :zwtext:=zwtext+'OE';
'ü','Ü' :zwtext:=zwtext+'UE';
'ß' :zwtext:=zwtext+'SS';
'â','á','à' :zwtext:=zwtext+'A';
'ê','é','è' :zwtext:=zwtext+'E';
'û','ú','ù' :zwtext:=zwtext+'U';
'ô','ó','ò' :zwtext:=zwtext+'O';
'î','í','ì' :zwtext:=zwtext+'I';
'°' :zwtext:=zwtext+'GRAD';
'@' :zwtext:=zwtext+'AT';
'_' :zwtext:=zwtext+'UNTERSTRICH';
'1' :zwtext:=zwtext+'EINS';
'2' :zwtext:=zwtext+'ZWEI';
'3' :zwtext:=zwtext+'DREI';
'4' :zwtext:=zwtext+'VIER';
'5' :zwtext:=zwtext+'FUENF';
'6' :zwtext:=zwtext+'SECHS';
'7' :zwtext:=zwtext+'SIEBEN';
'8' :zwtext:=zwtext+'ACHT';
'9' :zwtext:=zwtext+'NEUN';
'0' :zwtext:=zwtext+'NULL';
'"' :zwtext:=zwtext+'ANFUEHRUNGSZEICHEN';
'!' :zwtext:=zwtext+'AUSRUFEZEICHEN';
'?' :zwtext:=zwtext+'FRAGEZEICHEN';
'.' :zwtext:=zwtext+'PUNKT';
',' :zwtext:=zwtext+'KOMMA';
';' :zwtext:=zwtext+'SEMIKOLON';
':' :zwtext:=zwtext+'DOPPELPUNKT';
'-' :zwtext:=zwtext+'MINUS';
'+' :zwtext:=zwtext+'PLUS';
'%' :zwtext:=zwtext+'PROZENT';
'&' :zwtext:=zwtext+'UND';
'(' :zwtext:=zwtext+'KLAMMERAUF';
')' :zwtext:=zwtext+'KLAMMERZU';
'[' :zwtext:=zwtext+'ECKIGEKLAMMERAUF';
']' :zwtext:=zwtext+'ECKIGEKLAMMERZU';
'=' :zwtext:=zwtext+'ISTGLEICH';
'²' :zwtext:=zwtext+'HOCHZWEI';
'³' :zwtext:=zwtext+'HOCHDREI';
'$' :zwtext:=zwtext+'DOLLAR';
'€' :zwtext:=zwtext+'EURO';
'*' :zwtext:=zwtext+'STERNCHEN';
'\' :zwtext:=zwtext+'BACKSLASH';
'/' :zwtext:=zwtext+'SLASH';
'#' :zwtext:=zwtext+'RAUTE';
{'10' :zwtext:=zwtext+'ZEHN';
'11' :zwtext:=zwtext+'ELF';
'12' :zwtext:=zwtext+'ZWOELF';
'13' :zwtext:=zwtext+'DREIZEHN';
'14' :zwtext:=zwtext+'VIERZEHN';
'15' :zwtext:=zwtext+'FUENFZEHN';
'16' :zwtext:=zwtext+'SECHSZEHN';
'17' :zwtext:=zwtext+'SIEBZEHN';
'18' :zwtext:=zwtext+'ACHTZEHN';
'19' :zwtext:=zwtext+'NEUNZEHN';
'20' :zwtext:=zwtext+'ZWANZIG';
'21' :zwtext:=zwtext+'EINUNDZWANZING';
'22' :zwtext:=zwtext+'ZWEIUNDZWANZIG';
'23' :zwtext:=zwtext+'DREIUNDZWANZIG';
'24' :zwtext:=zwtext+'VIERUNDZWANZIG';
'25' :zwtext:=zwtext+'FUENFUNDZWANZIG';
'26' :zwtext:=zwtext+'SECHSUNDZWANZIG';
'27' :zwtext:=zwtext+'SIEBENUNDZWANZIG';
'28' :zwtext:=zwtext+'ACHTUNDZWANZIG';
'29' :zwtext:=zwtext+'NEUNUNDZWANZIG';
'30' :zwtext:=zwtext+'DREIZIG'; }
end;
Einlesen:=zwtext;
// Diese Funktion soll dafür sorgen, dass in dem zu kodierenden
// Text nur große Buchstaben stehen, Umlaute umgeschrieben und
// Satzzeichen entfernt werden.
END; // von EinLesen
PROCEDURE Code(VAR C_Text : STRING;
C_Buchstabe : CHAR;
C_Richtung : SHORTINT);
VAR index:integer;
Verschiebung:shortint;
BEGIN
Verschiebung:=C_Richtung*(ord(C_Buchstabe)-ord('A'));
FOR index:=1 to length(C_Text) do
C_Text[Index]:=chr((ord(C_Text[Index])-ord('A')+Verschiebung+26)MOD 26+ORD('A'));
// Hier soll die (De)Kodierung stattfinden.
END;
FUNCTION BlockAusgabe(AusgabeText : STRING) : STRING;
CONST Block = 5; // <-- Anzahl der Buchstaben, die zu einem Block zusammengefasst werden
VAR index:byte;
zwtext:string;
BEGIN
for index:=1 to length(Ausgabetext) do
begin
ZwText:=Zwtext+Ausgabetext[index];
if Index MOD block = 0
then ZWText:=zwtext+' ';
end;
blockausgabe:=zwtext;
// Diese Funktion soll den auszugebenden Text in Blöcke
// der angegebnen Länge "zerhacken" und die einzelnen
// Blöcke durch Leerzeichen trennen.
END; // von BlockAusgabe
procedure TfrmKodierung.bbtnCodeClick(Sender: TObject);
VAR TextFeld : STRING;
CodeBuchstabe : CHAR;
begin
TextFeld := EinLesen(mmoSatz.Text);
CodeBuchstabe := edtCodeBuchstabe.Text[1];
Code(TextFeld, CodeBuchstabe, CodeRichtung);
mmoSatz.Text := BlockAusgabe(TextFeld);
IF CodeRichtung = 1
THEN
BEGIN
mmoSatz.Enabled := false;
edtCodeBuchstabe.Enabled := false;
bbtnCode.Caption := 'de&kodieren';
gbxSatz.Caption := 'kodierter Text:'
END
ELSE
BEGIN
mmoSatz.Enabled := true;
edtCodeBuchstabe.Enabled := true;
bbtnCode.Caption := '&kodieren';
gbxSatz.Caption := 'Geben Sie den zu verschlüsselnden Text ein:'
END;
CodeRichtung := -1 * Coderichtung;
end;
end.