Zu dieser Seite gehört wiederum ein Projekt (Knopf_Muehle_7), das hier heruntergeladen werden kann.
In unserer Mühlenanwendung fragt das Anwendungsobjekt die Knöpfe ab, ob diese gedrückt bzw. angeklickt sind. Das Programm reagiert nur dann, wenn eines dieser Ereignisse eintrifft. Allerdings drehen sich die Mühlen immer, auch wenn kein Knopf gedrückt wurde.
Dieses Verhalten interpretieren wir ein wenig
deutlicher: Unser Programm reagiert nur auf die Ereignisse :
Maus heruntergedrückt und Maus
losgelassen.
Später werden wir auch die Ereignisse Maus doppelgeklickt und
Tastatur
gedrückt einbauen.
Um dieses Verhalten der Anwendung zu verdeutlichen ändern wir die Schleife der Methode run:
Das Programm reagiert nur Wenn der Stop-Knopf angeklickt ist oder Wenn der neueMuehle-Knopf angeklickt ist oder Wenn der schneller-Knopf gedrückt ist oder Wenn der langsamer-Knopf gedrückt ist oder Wenn der Ende-Knopf angeklickt ist |
procedure TAnwendung.run; begin repeat if KStop.angeklickt then begin Muehle1.stop; KStop.deaktiviere; KLangsamer.deaktiviere; KneueMuehle.aktiviere; KEnde.aktiviere; end else if KneueMuehle.angeklickt then begin neueMuehle := TMuehle.init(100+random(600), 200+random(400), 50+random(50), 1+random(3), random(100)); neueMuehle.setzeZufallsfarbe; neueMuehle.stop; Muehle1.haengean(neueMuehle); end else if KSchneller.gedrueckt then begin Muehle1.schneller; KLangsamer.aktiviere; KStop.aktiviere; KneueMuehle.deaktiviere; KEnde.Deaktiviere; end else if KLangsamer.gedrueckt then begin Muehle1.langsamer; end; muehle1.drehe; dieUhr.warte(1) until KEnde.angeklickt end; |
Da das Anklicken bedeutet, dass bei einem Knopf die Maus vorher innerhalb
gedrückt wurde und nun innerhalb losgelassen wird, reagiert die Anwendung also
nur auf die Ereignisse Maus ist unten - einfacher MausUnten- und Maus wurde
wieder losgelassen - einfacher MausLosgelassen.
Damit stellt sich die Methode run einfacher dar:
Immer, wenn die Maus gedrückt ist Wird bearbeiteMausUnten aufgerufen. Ist die Maus nicht gedrückt und war auch nicht gedrückt, tritt das sog. Leerlaufereignis ein BearbeiteMausLosgelassen wird immer aufgerufen; wenn die Maus nicht gedrückt ist. Die Knöpfe sollen selbst feststellen, ob sie losgelassen wurden Diese Konstruktion zum Beenden der Schleife ist noch verbesserungswürdig! |
procedure TAnwendung.run; begin zMausUnten := Falsch; repeat if dieMaus.istGedrueckt then begin zMausUnten := Wahr; bearbeiteMausUnten; end else // Maus ist nicht gedrueckt begin if not zMausUnten // und Maus war auch nicht gedrueckt then bearbeiteLeerlauf; zMausUnten := Falsch; bearbeiteMausLosgelassen end until KEnde.angeklickt; end; |
Die Klasse TAnwendung benötigt natürlich nun die neuen Methoden
Diese entsprechen (fast) den entsprechenden Teilen der ersten run-Methode:
Der Leerlauf besteht natürlich aus dem Drehen der Mühlen |
procedure TAnwendung.bearbeiteLeerlauf; begin muehle1.drehe; dieUhr.warte(1) end; |
Der Auftrag wird nur an die erste Mühle erteilt. Die anderen Mühlen reagieren durch Verketttung. aktivieren und Deaktivieren von Knöpfen Auch während der Schneller-Knopf gedrückt wird, sollen sich die Mühlen drehen. Auch während der Langsamer-Knopf gedrückt wird, sollen sich die Mühlen drehen. |
procedure TAnwendung.bearbeiteMausUnten; begin if KSchneller.gedrueckt then begin Muehle1.schneller; KLangsamer.aktiviere; KStop.aktiviere; KneueMuehle.deaktiviere; KEnde.Deaktiviere; bearbeiteLeerlauf end else if KLangsamer.gedrueckt then begin Muehle1.langsamer; bearbeiteLeerlauf end; end; |
Auch hier wird der Auftrag nur der ersten Mühle erteilt. Erst jetzt kann der Knopf für die neuen Mühlen gedrückt werden. daher ist hier kein Leerlaufereignis nötig, die Mühlen stehen sowieso. |
procedure TAnwendung.bearbeiteMausLosgelassen; begin if KStop.angeklickt then begin Muehle1.stop; KStop.deaktiviere; KLangsamer.deaktiviere; KneueMuehle.aktiviere; KEnde.aktiviere; end else if KneueMuehle.angeklickt then begin neueMuehle := TMuehle.init(100+random(600), 200+random(400), 50+random(50), 1+random(3), random(100)); neueMuehle.setzeZufallsfarbe; neueMuehle.stop; Muehle1.haengean(neueMuehle); end end; |
Zum Abschluss und zur Verdeutlichung hier ein Beziehungsdiagramm des Projektes:
![]() |
|
![]() |
![]() |
Zur nächsten Seite ![]() |
© 2003 LK 12 If und G. Kubitz | Hannah-Arendt-Gymnasium, Lengerich |