10.11.2013 Aufrufe

Übungsblatt 6

Übungsblatt 6

Übungsblatt 6

MEHR ANZEIGEN
WENIGER ANZEIGEN

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.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!