![]() |
Repeat-Until Schleife bei Bewegen eines Bilds
Hi erstmal:D
Ich hab dieses Forum gefunden und dachte mir ich mach mal nen Account und stell gleich mal meine erste Frage :twisted: :P Also hier kommt sie //////////////////////////////////////////////// procedure TForm1.losfahrenClick(Sender: TObject); var streckev:integer; begin streckev:=StrToInt(strecke.Text) repeat autobild.Left:=autobild.Left+1 until autobild.Left=streckev end; end. /////////////////////////////////////////////// das hier ist mein Code den ich benutze. Meine Aufgabe ist es ein Bild von nem Auto über den Bildschirm fahren zu lassen. Dazu nehm ich mal den Leftwert des Bildes und addiere halt etwas dazu. ich habn Eingabefeld undn Button ins Eingabefeld kommt die Strecke die das auto fahren soll(in metern) und der Code oben ist halt was passieren soll. ABER Wenn ich das ausführe steht da [Fehler] Unit1.pas(54): Operator oder Semikolon fehlt [Fehler] Unit1.pas(59): Inkompatible Typen: 'Integer' und 'procedure, untyped pointer or untyped parameter' [Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden was mache ich falsch? :gruebel: :pale: :( :( :cry: |
Re: Repeat-Until Schleife bei Bewegen eines Bilds
Erstmal Willkommen :dp:
Schau dir erstmal Grundlagen an. Anschließend suchst du nach ![]() [Edit] Bevor irgendwann diese Frage kommen sollte, hier schon mal die Lösung... :mrgreen: Um das Flackern abzustellen setzt du das Formular auf DoubleBuffered := True [/Edit] |
Re: Repeat-Until Schleife bei Bewegen eines Bilds
Tach und willkommen im Forum :)
Delphi-Quellcode:
Hinter jede Anweisung muss ein Semikolon. Dann geht auch schon alles. Ausserdem müsstest du in die Schleife vermutlich noch ein Application.ProcessMessages() packen, damit das kompiliert. Und weil man dann gar nichts sieht, weil das Bild sofort weg ist, müsste man noch ein Sleep() mit einbauen.
procedure TForm1.losfahrenClick(Sender: TObject);
var streckev:integer; begin streckev := StrToInt(strecke.Text); repeat autobild.Left := autobild.Left + 1; until autobild.Left = streckev; end; end. Toll, roter Kasten. Ich poste trotzdem mal, obwohl Forlan vermutlich nicht ganz unrecht hat. Auch der Timer wäre hier auf jedenfall vorzuziehen. HTH |
Re: Repeat-Until Schleife bei Bewegen eines Bilds
Er sollte auf jeden Fall einen Timer nehmen, da sonst seine CPU Auslastung auf 100% steigen würde.
|
Re: Repeat-Until Schleife bei Bewegen eines Bilds
Naja, mit Sleep() nicht. Aber es ist trotzdem äußerst unschön.
|
Re: Repeat-Until Schleife bei Bewegen eines Bilds
Wow super vielen dank für die schnellen Antworten! :spin2:
Als Info: Ich kenn net mal alle Grundlagen in Delphi weil wir erst seit kurzem Delphi in Informatik benutzen:) @wicht. hab jetzt überall wo du gesagt hast nen Semikolon hinzugefügt und es funtzt!!!! Vielen Dank! Aber ich würd des Programm gerne langsamer die Schritte von z.b. 0 bis 200 machen lassen, also net dass der gleich nen Sprung von a nach b macht Wo füg ich da dann das sleep ein? und vorallem welche Zahl? |
Re: Repeat-Until Schleife bei Bewegen eines Bilds
Du solltest auf den von Forlan vorgeschlagenen Ansatz eingehen. Die Schleife so zu machen wie du es jetzt hast macht dir nur Probleme. Und ein kleines Tutorial durchlesen (hier sind genug verlinkt denke ich, über die Suche) wäre sicherlich angebracht, ohne es böse zu meinen.
Also, pack auf dein Formular einen Timer. Den kannst du dann beim Klick auf den Button auf Enabled setzen und ihm davor Intervall zuweisen. In den Code des OnTick-Events (oder wie es heißt) des Timers packst du einfach dein
Delphi-Quellcode:
rein. Über das Intervall kannst du dann eben die Millisekunden bestimmen, die zwischen den einzelnen Verschiebungen des Bildes liegen.
autobild.Left := autobild.Left + 1;
|
Re: Repeat-Until Schleife bei Bewegen eines Bilds
wo soll ich den quellcode einfügen?
wo isn dieser Code des OnTick-Events?? |
Re: Repeat-Until Schleife bei Bewegen eines Bilds
Klick einfach doppelt auf den Timer drauf im Designer. Dann bist du an der richtigen Stelle.
|
Re: Repeat-Until Schleife bei Bewegen eines Bilds
Tut mir Leid, aber wo ist dieser Timer im Designer den du meinst?
/edit: Gefunden:D So der startet ja automatisch. Wie kann ich des machen dass der per klick startet? vllt irgendwie etwas wie onklick set OnTick:=True? /edit2: Habs selbst hinbekommen! Musste nen Button erstellen und dann begin Timer1.Enabled:=True end; eingeben:D Vielen Dank an alle!!!! Hab(erstmal)keine Fragen mehr! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz