Transcript Von Pascal zu Delphi - Informatik Bildungsserver Rheinland
Programmieren mit Delphi Eine Einführung in Grundkonzepte
Gregor Noll 2008
G.Noll 2008
Delphi für die Schule ?
Delphi setzt die Tradition von Pascal fort und erweitert sie um moderne Konzepte Objektorientierung Klassen Objekte Methoden Ereignisse visuell unterstützte Programmierung Komponentenbibliothek VCL Zusammenspiel mit UML-Werkzeugen kontextsensitives Hilfesystem - Debugger Alternativen Java (visuell unterstützt durch einen JavaEditor) BlueJ ( Objekte von Anfang an )
2
G.Noll 2008
Versionen
1995 - 2005 Delphi 1 - Delphi 8, Delphi 2005 2006 Turbo Delphi (BDS 2006 - Delphi 10) hervorragende Entwicklungsumgebung Videos zu Turbo Delphi und OOP unter http://blogs.codegear.com/nickhodges/articles/26687.aspx
kostenlose "Explorer"-Version für zu Hause Schul-Netzwerk-Lizenz 22 Plätze ca. 240,-€ 2007 Delphi 2007 Prof. R2 (für Vista) Alternative: FreePascal mit passender IDE: Lazarus (Vers. 0.9.24 Nov.2007)
3
G.Noll 2008
Unsere Ziele heute ...
... Einführung in das Arbeiten mit der Entwicklungsumgebung ... Kennenlernen von Standardkomponenten ... eine erste Begegnungen mit Klassen und Objekten sowie der UML ... die Erstellung einfacher Programme nach dem MVC Entwurfsprinzip ... Blicke auf den Unterricht entsprechend dem neuen Grundfach Lehrplan
4
G.Noll 2008
Entwicklungsumgebung
Die IDE von Delphi 6 Professional Programmstart Objektinspektor Komponentenpalette Quelltextfenster Formular
5
G.Noll 2008
Delphi-Projekt
Delphi erstellt automatisch ein neues Projekt Speichern Sie es, bevor Sie etwas verändern, sofort mit Datei Alles speichern in einen neu angelegten Ordner geeigneten Namen für das Projekt Die automatisch vorgeschlagen Namen man dann dem Unitnamen ein m Projekt einen aussagekräftigen Namen unit1.pas
mit einem und project1.dpr
können Sie vorerst übernehmen. Wenn Sie die beiden Namen ändern, dann müssen sie verschieden sein. Üblicherweise stellt für „Modul“ voran und gibt dem Neben den beiden Dateien unit1.pas und project1.dpr werden automatisch im Projektordner viele weitere Dateien angelegt und laufend von Delphi verwaltet Das neue Projekt ist ein lauffähiges Windows-Fenster Programm Wenn Sie es starten, erzeugt Delphi im Projektordner eine exe-Datei und auf dem Bildschirm ein typisches Probieren Sie es aus!
6
G.Noll 2008
Projektaufbau
Von Pascal her erwarten wir eine Struktur aus Hauptprogramm und Units. Delphi Projekte sind genauso aufgebaut:
7
G.Noll 2008
Ü-01: Ein erstes Programm
Kopieren Sie den Ordner 01 TagUndNacht in Ihr eigenes Verzeichnis Laden und starten Sie dann das Projekt in Delphi und testen Sie seine Funktionalität Beenden Sie das Programm und analysieren Sie den Quelltext Führen Sie auf dem Formular einen Doppelklick auf ein Button-Objekt aus. Was passiert?
Wie kommen die Bildchen auf das Fenster?
Fügen Sie eine weitere Wolke hinzu Lassen Sie sich über Projekt und Quelltext anzeigen das Hauptprogramm anzeigen.
Was geschieht dort?
8
G.Noll 2008
Quelltext der Unit
unit mTagUndNacht; interface
Einbinden Systemunits eigene Units
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) BTag: TButton; BNacht: TButton; ImErde: TImage; ImSonne: TImage; ImMond: TImage; ImWolke1: TImage; ImWolke2: TImage; ImWolke3: TImage; procedure BTagClick(Sender: TObject); procedure BNachtClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; //Ende Klassendeklaration var Form1: TForm1;
Klassendeklaration Attribute, hier alles Objektvariable Methoden Objektdeklaration
implementation {$R *.DFM}
Einbinden der Datei des Formularobjekts
9
G.Noll 2008
Methoden der Unit
unit mTagUndNacht; interface ...
var Form1: TForm1; implementation
Ereignisbehandlung
{$R *.DFM} procedure TForm1.BTagClick(Sender: TObject); begin Form1.Color := clAqua; Form1.ImMond.Visible := False; Form1.ImSonne.Visible := True; end;
Zugriff auf Attribute (hier "Properties") eines Objektes
procedure TForm1.BNachtClick(Sender: TObject); begin Form1.Color := clBlack; Form1.ImSonne.Visible := False; Form1.ImMond.Visible := True; end;
Qualifizierte Bezeichner
end.
Lassen Sie einmal bei den Zuweisungen den 1. Teil des Bezeichners weg. Was passiert?
10
G.Noll 2008
Quelltext des Hautprogramms
program TagUndNacht; uses Forms, mTagUndNacht in 'mTagUndNacht.pas' {Form1}; {$R *.RES} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end.
Hier finden wir u. a.
die Einbindung von Units und Ressourcen die Erzeugung des Fensterobjektes den Start des Programms
11
G.Noll 2008
Programmablauf
Delphiprogramme reagieren auf Ereignisse Wir haben keinen festen Programmablauf mehr Ereignisse lassen sich auslösen Maus oder Tastatur OnClick u. a. über Klicken auf ein Objekt mit der Maus OnChange eine Eingabe wird verändert Ereignisse sind Botschaften an Objekte Die Modellierung mit Klassen und Objekten tritt deshalb in den Vordergrund Algorithmische Kenntnisse sind weiterhin wichtig (z. B. Kontrollstrukturen, Sortierverfahren)
12
Klassen und Objekte
In unserem Programm begegnen wir u. a. folgenden Klassen und Objekten
Klassename Objektname G.Noll 2008
Form1: TForm1 Color Height = ´clAqua´ = 270 AutoSize = false ...
procedure BTagClick() BTag: TButton Caption = ´Tag´ Left = 24 Height ...
= 25 BNacht: TButton Caption =´Nacht´ Left = 168 Height ...
= 25 Klassen Objekte sind Baupläne für Objekte sind Exemplare einer Klasse
13
G.Noll 2008
Objektzustand
Objekt Attribut
BNacht: TButton Caption =´Nacht´ Left Height ...
= 168 = 25
Attributwert
Eine Klasse (bzw. ein Objekt) wird u. a. über seine Attribute (Felder, Eigenschaften) bestimmt. Die konkreten Attributwerte legen den aktuellen Zustand eines Objektes fest.
14
G.Noll 2008
UML Notation
U nified M odeling L anguage 1995 erstmalig vorgestellt Heute die Standardnotation um ein objektorientiertes Softwaresystem zu modellieren UMLed ist ein schultaugliches UML-Werkzeug, das eine direkte Verknüpfung von Modellierung und Program mierung in Delphi (oder auch in Java) ermöglicht
15
Ein anderer Blick auf TForm1
Die Klasse TForm1 besitzt andere Klassen hat - Beziehung (Aggregation, Komposition) Klassendiagramm
G.Noll 2008
Aggregation
16
G.Noll 2008
Ü-02: Ein zweites Fenster
Die Klasse TForm1 ist ein Bauplan für Fenster. Wir sollten also problemlos ein weiteres Fenster erzeugen können Kopieren Sie den Ordner 02 TagUndNachtF in Ihr eigenes Verzeichnis und laden Sie dann das Projekt in Delphi Ergänzen Sie den Quelltext so, dass ein zweites Fenster (Formular) mit der Caption „Tag und Nacht 2“ erzeugt wird.
Wie reagiert das 2. Fenster auf Ereignisse?
Ergänzen Sie den Quelltext so, dass auf der Nachtseite des 2. Fensters ein Stern erscheint
17
G.Noll 2008
Ein Blick auf den Unterricht
Zum LP des Grundfaches Informatik hat die FDK einen möglichen Unterrichtsgang entwickelt ( www.informatik-lehren.de
unterrichtlichen Umsetzung des LP ) Hierin finden sich konkrete Vorschläge zur
18
Ü-03: BMI-Rechner
Mit einem Programm soll der B ody M ass I ndex BMI berechnet werden
BMI
Gewicht
in kg (
Körpergröße
in m) 2
G.Noll 2008
Erstellen Sie zunächst nur die Benutzungs oberfläche, das G raphical U ser I nterface GUI
19
GUI-Objekte erzeugen
Aktivieren der Komponente anschließend auf das Formular klicken und positionieren Label Edit GroupBox Button G.Noll 2008
Was geschieht bei der Platzierung von Komponenten ?
20
G.Noll 2008
Bezeichnungen
Delphi vergibt automatisch Namen an die GUI-Objekte, z. B. Label1, Button1, Button2 Besser ist es, eigene Bezeichnungen zu vergeben Im Objektinspektor über die Eigenschaft Name z. B. : B Init GB Eingabe L Ueberschrift usw.
B für Button GB für Groupbox L für Label Die Aufschriften von Objekten lassen sich anschließend über ihre Laufzeit zuweisen Caption - Eigenschaft im Objektinspektor verändern oder später zur
21
G.Noll 2008
Attribute - Methoden
Delphi trägt die Komponenten automatisch als Objektvariable in die Klasse TForm1 ein Durch Doppelklick auf ein Objekt wird eine Ereignisbehandlungsroutine erzeugt und als Methode in der Klassendefinition eingetragen Ereignisbehandlungsroutinen nie per Hand löschen, sondern nur den Prozedurrumpf löschen. Bei der nächsten Compilierung wird die gesamte Prozedur automatisch gelöscht Verschiedene Objekte können die gleiche Ereignisbehandlungsroutine benutzen. Das wird im Objektinspektor eingetragen
22
G.Noll 2008
Eingabe und Ausgabe
Edit Komponente (Klasse TEdit) einzeiliges zentrale Eigenschaft Text ( Feld für Eingabe und Ausgabe String) antwort:=Edit1.Text; (property) nützliche Eigenschaften/Methoden Clear Edit1.Clear; Enabled Visible ReadOnly Edit1.Enabled:=true; Edit1.Visible:=false; Edit1.ReadOnly:=true; (procedure) (property) (property) (property) nützliche Ereignisse OnChange OnEnter OnExit z. B. Prüfung der Eingabe vor dem Verlassen
23
G.Noll 2008
Daten auf dem GUI
Edit-Komponenten arbeiten mit Daten des Typs string . Deshalb sind Konvertierungen notwendig:
Variable GUI-Objekt Groesse:=StrToFloat(EGroesse.text); Gewicht:=StrToFloat(EGewicht.text); Variable GUI-Objekt EBMI.text:= FloatToStrF(bmi,ffnumber,8,1);
Formatierte Ausgabe: FloatToStrF() mehrere Formatierungsmöglichkeiten, meist ausreichend ist FloatToStrF(zahl,ffnumber,8,2)
24
G.Noll 2008
MVC Konzept
Wir wollen von Anfang an eine Trennung von Daten und ihrer Präsentation anstreben. Dies ist das Ziel des MVC -Entwurfsprinzips: M odel V iew : enthält die Daten und die daten spezifischen Operationen (Algorithmen) : Präsentation der Daten C ontroller : verwaltet die Views und die Benutzeraktionen Wichtig: das Modell kennt weder die Präsen tation (View) noch die Steuerung (Controller) und kann auf beide nicht zugreifen
25
G.Noll 2008
BMI - Modell
Daten und Datenoperationen sind für das BMI-Problem leicht identifizierbar: Körpergröße : real Gewicht : real BMI-Wert : real BMI Berechnungsalgorithmus Später werden noch hinzukommen BMI-Bewertung : string BMI Bewertungsalgorithmus Die Daten TForm1, die Datenoperationen Methoden werden als private Attribute deklariert als von private
26
G.Noll 2008
BMI - Formularklasse
Zugriffsschutz ++ published + – public privat Methodenart !
Auftrag (procedure) ?
Anfrage (function)
Datenmodell Modellprozeduren 27
G.Noll 2008
BMI - Programmierung
Erstellen Sie das komplette BMI-Programm Ergänzen Sie Ihr Programm mit einer Bewertung des BMI. Die dazu notwendigen Informationen finden Sie über die Google-Suche mit den Stichworten BMI Rechner Düsseldorf Was geschieht bei Fehleingaben?
28
G.Noll 2008
Laufzeitfehler
Fehler zur Ausführungszeit lassen sich mit einem try-except Block abfangen und mit eigenen Routinen bearbeiten Syntax try // Anweisungen deren Laufzeitfehler abgefangen werden except // Hinweise oder Abfangroutinen falls Fehler (exceptions) // auftreten end; Voraussetzung Das Stoppen bei Delphi-Exceptions ist abgeschaltet. Bei Delphi 6 geschieht dies unter dem Menupunkt Tools-Debugger Optionen-Sprachexceptions
29
G.Noll 2008
Ü-04: Weltbevölkerung
Die Entwicklung der Weltbe völkerung schreitet rasch voran: Im Jahr 2006 wurde die 6,6 Milliardengrenze überschritten. Zur Zeit wächst die Weltbevölkerung jährlich um ca. 1,2 %.
Mit Hilfe eines kleinen Programms wollen wir die jährliche Entwick lung verfolgen. dsw-Datenreport 2006 Ausführliche Infos unter www.dsw-online.de
30
G.Noll 2008
Datenmodell
Entprechend der Aufgabe legen wir die Daten und ihren Datentyp fest: Informationen: Im Jahr 2006 wurde die 6,6 Milliardengrenze überschritten. Zur Zeit wächst die Weltbevölkerung jährlich um ca. 1,2 %.
Modellierung:
Jahr Population WFaktor : integer; : real; : real; 31
G.Noll 2008
Ereignisse
In unserem Simulationsprogramm wollen wir zwei Ereignisse behandeln: Benutzeraktion bzw. Ereignis: Mausklick auf den Button > Programmreaktion: Aktuelle Werte werden Jahres wird berechnet eingelesen und die Population des nächsten und angezeigt Mausklick auf den Button < Aktuelle Werte werden Jahres wird berechnet eingelesen und die Population des vorherigen und angezeigt
32
G.Noll 2008
Datenoperationen
Für die Berechnung formulieren wir passende Prozeduren
procedure TForm1.naechstePopulation; begin Jahr end; := Jahr + 1; Population := Population * WFaktor; procedure TForm1.vorherigePopulation; begin Jahr end; := Jahr -1; Population := Population / WFaktor; 33
G.Noll 2008
Programmierung
Entwerfen Sie eine eigene Benutzungs oberfläche oder kopieren Sie sich den Ordner 05 Population Programmgerüst in ein eigenes Verzeichnis und benutzen das vorgegebene Implementieren Sie die Daten und Daten operationen sowie die Ereignisbehandlungs routinen. Beachten Sie dabei das MVC Prinzip !
Wann wird nach diesem Modell die 7 Millarden Grenze überschritten? Wann wurde die 6 Millarden Grenze überschritten?
34
G.Noll 2008
Initialisierungen
Für das Wachstumsprogramm wäre es angenehm, wenn beim Programmstart die Daten von 2006 bereits im Formular eingetragen wären Für solche Initialisierungen wird üblicherweise eine Ereignisbehandlungsroutine benutzt, die automatisch beim Erzeugen des Fensters aufgerufen wird:
procedure TForm1.
FormCreate (Sender: TObject); begin EJahr.Text:='2006'; EPopulation.Text:='6,6'; EWFaktor.Text:='1,2' end;
Das Prozedurgerüst von FormCreate wird bei einem Doppelklick auf das Formular angelegt
35
Hilfe von und über Delphi
Delphi unterstützt die Programmentwicklung durch verschiedene Hilfsmechanismen, z. B.
Automatische Erzeugung von Prozedurgerüsten Anzeige von Eigenschaften und Methoden hinter der Eingabe eines Objektbezeichners ( Strg-Space )
G.Noll 2008
Aufruf eines umfassenden, verlinkten Hilfssystems über die Menüleiste Kontextsensitive Hilfe mit F1 (auch im Fehlerfenster)
36
G.Noll 2008
Debugging
Neben dem Hilfesystem besitzt Delphi auch einen Laufzeit Debugger Das Debugging muss unter Projekt Optionen - Compiler aktiviert sein Typisches Vorgehen Starten Sie ein Programm mit F7 Verfolgen Sie den Ablauf im Quelltext und im Programmfenster Beachten Sie die Tooltipps unter dem Cursor im Quelltext. Sie können dazu auch Teile des Quelltextes markieren.
Setzen Sie Haltepunkte im Quelltext (auf blauen Punkt klicken), starten Sie dann das Programm mit F8
37
G.Noll 2008
Ü-05 Euklidischer Algorithmus
Eine Aufgabe aus einer Kursarbeit: Der euklidische Algorithmus ggT(a,b) (modern) (1) r sei der Rest bei der Teilung a/b (2) ist r=0 so gib b als ggT(a,b) aus und höre auf (3) speichere b in a und r in b ab und fahre mit (1) fort Stelle den Algorithmus mit einem Struktogramm dar Implementiere den Algorithmus als Funktion Verwende zur Eingabe der beiden Zahlen je eine SpinEdit Komponente (unter "Beispiele") Das Formular soll keinen Button enthalten
38
G.Noll 2008
Struktogramm
Euklidischer Algorithmus dargestellt im Struktogramm mit StruktEd ggT(a,b) (1) r sei der Rest bei der Teilung a/b (2) ist r=0 so gib b als ggT(a,b) aus und höre auf (3) speichere b in a und r in b und fahre mit (1) fort
ggT nach Euklid (moderne Variante)
Eingabe: natürliche Zahlen a und b r := a mod b r = 0 ?
true Ausgabe: ggT ist b a := b b := r repeat until r = 0 false
39
G.Noll 2008
Eingabe - Fallunterscheidung
SpinEdit (unter dem Reiter "Beispiele") Edit-Feld für ganze Zahlen Start-Wert Value Minimalwert MinValue Schrittweite Increment und Maximalwert MaxValue Radiobutton - Radiogroup An- und Abwahl einer Option Gruppe sich ausschließender Optionen Eigenschaft checked (boolean) bzw. ItemIndex (Zählung mit 0 beginnend; -1 bei keiner Auswahl) Checkbox An- und Abwahl einer Option Eigenschaft checked (boolean)
40
Ein Blick auf den Unterricht
G.Noll 2008
( Auszug aus "Ein möglicher Gang durch das Grundfach Informatik" )
41
G.Noll 2008
Ü-06: Euklid - alte Version
Der euklidische Algorithmus (alte Version) ggT(a,b) (1) falls a=b gib a als ggT(a,b) aus (2) falls a>b speichere a-b in a sonst speichere b-a in b
ggT nach Euklid (alte Version)
Eingabe: natürliche Zahlen a und b while a <> b do true a := a - b a > b ?
b := b - a false Ausgabe: ggT ist a (3) fahre bei (1) fort Implementieren Sie den Algorithmus als alternative Methode im vorherigen Projekt Die Auswahl soll über eine RadioGroup erfolgen
42
G.Noll 2008
Laufzeitmessung
Eine hochpräzise Messung der Laufzeit ist in Delphi mit folgender Befehlsfolge möglich
procedure TForm1.BZeitClick(Sender: TObject); var a, e, f: int64; begin QueryPerformanceFrequency(f); QueryPerformanceCounter(a); //Befehlsfolge deren Zeitdauer bestimmt werden soll QueryPerformanceCounter(e); BZeit.Caption := FloatToStrF(1000*(e-a)/f,FFNumber,8,3); //Ergebnis hier in ms end;
(nach Easy Delphi Helper unter www.dsdt.info
)
43
G.Noll 2008
Ü-06 Würfelspiel
Eine Aufgabe aus einer Kursarbeit: Ein Würfelspiel Du wirftst vier Würfel und gewinnst, wenn mindestens 2 Würfel die Augenzahl 5 oder 6 zeigen. Schreibe ein Programm, das die vier Augen zahlen auf einem Panel ausgibt und feststellt, ob du gewonnen hast.
Erweiterung: Ermitteln Sie mir einer Simulation, wie groß die Chance ist, bei diesem Spiel zu gewinnen?
44
G.Noll 2008
Zufallszahlen
Pseudozufallszahlen in Pascal zz:=random(n) liefert ganzzahliges zz mit 0 Würfel: zz:=random(6)+1 zz < n Damit der Zufallszahlengenerator stets andere Werte liefert, wird er zu Beginn initialisiert
procedure TForm1.
FormCreate (Sender: TObject); begin randomize ; end; 45
G.Noll 2008
Stringverarbeitung - Parameter
Vom System vorgegebene Funktionen und Prozeduren zur Stringverarbeitung eignen sich in besonderer Weise zur Thematisierung von Schnittstellen und ihren Parametern, z.B.
function length(S:string):Integer; function Pos(SubStr:String; S:String):Integer procedure Delete(var S:String; Index,Count:Integer) procedure Insert(Source:String; var S:String; Index:integer) function AnsiUpperCase(S:String):String (in der Unit SysUtils)
Auf Zeichen eines Strings kann man wie auf die Elemente eines array of char zugreifen Stringverarbeitung lässt sich gut in ein Programmierprojekt zur Kryptographie einbinden
46
G.Noll 2008
Ü-07: Eigene Stringverarbeitung
Einfache Programmierübungen ergeben sich aus Erweiterungen der Standardoperationen Schreiben Sie ein Programm, das in einem Satz jedes Vorkommen einer Zeichenfolge durch eine andere Zeichenfolge ersetzt: p a p a kennt den ti p m a m a kennt den ti m Verwenden Sie dazu die Standardoperationen
delete und insert
47
G.Noll 2008
Ein Blick auf den Unterricht
48
G.Noll 2008
Ein Blick auf den Unterricht
49
G.Noll 2008
Ü-08: Kryptographie
Cäsar-Verschlüsselung Text (ohne Umlaute und Sonderzeichen) in ein Memofeld eingeben In Großbuchstaben umwandeln ( AnsiUpperCase ) Buchstabenverschiebung durchführen ASCII-Tabelle: Großbuchstaben haben die Ordnungszahl ORD('A')=65 bis ORD('Z')=90 Verschiebung um k (Schlüsselzahl 0
50
G.Noll 2008
Stringliste: Ein- und Ausgabe
Memo Komponente (Klasse TMemo) mehrzeiliges Feld für Eingabe und Ausgabe zentrale Eigenschaft Lines ( Stringliste) Zählung der "Lines" beginnt mit 0 nützliche Eigenschaften/Methoden für Stringlisten Lines.Clear
Lines.Add() löscht alle Einträge (procedure) fügt eine Zeile am Ende hinzu Lines.Delete() Lines.Count
Lines.SaveToFile() Lines.LoadFromFile() Lines.Delete(0) löscht 1. Zeile Anzahl der Zeilen (property) Speichern in einem Textfile Laden aus einem Textfile
51
G.Noll 2008
Ü-09: Cäsar mit Dateien
Ergänzung zum Projekt Cäsar Behandlung von Umlauten, Sonderzeichen und Leerzeichen Klartext aus einer Textdatei in das Memofeld einlesen bzw. in eine Textdatei abspeichern Geheimtext aus dem Memofeld in eine Textdatei abspeichern bzw. aus einer Textdatei einlesen Dateidialoge OpenDialog und SaveDialog Komponenten werden nur auf das Formular gebracht der Aufruf erfolgt durch die Methode execute execute liefert true (Ok-Button) oder false zurück über die Eigenschaft filename eingegebenen Dateinamen zugegriffen (Abbruch-Button) wird auf den gewählten oder
52
G.Noll 2008
Ü-10: Wörter sortieren
Schreiben Sie ein Programm zum Sortieren einer Folge von Wörtern Einfache Sortierverfahren sind z. B. Bubblesort Auswahl (Sortieren durch Minimumsuche) oder direkte Beschränkung auf 10 Wörter Eingabe über Memofeld - Ausgabe über Listbox
Sortieren mit Bubblesort
Import: Feld f und Feldlänge n Export: Feld f sortiert := true für pos von 1 bis n - 1 wiederhole f [pos] > f [pos+1] true vertausche f [pos] mit f [pos+1] sortiert := false wiederhole bis sortiert=true false
Sortieren mit Minimumsuche
Import: Feld f und Feldlänge n Export: Feld f für start von 1 bis n - 1 wiederhole minpos := start für pos von start+1 bis n wiederhole f [pos] < f [minpos] true minpos := pos vertausche f [start] mit f [minpos] false
53
G.Noll 2008
Stringliste: Ausgabe
Listbox Komponente (Klasse TListbox) Ausgabe einer Liste von Strings mit der Möglich keit zum Auswählen, Löschen, Hinzufügen zentrale Eigenschaften/Methoden Items ( Stringliste) ListBox1.Items.Add('Speyer'); Es sind alle Eigenschaften und Methoden der Stringliste möglich ItemIndex Sorted Clear Nr. des ausgewählten Strings Zählung beginnt mit 0 Nr. ist -1 falls kein String gewählt wurde (property) mit der Zuweisung true werden die Strings sortiert (property) löscht alle Einträge (procedure)
54
G.Noll 2008
Ü-11: Mit Delphi sortieren
Delphi enthält eine eigene Sortierroutine Eine Listbox kann über die Eigenschaft Sorted sortiert werden: LBox1.Sorted:=true von Delphi Fügen Sie einen Button zur Sortierung mit Delphi ein und vergleichen Sie das Ergebnis mit dem des eigenen Verfahrens Wird jetzt alles richtig sortiert?
55
G.Noll 2008
Literatur
Delphi - Schulbücher Schumann Delphi für Kids mitp-Verlag, Bonn 2005 (incl. Delphi 7 Personal Edition) Bähnisch Praktische Informatik mit Delphi (2 Bd.) Cornelsen, Berlin 2001 Damann-Wemßen Objektorientierte Programmierung mit Delphi (2 Bd.+LB) Klett, Stuttgart 2001-2005 Frischalowski Delphi 5.0 (2 Bd.) Herdt-Verlag, Nackenheim 1999
56
G.Noll 2008
Literatur
Delphi - Allgemein Binzinger Delphi Markt+Technik, München 2004 Doberenz-Kowalski Borland Delphi 6 Hanser, München 2002 Ebener Delphi 6 - nachschlagen und verstehen Addison-Wesley 2002 UML Oestereich Analyse und Design mit UML 2.1
Oldenbourg, München 2006 Oesterreich Die UML 2.0 Kurzreferenz für die Praxis Oldenbourg, München 2006 Balzert UML 2 in 5 Tagen W3L Verlag, Herdecke 2005
57
G.Noll 2008
Literatur
Internet Eine Google-Suche mit Delphi Unterricht unüberschaubare Vielfalt an Seiten liefert eine http://www.hsg-kl.de/faecher/inf/index.php
http://www.plauener.de/~lessing/delphi/delphi_v.htm
http://www.dsdt.info/grundlagen/ http://www.delphipraxis.net
(Stand: 27.3.2008)
58
G.Noll 2008
Viel Spaß und Erfolg bei der weiteren Arbeit mit Delphi
59
G.Noll 2008 60
G.Noll 2008
Projektverwaltung
Delphi sichert im Laufe der Projektentwick lung eine Serien von Dateien, u. a. : *.dpr
*.pas
*.dfm
*.res
*.dcu
*.dof
*.~??
*.exe
Projektverwaltung (Hauptprogramm) Pascalquelltext (Unit) Formulareinstellungen Ressourcen wie Icons, Sound etc.
compilierte Unit Compiler Einstellungen Backup Dateien *.~pa *.~dp etc.
ausführbares Windows-Programm
61
G.Noll 2008
Cäsar - Dateidialoge
TForm1 = class(TForm) OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; ....
procedure BLadenGeheimClick(Sender: TObject); procedure BSpeichernGeheimClick(Sender: TObject); procedure TForm1.BLadenGeheimClick(Sender: TObject); begin if OpenDialog1.Execute then MGeheimtext.Lines.LoadFromFile(OpenDialog1.Filename); end; procedure TForm1.BSpeichernGeheimClick(Sender: TObject); begin if SaveDialog1.Execute then MGeheimtext.Lines.SaveToFile(SaveDialog1.Filename); end; 62
Delphi-Forum
G.Noll 2008 63
Tag und Nacht
64
Tag und Nacht mit 2 Fenster
65
BMI
66
BMI mit try-except
67
Population
68
Population mit Initialisierung
69
Euklidischer Algorithmus
70
Struktogrammeditor
71
ggT Algorithmus zur Auswahl
72
Laufzeitmessung
73
Würfelspiel
74
Würfelspiel mit Simulation
75
Suchen und Ersetzen
76
Cäsar
77
Cäsar mit Dateien
78
Sortieren
79