Übungsblatt 6
Übungsblatt 6
Übungsblatt 6
Verwandeln Sie Ihre PDFs in ePaper und steigern Sie Ihre Umsätze!
Nutzen Sie SEO-optimierte ePaper, starke Backlinks und multimediale Inhalte, um Ihre Produkte professionell zu präsentieren und Ihre Reichweite signifikant zu maximieren.
Prof. Dr. Lutz Wegner Sommersemester 2005<br />
Dipl.-Math. Kai Schweinsberg<br />
Programmierung graphischer Benutzerschnittstellen mit Tcl/Tk<br />
<strong>Übungsblatt</strong> 6<br />
Aufgabe 11: Tastaturereignisse<br />
Auf Skript-Seite 118 unten (und auf „holle“ im Verzeichnis /home/students/TCL_share/<br />
scriptSamples/kapitel8) finden Sie das Programm keybind.tcl, das das so genannte<br />
Key Symbol der zuletzt gedrückten Taste anzeigt.<br />
a) Testen Sie das Programm! Welche Besonderheiten stellen Sie fest?<br />
b) Bei einigen Tasten erhalten Sie als Key Symbol nur ?? angezeigt. Können Sie in diesen<br />
Fällen die gedrückte Taste über ihr ASCII-Zeichen (%A) identifizieren?<br />
c) In der Tcl/Tk-Dokumentation findet man unter dem Kommando bind zusätzlich die<br />
Prozentsubstitutionen %N und %k. Untersuchen Sie, welche Angaben diese Substitutionen<br />
für Tastaturereignisse liefern. Erweitern Sie dazu das Programm, sodass alle vier Werte<br />
(%K, %A, %N und %k) ausgegeben werden.<br />
Aufgabe 12: Validierende Eingabemaske<br />
In Abschnitt 8.2.3 des Skripts wird eine Eingabemaske vorgestellt, deren Felder die Farbe<br />
wechseln, sobald sie den Fokus besitzen. Sie finden das zugehörige Programm entry.tcl<br />
wie üblich auf „holle“ im Verzeichnis /home/students/TCL_share/scriptSamples/<br />
kapitel8.<br />
a) Ändern Sie das Programm ab, sodass die folgenden Daten eines Studenten erfasst<br />
werden können: Name, Vorname, Straße, Hausnummer, PLZ, Ort, Telefon, E-Mail,<br />
Homepage, Geburtsdatum und Matrikelnummer.<br />
b) Die Eingabefelder für die Postleitzahl, die Telefonnummer, das Geburtsdatum und die<br />
Matrikelnummer sollen so ausgestattet werden, dass sie nur gültige Eingaben akzeptieren.<br />
Es sollen jeweils nur Ziffern angenommen werden; bei der Telefonnummer dürfen<br />
zusätzlich Bindestriche und beim Geburtsdatum Punkte eingegeben werden. Beachten Sie<br />
hierzu Abschnitt 8.5.2 des Skripts und schlagen Sie in der Tcl/Tk-Dokumentation die<br />
Syntax des Kommandos regexp nach.<br />
Achten Sie darauf, dass die Funktionalität der Tabulatortaste, mit der Sie zwischen den<br />
Eingabefeldern wechseln können, durch die Eingabeprüfungen nicht eingeschränkt wird.<br />
Auch die Cursortasten sowie die Einfügen-, Entfernen-, Pos1- und Ende-Tasten sollen<br />
sich wie in Eingabefeldern üblich verhalten. 1<br />
c) Beschränken Sie bei den Feldern PLZ und Matrikelnummer die Länge der möglichen<br />
Eingabe: Die Postleitzahl soll aus maximal fünf, die Matrikelnummer aus maximal acht<br />
Ziffern bestehen.<br />
1 Wird eine Cursortaste, die Einfügen-, Pos1- oder Ende-Taste gedrückt, so liefert %A die Zeichenkette {}. Beim<br />
Drücken der Entfernen-Taste enthält %A das 128. Zeichen des ASCII-Codes, das Sie innerhalb eines regulären<br />
Ausdrucks mit \x7f angeben können.
Aufgabe 13: Abbrechen-Knopf für das Fraktalprogramm<br />
In Abschnitt 8.1.3 des Skripts wurde das Programm fractal3.tcl vorgestellt, mit dem man<br />
sich Fraktale in unterschiedlicher Größe und Qualität am Bildschirm anzeigen lassen kann. 2<br />
Sobald die Berechnung eines Fraktals gestartet wurde, lässt das Programm keine weiteren<br />
Eingaben zu und zeigt als Maus-Cursor statt des üblichen Pfeils eine Uhr an („Busy-<br />
Zustand“).<br />
Ergänzen Sie das Programm um einen Abbrechen-Knopf, mit dem Sie die Berechnung eines<br />
Fraktals abbrechen können. Der Maus-Cursor soll während der Berechnung weiterhin als Uhr<br />
erscheinen. Falls man den Cursor jedoch auf den Abbrechen-Knopf bewegt, soll er sich<br />
wieder in einen Pfeil verwandeln, um anzuzeigen, dass dieser Knopf gedrückt werden kann.<br />
Hinweise:<br />
• Das Programm stellt den so genannten „Busy-Zustand“ mit Hilfe der Prozedur busy_eval<br />
her. Diese ist innerhalb des Efftcl-Pakets definiert. Um den Abbrechen-Knopf in das<br />
Programm einzubinden, ist die Definition einer eigenen busy_eval-Prozedur<br />
erforderlich.<br />
• Die neue busy_eval-Prozedur soll analog zu der bisherigen (siehe Skript-Seite 107)<br />
aufgebaut sein, jedoch alle Eingaben während der Berechnung nicht auf ein außerhalb<br />
des Bildschirm liegendes Fenster, sondern auf den neuen Abbrechen-Knopf umleiten.<br />
• Wird der Abbrechen-Knopf angeklickt, so soll eine globale Variable gesetzt werden.<br />
Erweitern Sie die Prozedur fractal_draw, sodass diese Variable regelmäßig abgefragt<br />
wird, um zu erkennen, ob die Berechnung vorzeitig beendet werden soll.<br />
• Um zu erreichen, dass der Maus-Cursor während der Berechnung auf dem Abbrechen-<br />
Knopf als Pfeil dargestellt wird, ist es nicht nötig mittels bind Routinen für die Ereignisse<br />
„Enter“ und „Leave“ des Knopfes zu definieren. Stattdessen genügt es, einmalig dem<br />
Knopf den Pfeil (left_ptr) als Maus-Cursor zuzuordnen. Dazu wird das zu dem Knopf<br />
gehörende Widget-Kommando configure aufgerufen. Diese Einstellung wird nicht durch<br />
die spätere Änderung des Maus-Cursors für das oberste Fenster . überschrieben.<br />
2 Sie finden das Programm auf „holle“ im Verzeichnis /home/students/TCL_share/scriptSamples/kapitel8.