46
Programmieren mit Programmieren mit Prozeduren und Delphi- Prozeduren und Delphi- Komponenten Komponenten Klaus Becker (2002)

Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

Embed Size (px)

Citation preview

Page 1: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

Programmieren mit Programmieren mit Prozeduren und Delphi-Prozeduren und Delphi-

KomponentenKomponenten

Klaus Becker(2002)

Page 2: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

2

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nSalve CaesarSalve Caesar

PYLZFOWBN, QCY BUVN CBL GYCHY AYBYCGMWBLCZN YHNTCZZYLN!

VDOYH FDHVDU!

Page 3: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

3

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nTeil 1Teil 1

Verarbeitung von Zeichenketten

Prozedurkonzept

Page 4: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

4

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nCaesar-ChiffrierungCaesar-Chiffrierung

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

D E F G H I J K L M N O P Q R S T U V W X Y Z A B C

Klartextalphabet

Geheimtextalphabet

Schlüssel: 3Klartext:

ASTERIX

Geheimtext:DVWHULA

Page 5: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

5

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nProblembeschreibungProblembeschreibung

Zielsetzung:Mit Hilfe des zu entwickelnden Programms soll der Benutzer kurze Texte mit der Caesar-Methode verschlüsseln und wieder entschlüsseln können.

Anforderungen an das System:

- Der Benutzer kann (kurze) Texte selbst eingeben.

- Der Benutzer kann den Schlüssel (0..25) einstellen.

- Das Programm bereitet den Text geeignet vor (enttfernt Leerzeichen; wandelt Umlaute um).

- Der verschlüsselte Text wird angezeigt und kann auch wieder entschlüsselt werden.

- ...

Zielsetzung:Mit Hilfe des zu entwickelnden Programms soll der Benutzer kurze Texte mit der Caesar-Methode verschlüsseln und wieder entschlüsseln können.

Anforderungen an das System:

- Der Benutzer kann (kurze) Texte selbst eingeben.

- Der Benutzer kann den Schlüssel (0..25) einstellen.

- Das Programm bereitet den Text geeignet vor (enttfernt Leerzeichen; wandelt Umlaute um).

- Der verschlüsselte Text wird angezeigt und kann auch wieder entschlüsselt werden.

- ...

Page 6: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

6

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nBenutzungsoberflächeBenutzungsoberfläche

EGeheimtext: TEdit

EQuelltext: TEdit

BEntschluesseln: TButton

BEntschluesseln: TButton

PTitel: TPanel

ESchluessel: TEdit

GBQuelltext:

TGroupBox

GBGeheimtext:

TGroupBox

GBSchluessel:

TGroupBox

GBChiffre: TGroupBox

Page 7: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

7

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nDatenmodell / DatenverarbeitungDatenmodell / Datenverarbeitung

procedure verschluesseln

erzeugt bei gegebenem Quelltext und Schlüssel den zugehörigen Geheimtext nach der Caesar-Methode (Voraussetzung: Der Quelltext besteht nur aus den Großbuchstaben A ... Z.)

procedure entschluesseln

erzeugt bei gegebenem Geheimtext und Schlüssel den zugehörigen Quelltext nach der Caesar-Methode

type tSchluessel = 0..25;

var Quelltext : string; // z. B.: 'ASTERIX' Geheimtext : string; // z. B.: 'DVWHULA' Schluessel : tSchluessel; // z. B.: 3

Page 8: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

8

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nExkurs: ZeichenExkurs: Zeichen

Zeichen werden in Delphi / Pascal mit Hilfe des Datentyps char beschrieben. Die zulässigen Zeichen werden durch den ASCII-Code festgelegt.

Code Zeichen

0 NUL...65 A66 B...90 Z...97 a98 b...122 z...

(De)Kodieroperationen:

ord: char {0; ...; 255}

ord(´A´) 65

chr: {0; ...; 255} char

chr(65) ´A´

Page 9: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

9

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nExkurs: ZeichenkettenExkurs: Zeichenketten

Zeichenketten werden in Delphi / Pascal mit Hilfe des Datentyps string beschrieben. Ein Delphi-String kann (je nach Compilereinstellung) max. 255 Zeichen enthalten.

Ein String wird in Delphi / Pascal in Apostrophe eingeschlossen (Bsp.: 'Hallo!'). Auch ein leere String '' ohne Zeichen ist möglich.

Im Programmtext darf ein String nur in einer Zeile stehen.

Zugriff auf einzelne Zeichen:

Auf einzelne Zeichen kann man über einen Index zugreifen.

Quelltext := 'Hallo!';

c := Quelltext[1]; // c 'H'

Länge einer Zeichenkette:

Die Länge einer Zeichenkette bestimmt man mit der length-Funktion.

Quelltext := 'Hallo!';

n := length(Quelltext); // n 6

Page 10: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

10

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nVerschlüsselungsalgorithmusVerschlüsselungsalgorithmus

Verschluesseln

Geheimtext := ''

FÜR i VON 1 BIS length(Quelltext)

c := Quelltext[i]

n := ord(c)

n := n + Schlüssel

n > 90 ja nein

n := n-26

c := chr(n)

Geheimtext := Geheimtext + c

Page 11: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

11

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nÜbungen – Aufgabe 1Übungen – Aufgabe 1

Ergänzen Sie zunächst das Programm zur Caesar-Chiffrierung.

Das Programm soll anschließend wie folgt verbessert werden:- Im Quelltext sollen alle Leerzeichen entfernt werden.- Im Quelltext sollen alle Kleinbuchstaben in Großbuchstaben umgewandelt werden.- Im Quelltext sollen alle Umlaute durch Vokalkombinationen ersetzt werden.Beispiel: Ich würde gerne dösen. ICHWUERDEGERNEDOESEN

Überlegen Sie sich zunächst, wie Sie die Benutzungsoberfläche ergänzen wollen. Entwickeln und implementieren Sie anschließend einen passenden Algorithmus zur Umwandlung des Quelltextes.

Caesar0 – Grundprogramm

Caesar1 – mit Textvorbereitung

Page 12: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

12

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nAufgabe 1 - LösungsvorschlagAufgabe 1 - Lösungsvorschlag

Hilfstext := '';

for i := 1 to length(Quelltext) do

begin c := Quelltext[i]; case c of 'A'..'Z': Hilfstext := Hilfstext + c; 'a'..'z': Hilfstext := Hilfstext + chr(ord(c)-32); 'ß': Hilfstext := Hilfstext + 'SS'; 'ä': Hilfstext := Hilfstext + 'AE'; 'ö': Hilfstext := Hilfstext + 'OE'; 'ü': Hilfstext := Hilfstext + 'UE'; 'Ä': Hilfstext := Hilfstext + 'AE'; 'Ö': Hilfstext := Hilfstext + 'OE'; 'Ü': Hilfstext := Hilfstext + 'UE'; end; end;

Geheimtext := Hilfstext;

Caesar1 – mit Textvorbereitung

Page 13: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

13

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nStringverarbeitungStringverarbeitung

Zielsetzung:Es soll eine alternative Methode zur Vorbereitung des Quelltextes mit Hilfe von String-Operationen (Length, Pos, Delete, Insert) vorgestellt werden. Im Vordergrund steht hierbei die Wiederholung des Parameterkonzepts.

Zielsetzung:Es soll eine alternative Methode zur Vorbereitung des Quelltextes mit Hilfe von String-Operationen (Length, Pos, Delete, Insert) vorgestellt werden. Im Vordergrund steht hierbei die Wiederholung des Parameterkonzepts.

Page 14: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

14

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nString-VerarbeitungString-Verarbeitung

function Length(S: string): integer;

Beschreibung:Length gibt die Anzahl der im angegebenen String vorhandenen Zeichen zurück.

Beispiel:Anzahl := Length('Delphi') // Anzahl 6

function Pos(Substr: string; S: string): integer;

Beschreibung:Pos sucht in dem String S nach dem Teilstring Substr. Wird der Teilstring gefunden, gibt Pos den Integer-Index des ersten Zeichens von Substr in S zurück. Die Groß/Kleinschreibung wird von Pos nicht berücksichtigt. Ist Substr nicht vorhanden, wird der Wert 0 zurückgegeben.

Beispiele:Position := Pos('hi', 'Delphibuch') // Position 5Position := Pos('Hi', 'Delphibuch') // Position 5Position := Pos('ihi', 'Delphibuch') // Position 0

Page 15: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

15

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nString-VerarbeitungString-Verarbeitung

procedure Delete(var S: string; Index, Count: integer)

Beschreibung:Delete entfernt, beginnend mit S[Index], Count Zeichen aus dem String S. Ist der Wert von Index größer als die Länge von S, werden keine Zeichen gelöscht. Werden mit Count mehr Zeichen angegeben, als beginnend bei S[Index] im String vorhanden sind, wird der Rest des Strings gelöscht.

Beispiel:{Wort: 'Delphibuch'}Delete(Wort, 4, 3);{Wort: 'Delbuch'}

procedure Insert(Source: string; var S: string; i: integer)

Beschreibung:Insert fügt Source in S an der Position S[i] ein. Beispiel: {Wort: 'Delbuch'}Insert('phi', Wort, 4);{Wort: 'Delphibuch'}

Page 16: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

16

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nParameterParameter

procedure Delete(var S: string; Index, Count: integer);

Beispiel:

{Z: ['Baumschule']}

Delete(Z, 5, 6)

{Z: ['Baum']}

Delete

var S: string

Index: integer

Count: integer

Z

5

6

Import/Export-Situation

Import-Situation

Import-Situation

Page 17: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

17

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nParameterübergabemechanismenParameterübergabemechanismen

{Z: ['Baumschule']}

Delete

[ ]:S

[5]:Index

[6]:Count

5

6

Referenzbildung

Wertübergabe

Wertübergabe

Delete(Z, 5, 6)

{Z: ['Baum']}

Z: ['Baumschule']AdresseWert

Wert

Delete

[ ]:S

[ ]:Index

[ ]:Count

5

6

Z: ['Baum']

Page 18: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

18

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nParameterübergabemechanismenParameterübergabemechanismen

Delete

[ ]:S

[5]:Index

[6]:Count

5

6

Referenzbildung

Wertübergabe

Wertübergabe

Z: ['Baumschule']AdresseWert

Wert

call-by-value: Der Wert des aktuellen Parameters wird an den Werteparameter übergeben.

Referenzparameter

Werteparameter

call-by-reference: Es wird eine Referenz zwischen dem aktuellen Parameter und dem Referenzparameter erzeugt.

Delete(Z, 5, 6)Prozeduraufruf:

aktuelle Parameter

Übergabesituation:

Übergabemechanismen:

Page 19: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

19

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nDatenaustauschsituationenDatenaustauschsituationen

P

xt

Daten-Import: Der aktuelle Parameter kann ein Term sein. Der Wert des Terms wird durch call-by-value an den Werteparameter übergeben.

P

var xy

Daten-Export: Der aktuelle Parameter muss eine Variable sein. Der Referenzparameter wird durch call-by-reference an den aktuellen Parameter gebunden.

P

var xy

Daten-Transport: Der aktuelle Parameter muss eine Variable sein. Der Referenzparameter wird durch call-by-reference an den aktuellen Parameter gebunden.

Page 20: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

20

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nÜbungen – Aufgabe 2Übungen – Aufgabe 2

Erstellen Sie eine Prozedur, mit der man innerhalb einer Zeichenkette ein Zeichen durch eine neue Zeichenkette ersetzen kann.

Bsp.: Ersetze `ä` durch `AE` innerhalb von `Juha Vätäänen‘

Spezifizieren Sie zunächst den Datenaustausch / die Parameter der Prozedur.

Erstellen Sie dann einen Algorithmus mit Hilfe der Stringverarbeitungs-operationen (Delete, Insert, ...). Gehen Sie davon aus, dass das zu ersetzende Zeichen nicht in der neuen Zeichenkette vorkommt. Welche Schwierigkeiten könnten Sich andernfalls ergeben?

Page 21: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

21

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nÜbungen – Aufgabe 3Übungen – Aufgabe 3

Die Prozeduren zum Ver- und Entschlüsseln von Texten sollen so modifiziert werden, dass der Datenaustausch transparent wird.

Spezifizieren Sie zunächst den Datenaustausch (Black-box-Diagramm).

Ändern Sie anschließend die Prozedurdeklarationen und die Prozeduraufrufe geeignet ab.

Page 22: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

22

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nAufgabe 2 - LösungsvorschlagAufgabe 2 - Lösungsvorschlag

Ersetze

c: char

neu: string

var Text: string

'ß'

'SS'

Hilf

Datenaustausch:

Verhaltensbeschreibung:

Die Prozedur „Ersetze“ ersetzt innerhalb der Zeichenkette „Text“ das Zeichen „c“ durch die neue Zeichenkette „neu“.

Beispiel:{hilf: ['Juha Vätäänen']}Ersetze('ä', 'AE', hilf);{hilf: ['Juha VAEtAEAEnen']}

procedure Ersetze(c: char; neu: string; var Text: string);

Deklaration:

Page 23: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

23

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nAufgabe 2 - LösungsvorschlagAufgabe 2 - Lösungsvorschlag

Implementierung 1:procedure Ersetze(c: char; neu: string; var Text: string);

var stelle: integer;

begin

stelle := pos(c, Text);

while stelle > 0 do

begin

Delete(Text, stelle, length(c));

Insert(neu, Text, stelle);

stelle := pos(c, Text);

end;

end;

Bemerkungen:Der Algorithmus ist ausbaufähig: c: char s: string.Er ist allerdings nur korrekt, falls c nicht in neu vorkommt.

Page 24: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

24

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nAufgabe 2 - LösungsvorschlagAufgabe 2 - Lösungsvorschlag

Implementierung 2:procedure Ersetze(c: char; neu: string; var Text: string);

var i: integer;

Hilfstext: string;

begin

Hilfstext := '';

for i := 1 to length(Text) do

if Text[i] = c then

Hilfstext := Hilfstext + neu

else

Hilfstext := Hilfstext + Text[i];

Text := Hilfstext;

end;Bemerkungen:Der Algorithmus ist effizienter als der in Implementierung 1.

Page 25: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

25

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nAufgabe 3 - LösungsvorschlagAufgabe 3 - Lösungsvorschlag

Datenaustausch:

verschluesseln

QText: string

S: integer

var GText: string

Quelltext

Schluessel

Geheimtext

entschluesseln

var QText: string

S: integer

GText: string

Quelltext

Schluessel

Geheimtext

Caesar1 – mit Parameterübergabe

Page 26: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

26

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nSchnittstellenSchnittstellen

Für die Benutzung einer Prozedur muss man nur die Signatur und das Verhalten der Prozedur kennen.

Diese legen die sog. Schnittstelle der Prozedur fest.

Ersetze

c: char

neu: string

Text: string

Signatur:

procedure Ersetze ( char; string; string)

Verhaltensbeschreibung:

Die Prozedur „Ersetze“ ersetzt innerhalb der Zeichenkette „Text“ das Zeichen „c“ durch die neue Zeichenkette „neu“.

Page 27: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

27

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nTeil 2Teil 2

Komponenten

Page 28: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

28

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nLaufzeitfehlerLaufzeitfehler

Problem:

Bei der Eingabe des Schlüssels muss der Benutzer darauf achten, eine ganze Zahl einzutippen. Ansonsten kommt es bei der Ereignisbearbeitung zu einem Laufzeitfehler.

Ziel:

Vermeidung solcher Laufzeitfehler

Problem:

Bei der Eingabe des Schlüssels muss der Benutzer darauf achten, eine ganze Zahl einzutippen. Ansonsten kommt es bei der Ereignisbearbeitung zu einem Laufzeitfehler.

Ziel:

Vermeidung solcher Laufzeitfehler

Page 29: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

29

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nTSpinEdit-KomponenteTSpinEdit-Komponente

SpEdSchluessel: TSpinEditAttribute

MinValue : 0

MaxValue : 25

Value : 3

...Ereignisse

OnChange: SpEdSchluesselChange

...Methoden

...

procedure TForm1.SpEdSchluesselChange(Sender: TObject);beginSchluessel := SpEdSchluessel.Value;end;

Caesar3 – Grundprogramm mit ...

Page 30: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

30

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nAlternative: try-except-AnweisungAlternative: try-except-Anweisung

Syntax:

try [Anweisung] except [Fehleranweisung] end

Semantik:

Delphi versucht zunächst, die Anweisung durchzuführen. Führt dies zu einem Fehler, so bricht Delphi diese Ausführung ab und führt stattdessen die Fehleranweisung durch.

Voraussetzung:

<Tools> <Debugger-Optionen> <Sprach-Exceptions> Bei Delphi-Exceptions stoppen []

Beispiel:

try Schluessel := StrToInt(ESchluessel.Text);except Schluessel := 0;end; Caesar2 – Grundprogramm

mit ...

Page 31: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

31

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nTMemo-KomponenteTMemo-Komponente

Problem:

Bisher bestand die Eingabe nur aus einer Zeichenkettenzeile. Zur Darstellung und Bearbeitung längerer Texte wäre es zweckmäßig, ein mehrzeiliges Eingabefeld zu benutzen.

Problem:

Bisher bestand die Eingabe nur aus einer Zeichenkettenzeile. Zur Darstellung und Bearbeitung längerer Texte wäre es zweckmäßig, ein mehrzeiliges Eingabefeld zu benutzen.

Page 32: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

32

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nKlasse TMemoKlasse TMemo

TMemoAttribute

property Lines: TStrings;

property ScrollBars: TScrollStyle;

...Ereignisse

...Methoden

...

type TScrollStyle = (ssNone, ssHorizontal, ssVertical, ssBoth)

Page 33: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

33

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nKlasse TStringsKlasse TStrings

TStringsAttribute

property Strings[Index: Integer]: string;

property Count: Integer;

...Ereignisse

...Methoden

procedure Add(S: string);

procedure Clear;

procedure Delete(Index: Integer);

procedure Insert(Index: Integer; S: string);

procedure LoadFromFile(FileName: string);

procedure SaveToFile(FileName: string);

...

Page 34: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

34

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nStringlistenStringlisten

'Hallo Inger'

'Wie geht es Dir?'

0

1

'Ich hoffe gut.'

'Viele Grüße von ...'

2

3

var L: TStrings;

i: integer;

...

L.Strings[0] := L.Strings[0] + '!';

for i := 0 to L.Count-1 do

L.Strings[i] := 'Hallo';

Page 35: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

35

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nVerarbeitung von StringlistenVerarbeitung von Stringlisten

'Hallo Inger'

'Wie geht es Dir?'

0

1

'Ich hoffe gut.'

'Viele Grüße von ...'

2

3

procedure Add(S: string);

- fügt die Zeichenkette S am Ende der Liste an

procedure Clear;

- löscht die gesamte Liste

procedure Delete(Index: Integer);

- löscht nur den Eintrag mit dem übegebenen Index

procedure Insert(Index: Integer; S: string);

- fügt die Zeichenkette S an die durch Index beschriebenen Zeile in der Liste ein

procedure LoadFromFile(FileName: string);

procedure SaveToFile(FileName: string);

- lädt eine Liste aus einer Datei / speichert eine Liste in eine Datei

Page 36: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

36

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nVerarbeitung von Memo-KomponentenVerarbeitung von Memo-Komponenten

MQuelltext, MGeheimText: TMemo;

...

begin

MGeheimtext.Lines.Clear;

for i := 0 to MQuelltext.Lines.Count-1 do

begin

Quelltext := MQuelltext.Lines.Strings[i];

verschluesseln(Quelltext, Schluessel, Geheimtext);

MGeheimtext.Lines.Add(Geheimtext);

end;

end;

Caesar4 – Texteingabe über Memofeld

Page 37: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

37

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nLaden und SpeichernLaden und Speichern

Problem:

Quell- und Geheimtext sollen aus einer Datei geladen bzw. in einer Datei gespeichert werden können.

Problem:

Quell- und Geheimtext sollen aus einer Datei geladen bzw. in einer Datei gespeichert werden können.

Page 38: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

38

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nKomponente: TOpenDialogKomponente: TOpenDialog

TOpenDialogAttribute

property FileName: TFileName;

...Ereignisse

...Methoden

function Execute: Boolean;...

Execute öffnet das Dialogfeld zur Auswahl von Dateien und gibt True zurück, wenn der Benutzer eine Datei ausgewählt und auf OK geklickt hat. Klickt der Benutzer auf Abbrechen, liefert Execute False zurück.

Page 39: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

39

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nMemo-Stringliste ladenMemo-Stringliste laden

TOpenDialogAttribute

property FileName: TFileName;

...Ereignisse

...Methoden

function Execute: Boolean;...

procedure TForm1.BLadenQClick(Sender: TObject);

beginif OpenDialog1.Execute then MQuelltext.Lines.LoadFromFile(OpenDialog1.Filename);end;

Caesar4 – mit Laden und Speichern

Page 40: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

40

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nÜbungen – Aufgabe 4 Übungen – Aufgabe 4

Caesar4 – mit Laden und Speichern

Bauen Sie das Grundprogramm zur Caesar-Verschlüsselung schrittweise aus:

- Schlüsseleingabe über eine SpinEdit-Komponente

- Textein- und Ausgabe über Memofelder

- Vorbereitung des eingegebenen Textes (Sonderzeichen; Umlaute)

- Laden und Speichern von Texten.

Page 41: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

41

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nÜbungen – Aufgabe 5Übungen – Aufgabe 5

Um einen mit der Caesar-Methode kodierten Text zu entschlüsseln, kann man auch wie folgt vorgehen: Man ermittelt, welcher Buchstabe im Geheimtext am häufigsten vorkommt. Dieser Buchstabe ist mit großer Wahrscheinlichkeit die Kodierung von ‚E‘.

Erweitern Sie das Caesar-Programm um die Möglichkeit, im Geheimtext die Buchstabenhäufigkeiten zu bestimmen.Caesar5 – mit Statistik

Page 42: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

42

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nTeil 3Teil 3

Zusammenfassung:

Arbeiten mit Komponenten

Page 43: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

43

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nDelphi-HilfeDelphi-Hilfe

TLabel

Hierarchie Eigenschaften MethodenEreignisse

TLabel ist ein nicht fensterorientiertes Steuerelement, mit dem Text in einem Formular angezeigt werden kann. Sie können diesen Text als Beschriftung für ein anderes Steuerelement verwenden und den Fokus an dieses Steuerelement übergeben, sobald der Benutzer ein im Text enthaltenes Tastenkürzel eingibt.

Unit stdctrls

Beschreibung

Da die Komponente TLabel kein Nachkomme von TWinControl ist, besitzt sie kein eigenes Fenster und kann keine direkten Eingaben von der Tastatur empfangen. Wenn Sie in einem Formular ein Objekt benötigen, das nicht nur aufgrund der Eingabe eines Tastenkürzels den Fokus an ein anderes Steuerelement übergibt, sondern selbst auf Tastatureingaben antworten kann, müssen Sie TStaticText verwenden.

Soll der Benutzer in einem Textanzeigeobjekt einen Bildlauf durchführen und Änderungen vornehmen können, verwenden Sie eine TEdit-Komponente.

Page 44: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

44

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nStruktur von KomponentenStruktur von Komponenten

TLabel

Attribute

...

Ereignisse

...

Methoden

...

erbt von ...

Page 45: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

45

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nKomponentenbeschreibungKomponentenbeschreibung

TLabelAttribute

property Caption: TCaption // type TCaption = string;

...

Ereignisse

property OnClick: TNotifyEvent

...

Methoden

procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer)

...

Page 46: Programmieren mit Prozeduren und Delphi-Komponenten Klaus Becker (2002)

46

KB

Pro

gra

mm

iere

n m

it P

roze

dure

n u

nd K

om

ponente

nSchnittstellenbeschreibungSchnittstellenbeschreibung

TControl.SetBounds

Die Methode SetBounds setzt die Eigenschaften Left, Top, Width und Height gleichzeitig.

procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); virtual;

Beschreibung

Mit der Methode SetBounds können Sie alle Eigenschaften des umgebenden Rechtecks der Komponente gleichzeitig ändern. Sie können dazu auch die Eigenschaften Left, Top, Width und Height einzeln setzen. Jedoch ist durch SetBounds sichergestellt, daß das Steuerelement nicht nach jeder Wertzuweisung neu gezeichnet werden muß.

Die Werte für die Eigenschaften Left, Top, Width und Height werden in den Parametern ALeft, ATop, AWidth und AHeight übergeben.

Durch den Aufruf von SetBounds erhalten die Eigenschaften Left, Top, Width und Height nicht notwendigerweise die angegebenen Werte. Die neuen Werte können vor der Zuweisung durch AutoSize oder Constraints eingeschränkt und durch eine Ereignisbehandlungsroutine für OnCanResize (oder OnConstrainedResize) angepaßt werden. Nachdem die Eigenschaften Left, Top, Width und Height des Steuerelements geändert wurden, generiert SetBounds ein OnResize-Ereignis.