Einführung in Delphi Komponenten regeln die Dateneingabe und Datenausgabe.
Datenverarbeitung Computer sind Geräte zur Datenverarbeitung. Grundprinzip: EVA Eingabe Verarbeitung Ausgabe Beispiel: Minirechner Dateneingabe Datenausgabe Verarbeitung einleiten
Aufbau von Delphiprogrammen Delphiprogramme bestehen aus Formularen, die Komponenten enthalten. Komponenten können sein Editierfelder Textausgabefelder Schaltflächen... Formulare und Komponenten sind Objekte
Klassendiagramm Klassendiagramm zum Beispiel
Das Formular Das Formular in Delphi entspricht der Welt bei Alice. Hier wird die Programmoberfläche durch Hinzufügen von Komponenten (Ein-, Ausgabeoder Steuerobjekte) gestaltet.
Klassendiagramm TForm (Auswahl)
Klassendiagramm TEdit (Auswahl)
Klassendiagramm TLabel (Auswahl)
Klassendiagramm TButton (Auswahl)
Aufgabe 1: Formular erstellen Erstelle nebenstehendes Formular. Verwende folgende Bezeichnungen: Form1: TForm1 zahl1ed, zahl2ed: TEdit ergebnisla: TLabel berechnebu: TButton
Aufgabe 2: Die Programmierung Unser Programm läuft zwar, aber es kann noch gar nichts. Erstelle eine Methode TForm1.ergebnisBerechnen des Formulars, die die Berechnung ausführt. Verknüpfe diese Methode mit dem Ereignis OnClick der Schaltfläche berechnebu.
Die Objektklasse des Hauptformulars type TForm1 = class(tform) zahl1ed: TEdit; Label1: TLabel; zahl2ed: TEdit; Label2: TLabel; ergebnisla: TLabel; berechnebu: TButton; private { Private-Deklarationen } public { Public-Deklarationen } end; neue Attribute Deklaration der Objektklasse TForm1 als Unterklasse der Objektklasse TForm var Form1: TForm1; Deklaration einer Instanz der Klasse TForm1
Neue Methode des Hauptformulars interface... type TForm1 = class(tform) zahl1ed: TEdit;... private procedure ergebnisberechnen; public { Public-Deklarationen } end; Vorwärtsdeklaration der Methode Zugehörigkeit zur Klasse TForm1! implementation {$R *.DFM} procedure TForm1.ergebnisBerechnen; begin {Quelltext der Methode} end; Programmierung der Methode
Verknüpfung mit einem Ereignis Die Methode TForm1.ergebnisBerechnen soll mit dem OnClick-Ereignis der Schaltfläche berechnebu verknüpft werden: berechnebu im Formular aktivieren. Im Objektinspektor das Register Ereignisse auswählen. Auf das leere Feld rechts neben dem OnClick-Ereignis doppelklicken: Delphi erstellt automatisch eine Ereignisbehandlungsmethode TForm1.berechneBuClick, die mit dem OnClick- Ereignis des berechnebu verknüpft ist
Die Ereignisbehandlungsmethode interface... type TForm1 = class(tform) zahl1ed: TEdit;... procedure berechnebuclick(sender: TObject);... end; implementation... procedure berechnebuclick(sender: TObject); begin {Quelltext der Methode} end;
Inhalt der Ereignisbehandlungsmethode implementation... procedure berechnebuclick(sender: TObject); begin ergebnisberechnen; end;
Inhalt der Methode ergebnisberechnen implementation... procedure TForm1.ergebnisBerechnen; var lokale Variablen zahl1, zahl2, ergebnis: Integer; der Methode begin ergebnisberechnen zahl1:=strtoint(zahl1ed.text); zahl2:=strtoint(zahl2ed.text); ergebnis:=zahl1*zahl2; ergebnisla.caption:=inttostr(ergebnis); end;
Das Delphifenster Hauptfenster Formularschablone Objektinspektor Quelltexteditor
Das Hauptfenster Symbolleiste Komponentenpalette Datei öffnen Projekt öffnen Zwischen Formular und Editor wechseln Programm starten (vorher compilieren) Neues Formular erstellen Programm anhalten (möglichst nie betätigen!)
Die Komponentenpalette entspricht bei Delphi der Objektgalerie von Alice
Grundsatz für Delphi Ändere oder lösche im Quelltext nie etwas, was Delphi automatisch generiert hat!
Methoden in Pascal interface... type TKlassenname = class... private procedure Methodenname(par1: Typ1;par2: Typ2;...); public { Public-Deklarationen } end; implementation {$R *.DFM} procedure TKlassenname.Methodenname(par1: Typ1;...); begin {Quelltext der Methode} end;
Funktionsmethoden in Pascal interface... type TKlassenname = class... private function Funktionsname(par1: Typ1;...):Rueckgabetyp; public { Public-Deklarationen } end; implementation {$R *.DFM} function TKlassenname.Funktionsname(par1: Typ1;...): Rueckgabetyp; begin {Quelltext der Funktion} Result:=Rueckgabewert; end;
Lokale Variablen in Pascal Lokale Variablen werden im Implementation-Teil unmittelbar nach dem Methodenkopf hinter dem Schlüsselwort var deklariert: procedure TKlassenname.Methodenname; var variable1, variable2: Datentyp1; variable3: Datentyp2; begin {Quelltext der Methode} end;
Globale Variablen in Objektpascal Globale Variablen werden als Attribute von Klassen in der Klassendeklaration des Interface- Teils deklariert (vorerst hinter private). Solange keine anderen Klassen verwendet werden, sind globale Variablen Attribute der Klasse des Formulars. type TForm1 = class(tform)... private attribut1, attribut2: Datentyp1; attribut3: Datentyp3; public { Public-Deklarationen } end;
Standarddatentypen in Pascal Datentyp Bedeutung Wertebereich Speicherbedarf Integer ganze Zahlen -21474833648 bis +2147483647 4 Byte Real Kommazahlen 2,9x10-39 bis 1,7x10 38 Genauigkeit: 11-12 Stellen 6 Byte Char 1 Zeichen (sprich: Character) 1 aus 256 ASCII- Zeichen 1 Byte String beliebige Zeichenkette (reale Länge der Zeichenkette +1) Byte Boolean Wahrheitswert true oder false 1 Byte
Wertzuweisung Wertzuweisungsoperator := Beispiel: var zahl1: Integer; zahl2: Real; zeichen: Char; text: String; wahrheit: Boolean; begin zahl1:=-4; zahl2:=3.14; zeichen:= r ; text:= Hallo, thats 4You! ; wahrheit:=false; end;
Typumwandlungen Funktion StrToInt(s: String) IntToStr(i: Integer) Bedeutung Konvertiert einen String, der eine Integer-Zahl repräsentiert, in eine Integer-Zahl. Konvertiert einen Integer-Wert in einen String. StrToFloat(s: String) FloatToStr(r: Real) FloatToStrF(r: Real) Konvertiert einen String, der eine Real-Zahl repräsentiert, in einen Gleitkommawert (Real). Konvertiert eine Gleitkommazahl in den entsprechenden String-Wert. Gibt die Real-Zahl allerdings in der Standardnotation aus. Konvertiert eine Gleitkommazahl in einen String-Wert mit anzugebendem Format und Genauigkeit.
Die Funktion FloatToStrF function FloatToStrF(Wert: Real; Format: TFloatFormat; Precision, Digits: Integer): string; Entscheidend ist die Angabe des Formats. Hier kommen für uns nur 3 Möglichkeiten in Betracht: ffexponent: Wissenschaftliches Format: "-d.ddd...e+dddd". Precision: Gesamtzahl der Stellen vor E (einschließlich der Ziffer vor dem Dezimalkomma) Digits: minimale Anzahl von Stellen im Exponenten (zwischen 0 und 4). fffixed: Festkommaformat: "-ddd.ddd...". Digits: Anzahl der Stellen nach dem Komma (zwischen 0 und 18) Precision: Anzahl der Stellen vor dem Komma ffgeneral: Allgemeines Zahlenformat. Der Wert wird unter Verwendung des Formats Fest oder Wissenschaftliche Notation in den kürzestmöglichen Dezimal-String umgewandelt. Meistens wird für unsere Belange das Format ffgeneral das geeignetste sein.
Kommentare Einzeiliger Kommentar: // Mehrzeiliger Kommentar: {} Anmerkung: Wie bei Robot Karol
Anweisungen Jede Anweisung muss mit einem Semikolon ; abgeschlossen werden. Anweisungsblöcke werden mit begin...end geklammert: begin anweisung1; anweisung2; anweisung3; end;
Rechenoperatoren Addition: + ergebnis:=a+b Subtraktion: - ergebnis:=a-b Multiplikation: * ergebnis:=a*b Division: Real-Zahlen:/ ergebnis:=a/b Integer-Zahlen: Ganzzahldivision: div 10 div 3 = 3 Ganzzahliger Rest: mod 10 mod 3 = 1 Inkrement um 1: a:=a+1 Dekrement um 1: a:=a-1
Logische Operatoren Logisches UND: and Logisches ODER: or Negation (Nicht-Operator): not
Vergleichoperatoren Operator = <> < <= > >= Bedeutung ist gleich ist ungleich ist kleiner ist kleiner oder gleich ist größer ist größer oder gleich Beispiel e = e ist true 5=6 ist false e <> e ist false 5<>6 ist true 5<6 ist true 5<5 ist false 5<=6 ist true 5<=5 ist true
Der Punktoperator Wie bei allen objektorientierten Programmiersprachen werden die Attributbezeichner bzw. Methodenbezeichner vom Objektname durch einen Punkt getrennt: Form1.caption und ergebnisla.caption Form1.Hide und berechnebu.hide Innerhalb des Quelltexts einer Methode kann man den Objektbezeichner weglassen, wenn ein Attribut bzw. eine Methode der eigenen Klasse aufgerufen wird.
Wichtige Funktionen I Funktion Abs(X:Integer/Real): Integer/Real Int(X:Real):Real Frac(X:Real):Real Trunc(X:Real):Integer Round(X:Real):Integer Bedeutung Betrag des Arguments Ganzzahliger Teil (Vorkommateil) des Arguments Nicht-ganzzahliger Teil (Nachkommteil) des Aguments Abschneiden der Nachkommastellen. Liefert im Gegensatz zuint einen Integer- Wert zurück. Rundet X auf einen Integer-Wert.
Wichtige Funktionen II Funktion Odd(I:Integer): Boolean Random:Real Random(I:Word):Word Sqr(X:Real/Integer): Real/Integer Bedeutung Ist I ungerade? Real-Zufallszahl zwischen 0<=Random<1 Word-Zufallszahl zwischen 0<=Random<I. Word =natürliche Zahl zwischen 0 und 65535 Quadrat des Arguments (Sqr von Square ) Sqrt(X:Real):Real Quadratwurzel des Arguments
Wichtige Funktionen III Funktion Sin(X:Real):Real Analog Cos, Tan ArcSin(X:Real):Real Analog ArcCos, ArcTan Pi:Real Bedeutung Sinus des Arguments (X im Bogenmaß) Arcus-Sinus des Arguments (Genaue Wertebereiche siehe Delphi-Hilfe) Wert der Zahl π
Gezählte Wiederholungen Bei gezählten Wiederholungen braucht man in Pascal eine Zählvariable, die vorher deklariert werden muss: procedure Methodenname; var zaehlvariable: Integer; begin //der Methode... for zaehlvariable:=startwert to endwert do begin //Wiederholung {zu wiederholende Anweisungen} end; //Wiederholung... end; //der Methode
Bedingte Wiederholung while Bedingung do begin {zu wiederholende Anweisungen} end;
Entscheidungen-Verzweigungen Einseitige Entscheidung: if Bedingung then begin {Anweisungen bei erfüllter Bedingung} end; Zweiseitige Entscheidung: if Bedingung then begin {Anweisungen bei erfüllter Bedingung} end //Kein ; vor else!! else begin {Anweisungen bei nicht erfüllter Bedingung} end;
Wichtige Ereignisse in Delphi I Ereignis OnActivate OnChange OnClick OnClose OnCreate OnDblClick OnEnter OnExit Beschreibung des Ereigniseintritts Die Komponente wird aktiviert (erster Aufruf, oder wird 'nach vorne' geholt). Der Text für ein Eingabefeld wird geändert. Auf die Komponente wird mit der Hauptmaustaste geklickt. Das Formular wird geschlossen. (nur für Formulare) Die Komponente wird mit dem Konstruktor erzeugt (einmaliger Vorgang, meist beim Programmstart). Doppelklick auf ein Objekt mit der Hauptmaustaste. Beachte, dass dann auch OnClick eintritt. Die Komponente erhält den Eingabefokus. Der Komponente wird der Eingabefokus entzogen
Wichtige Ereignisse in Delphi II Ereignis OnKeyPress/ OnKeyDown OnMouseDown OnMouseOver OnMouseUp OnResize OnShow Beschreibung des Ereigniseintritts Eine Taste der Tastatur wird gedrückt. Es kann die Taste, bei OnKeyDown auch eine Tastenkombination angegeben werden. Eine der Maustasten wird gedrückt. Es kann programmiert werden, auf welche das Programm reagieren soll. Überfahren der Komponente mit dem Mauszeiger. Maustaste wird losgelassen, während sich der Mauszeiger über der Komponente befindet. Größe der Komponente wird geändert. Komponente wird angezeigt
Standardereignis Jede Komponente besitzt Standardereignis. Doppelklick auf die Komponente in der Formularansicht erstellt die Ereignisbehandlungsmethode des Standardereignisses. Wichtige Standardereignisse: Schaltflächen (TButton): OnClick Editierfelder(TEdit): OnChange Textausgabefelder (TLabel): OnClick Formulare (TForm): OnCreate