Schleife

HarryXVI

Erfahrenes Mitglied
Gibt es in Delphi eine Schleife, die sagt: "Jedes Mal, wenn (Bedingung, z.B. Anklicken von Button) passiert, soll (Anweisungsblock) gemacht werden."?

Wenn nein, wie kann ich dies umschreiben?
 
Was die Schleife angeht, so suchst du wohl so etwas:
Code:
while (Bedingung) do
begin
end;

Wie allerdings Matze mit seinem Stichwort anmerkte, ist eine einfache Schleife zu unterscheiden von der Reaktion auf ein Ereignis. Unter DOS waren Dauerschleifen, welche die verschiedenen Eingabegeräte (Tastatur, Maus, Joystick) abfragten, der Standard. Doch unter Windows sieht die Sache etwas anders aus. Da laufen nämlich Hunderte von verschiedenen Ereignissen gleichzeitig ab, u.a. Reaktionen auf Mausklicks, Bildschirmaktualisierungen, Meldungen verschiedenster Peripheriegeräte etc.pp. Diese werden von Windows verwaltet, sortiert und weitergeleitet. Für ein Delphiprogramm bedeutet dies nun, daß es auf solche Ereignisse (Events) reagieren muß. Wenn du also auf einen Buttonklick in deinem Formular reagieren willst, dann solltest du keine Schleife bauen, die permanent abfragt "Wurde denn der Button geklickt?" Denn sobald der Button geklickt wird, wird ein entsprechendes Ereignis vom Betriebssystem generiert, auf das dann der Button selbst reagieren kann, was wesentlich effizienter ist.

Einbauen lässt sich das in Delphi furchtbar einfach (insofern du tatsächlich mit dem visuellen Designer arbeitest): Führe auf dem Button in deiner Entwurfsansicht einen Doppelklick aus. Dann wechselt deine Entwicklungsumgebung in den Quelltexteditor. Dort wurden dann automatisch alle notwendigen Zeilen eingefügt, damit eine entsprechende Ereignismethode ausgeführt wird (die heißt z.B. OnButton1Click() ), innerhalb derer du dann deinen Code schreiben kannst.

Siehe auch http://www.edv-buchversand.de/chapter.php?cnt=getchapter&id=ms-5411.pdf, Seiten 2 und 3.
 
schön, aber das hilft mir nicht so recht. Ich möchte in einer Prozedur folgende Anweisung schreiben:

"Jedes Mal, wenn die Prozedur aufgerufen wird, soll ein weiteres von 3 Bildern verschwinden und am Ende "Verloren" als MessageBox erscheinen".

Das mit der MessageBox und Bilder-Verschwinden weiß ich, aber nicht wie die Syntax der Schleife aussehen soll....
 
Code:
...
while Index < 3 do
begin
  LasseVerschwinden(Index);
  Inc(Index);
end;

CreateMessageDialog('Verloren', mtInformation, [mbOk]);
...
procedure LasseVerschwinden(BildIndex: Integer);
begin
  // An dieser Stelle das Bild ausblenden, das durch BildIndex indentifiziert ist
end;

Die Schleife ist das while.
 
Code:
procedure TMaexchen.SpielerLebenWeg;
begin
while Index &lt 3; do
  begin
  SpielerLebenWeg(Index);
  Inc(Index);
    end;
ImSLeben1.Visible := false;
ImSLeben2.Visible := false;
ImSLeben3.Visible := false;
ShowMessage('Verloren!');
end;

Was bedeutet "&lt"?
So stimmt das nicht, möchte jetzt gerne wissen, wie ich deinen Vorschlag auf meinen Fall anwende.
 
Das "&lt" ist das "kleiner"-Zeichen, das ich nicht als Zeichen schreiben kann, weil der Editor hier im Forum es umwandelt.

Aussehen sollte es ungefähr so:

/
\

Frag mich bitte nicht, warum das neuerdings in den HTML-Code umgewandelt wird.

Anmerkung noch zum Code:
Mit simplen Copy&Paste wirst du nicht wirklich weiter kommen. Das, was du da rauskopiert hast, kann und wird nicht funktionieren, ohne, daß du es nachbearbeitest.
 
Zurück