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 |