Arbeitsblatt Übungen in Delphi Informatik Klasse: 11-12 Datum: 1. Juni 2007 1. Es gibt verschiedene Objekte: 1.1. TLabel Das erste Label, das man auf dem Formular platziert erhält automatisch den Namen ‚label1’ Eigenschaften Caption (typ: string) Ändern der Anzeige eines Labels : label1.caption:= ' neuer Text' Color (typ: integer) Beispiele: clred, clblue oder 255 für rot Ändern der Farbe mit label1.color:=clblue; 1.2. Tedit Das erste Edit-Feld erhält automatisch den Namen ‚edit1’ Eigenschaften Text Jede Eingabe erfolgt durch Text, auch Zahlen werden als Text (Zeichenkette) interpretiert. Ändern der Anzeige durch Schreiben in das Feld oder durch eine Wertzuweisung Edit1.text:= 'neuer Text' Font Beim Anklicken der Eigenschaft Font im Objektinspektor öffnet sich das bekannte FontMenü. 1.3. Tbutton Der erste Button erhält automatisch den Namen ‚Button1’. Da Nach Doppelklick auf den Button eine neue Prozedur erstellt wird, sollte man den Namen des Buttons sofort ändern. Die zuordnung zu seinen Aktionen wird leichter lesbar. Name Im Objektinspektor die Eigenschaft ‚Name’ suchen und ändern, sollte einen Bezug zu den ausglösten Aktionen stehen. Caption Ist die Beschriftung des button1.caption:= ' neuer Text' Buttons. Ändern der Anzeige eines Buttons: 1.4. TListbox Ist vergleichbar mit einem TEdit. Eigenschaften Items Im Objektinspektor kann man Listenelemente eintragen. Im Programm sind folgende Aktionen möglich: Listbox1.items.add('Text’); Hängt an die vorhandene Liste ein neues Element (Item) an. Delphi_1.doc Seite 1 von8 Arbeitsblatt Übungen in Delphi Informatik Klasse: 11-12 Datum: 1. Juni 2007 Listbox1.itemindex; Liefert die Nummer des markierten Items. (Zählung beginnt bei 0). Beispiel: showmessage(inttostr(listbox1.itemindex)); showmessage(listbox1.items[listbox1.ItemIndex]); Liefert den Inhalt des markierten Items. showmessage(listbox1.items[3]); Listbox1.clear; 1.5. Liefert den Inhalt des 4. Items. Löscht alle Listeneinträge TMemo Ist ein erweitertes TEdit. Eigenschaften Text Ist der gesamte Inhalt des TMemo Memo1.text:=’Neuer Text’; Lines Überschreibt den alten Text mit dem neuen. Ist der Inhalt einer Zeile im TMemo memo1.lines.Add('Neue Zeile'); Hängt eine neue Zeile an den vorhandenen Text an. showmessage(memo1.Lines[2]); Zeigt die 3. Zeile des TMemo. (Beginnt mit 0 zu zählen. SelText Selektierter Text a:=memo1.SelText; Schreibt den selektierten Text in die Variable a (Typ: String) memo1.lines.Add(memo1.SelText); Hängt den slektierten Text als neue Zeile an den vorhandenen an. Clear Memo1.clear oder memo1.lines.clear Löscht den Inhalt des TMemo. CommaText showmessage(memo1.Lines.CommaText); Zeigt den Text des TMemo’s an, wobei die einzelnen Zeilen durch Kommata getrennt sind. Delete(Zahl) memo1.Lines.Delete(2); Löscht die 3. Zeile in einem TMemo. IndexOf showmessage(inttostr(memo1.Lines.indexof('memo1'))); Zeigt die Zeilenummer, in der der Text steht. 1.6. TCombobox Die TCombobox hat die gleichen Eigenschaften wie eine Tlistbox. Delphi_1.doc Seite 2 von8 Arbeitsblatt Übungen in Delphi Klasse: 11-12 1.7. Informatik Datum: 1. Juni 2007 TStringGrid Das TStringGrid ist ein Element, das vergleichbar mit einer Tabelle ist. Die 1. Spalte und 1. Zeile sind standardmäßig als Bezeichner vorgesehen. Die Nummerierung beginnt bei 0. Das graue Feld links oben hat demnach die Koordinaten ( 0 | 0 ). Jede Zelle lässt sich direkt beschreiben. Eigenschaften Colcount legt die Anzahl der Spalten fest. Stringgrid1.colcount:=4 Es werden 4 Spalten angelegt, mit der Nummerierung 0..3, Stringgrid1.rowcount:=6 Rowcount legt die Anzahl der Zeilen fest. Es werden 6 Zeilen angelegt, mit der Nummerierung 0..5, Cells (Typ String) Stringgrid1.Cells[2,4]:=’Text’; FixedRows schreibt einen String in die Zelle (Typ Integer) Anzahl der fixierten Spalten (grau hinterlegt) FixedCols (Typ Integer) Anzahl der fixierten Zeilen (grau hinterlegt) GridLineWidth (Typ Integer) Breite der Gitternetzlinien DefaultRowHeight (Typ Integer) Höhe der Zeilen DefaultColWidth (Typ Integer) Breite der Spalten Beispiel: For i := 1 to 5 do begin For j := 1 to 5 do begin stringGrid1.cells[ i , j ]:= inttostr( j ); end; end; In die Zellen wird geschrieben, und zwar nacheinander in die Zellen der Reihe 1 (2. Reihe), Reihe 2 (3. Reihe) die Zahlen ' 1 ’ , ' 2 ’ , ' 3 ’ , ' 4 ’ , ' 5 ’ als Zeichen. Delphi_1.doc Seite 3 von8 Arbeitsblatt Übungen in Delphi Klasse: 11-12 2. Informatik Datum: 1. Juni 2007 ASCII Alle druckbaren und nichtdruckbaren Zeichen werden durch einen Zahlencode dargestellt, den sog ASCII-Code. Es gibt dabei eine Entwicklung seit „Erfindung“ dieser Codierung zu verzweichnen. Zunächst gab es nur 128 Zeichen. Das Problem war, dass nationale Sonderzeichen immer nur für ein Land darstellbar war, d.h. je nach Ländercode sahen einzelne Zeichen völig anders aus. Bei der Erweiterung auf 255 Zeichen fielen dies Probleme weg. Aber auch dies reichte nicht mehr aus, daher war die folgerichtige Entwicklung der „ANSI“-Code. Der alte ASCII wurde übernommen und deutlich erweitert, so dass nun auch chinesische Zeichen etc. darstellbar wurden. In Delphi werden alle Zeichen, Buchstaben wie Zahlen und Satz- wie auch Sonderzeichen im herkömmliche ASCII-Code verschlüsselt. Ord Definition: Function Ord(x : String) :Integer; Die Funktion erwartet einen String als Eingabe und liefert als Ergebnis einen IntegerWert. Beispiel: Edit1.text:=inttostr(Ord(‘a’)); schreibt in das TEdit die Zeichenfolge 97. Chr Definition: Function Chr(x : Integer) :String; Die Funktion erwartet einen Integer-Wert als Eingabe und liefert als Ergebnis einen String. Beispiel: Edit1.text:=Chr(65)); schreibt in das TEdit das Zeichen A. Beispiel2 Schreibt in die Listbox die Buchstaben A .. Z For i:=65 to 90 do begin Listbox1.items.add(chr( i )) End; Schreibt in die Listbox die Buchstaben a .. z For i:=97 to 122 do begin Listbox1.items.add(chr( i )) Schreibt in die Listbox die Zeichen 0 .. 9 End; For i:=48 to 57 do begin Listbox1.items.add(chr( i )) End; Delphi_1.doc Seite 4 von8 Arbeitsblatt Übungen in Delphi Klasse: 11-12 3. Informatik Datum: 1. Juni 2007 Caesar-Verschlüsselung Der Text steht in einem TEdit (Edit1), der verschlüsselte Text soll in ein zweites TEdit (Edit2) Geschrieben werden, mit festem Code. Procedure codieren const code=3; var i,r:integer; z:char; begin For i:=1 to length(edit1.text) do begin z := edit1.text[i]; // das i-te Zeichen wird gelesen r := ord(z) ; // Umwandlung in ASCII-Code r := r+code; //Codieren, verschieben entlang der Buchstabenachse edit2.text := edit2.text+chr(r); //Eintragen in edit2 end; Problem: Es können auch “Nichtbuchstaben” entstehen. Durch Weglassen von r := r+code und stattdessen durch Einfügen von If r > 90 then r:=r – 32; r := r + code; if r > 90 then r := r – 26; // werden Großbuchstaben erzeugt // Die Zeichen nach “Z” werden in Zeichen beginnend mit “A” umgewandelt. Frage: Wie wird entschlüsselt? Delphi_1.doc Seite 5 von8 Arbeitsblatt Übungen in Delphi Klasse: 11-12 4. Informatik Datum: 1. Juni 2007 Funktionen Funktionen haben den Kopf: function name (x : Typ1) : Typ2 begin …. Result:=…..; (name:=…….;) end; x ist dabei das Argument, die Variable, deren Wert an die Funktion übergeben wird. Typ1 ist der Typ der Variablen Typ2 ist der Typ der Funktion Result In der Funktion muss diese Zeile stehen. In ihr wird der Funktion ihr Wert zugewiesen. Als Alternative ist auch " Funktionsname:= Wert “ möglich. Der Aufruf erfolgt immer in der folgenden Form: Y:=name(Wert); Beispiele für in Delphi „eingebaute“ Funktionen: IntToStr(x : Integer) : String; Eine Integer-Zahl wird übergeben, das Ergebnis ist ein String. StrToInt( x : String) :Integer Ein String wird übergeben, Das Ergebnis ist eine Zahl. 5. Prozeduren Erfolgt die Deklaration in der Form: Procedure Name Begin … end; werden in dieser Prozedur globale Variablen verwendet, so wird ihre Wertänderung global gültig. Erfolgt die Deklaration in der Form: Procedure Name (x : Typ) Begin … end; werden von global deklarierten Variablen nur die Kopien verwendet, d.h. globale Werte werden übernommen, Änderungen sind aber nur innerhalb der Prozedur gültig. Erfolgt die Deklaration in der Form: Procedure Name (var x : Typ) Begin … end; werden global deklarierte Variable direkt verwendet, d.h. globale Werte werden übernommen, Änderungen sind aber global gültig. In allen drei Formen sind lokal deklarierte Variablen nur lokal gültig, selbst wenn eine global Variable unter dem gleichen Namen deklariert wird. Delphi_1.doc Seite 6 von8 Arbeitsblatt Übungen in Delphi Klasse: 11-12 6. Informatik Datum: 1. Juni 2007 Typ-Deklarationen Neben den standarmäßig vorhandenen Typen lassen sich eigene neue Typen dekarieren 6.1. Record Ein Record ist eine Zusammenfassung mehrer Variablen mit (möglicherweise) unterschidelichem Typ zu einer neuen. Type TRecord = record a: integer; b: String; end; var einrecord : TRecord; Wertzuweisung mit Einrecord.a:=4; Einrecord.b:=’text’; Oder: With einrecord do begin a := 4; b := ' text ’ ; end; 6.2. Eigenständige Variablen – Typen Type Menge1 = 'a' .. 'z' ; Menge2 = (mo , di , mi , dn , fr); Zaehlmenge = mo..fr ; Var X : menge1; (x ist vom Typ char. Es kann aber auch als Zähler verwendet werden Y : Zaehlmenge; (Y ist ein Enumerationswert, also weder Text noch Zahl, sondern nur als Zähler zu verwenden Beispiele: For x:= 'a’ to 'n’ do begin Showmessage(x); Hier wird der Inhalt der Variablen in einem Fenster ausgegeben End; For y:=mo to fr do begin Showmessage('x’); Hier geht nicht das gleiche wie oben, da dieser Typ „enumerisch“ ist, d.h. weder String noh integer. End; Delphi_1.doc Seite 7 von8 Arbeitsblatt Übungen in Delphi Klasse: 11-12 Informatik Datum: 1. Juni 2007 Aufgabe: Schreibe ein Programm mit folgenden Objekten: Label, Edit-Feld und Button. Nach Drücken auf den Button wird im Feld Edit1 "ein neuer Text" angezeigt. Nach Doppelklick im Editfeld erscheint der Text auch im Label. Tip: Wähle bei Edit1 im Objektinspektor Ereignisse "OnDblClick" und schreibe in die Prozedur den entsprechenden Befehl. 7. Umgang mit Zahlen Gibt man in Edit eine Zahl ein und will damit rechnen, muß der "String" in eine Zahl verwandelt werden: StrToInt Wandelt einen String in eine Zahl (Integer) um !!!Der String darf nur aus Ziffern bestehen!!! IntToStr Wandelt einen Zahl in eine String um StrToFloat Wandelt einen String in eine Zahl (Float oder Turbo3 Real) um !!!Der String darf nur aus Ziffern bestehen!!! FloatToStr Wandelt einen Zahl in eine String um Aufgabe: Schreibe ein Programm mit drei Edit-Feldern und einem Button. Nach Start soll in das erste Feld eine '3' in das zweite eine '5' eingegeben werden. Nach Druck auf den Button sollen die Zahlen addiert werden und das Ergbnis im dritten Edit-Feld ausgegeben werden. Tip Die Befehle in der Prozedur lauten: a := stroint(edit1.text) b := stroint(edit2.text) c := a + b edit2.text(inttostr( c )) !!!Vergiß nicht, die Variablen zu deklarieren!!! Es geht auch kürzer, in einer Zeile! Wie? 7.1 Auf \\ntserver\schueler\delphi\Aufgaben\ befinden sich die Verzeichnisse Aufgabe_1 und Aufgabe_2. 7.2 Beschreibe die Funktionen des Programmes aus Aufgabe_!. 7.3 In Aufgabe_2 kann man Text auf verschiedene Arten unter den Feldern austauschen. Notiere die Prozeduren, die es erlauben den Text per Drag und Drop von einem Feld in ein anderes zu kopieren. (Es sind hierzu Prozeduren beim Sender (Source) und Empfänger nötig. 7.4 Übertrag das Gelernte in ein eigenes Programm. Ein Edit-Feld und ein Label. Es soll der in dem Edit-Feld eingegebene Text per Drag und Drop in das Label kopiert werden. Delphi_1.doc Seite 8 von8