Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Repeat-Until Schleife bei Bewegen eines Bilds (https://www.delphipraxis.net/141462-repeat-until-schleife-bei-bewegen-eines-bilds.html)

Haxx0r79 9. Okt 2009 12:35


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:

Forlan 9. Okt 2009 12:39

Re: Repeat-Until Schleife bei Bewegen eines Bilds
 
Erstmal Willkommen :dp:

Schau dir erstmal Grundlagen an.
Anschließend suchst du nach Hier im Forum suchenTTimer , da Schleifen zur Bildbewegung zu performence-fressend sind.

[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]

wicht 9. Okt 2009 12:44

Re: Repeat-Until Schleife bei Bewegen eines Bilds
 
Tach und willkommen im Forum :)

Delphi-Quellcode:
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.
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.
Toll, roter Kasten. Ich poste trotzdem mal, obwohl Forlan vermutlich nicht ganz unrecht hat. Auch der Timer wäre hier auf jedenfall vorzuziehen.

HTH

Forlan 9. Okt 2009 12:45

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.

wicht 9. Okt 2009 12:48

Re: Repeat-Until Schleife bei Bewegen eines Bilds
 
Naja, mit Sleep() nicht. Aber es ist trotzdem äußerst unschön.

Haxx0r79 9. Okt 2009 13:50

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?

wicht 9. Okt 2009 14:10

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:
autobild.Left := autobild.Left + 1;
rein. Über das Intervall kannst du dann eben die Millisekunden bestimmen, die zwischen den einzelnen Verschiebungen des Bildes liegen.

Haxx0r79 9. Okt 2009 14:40

Re: Repeat-Until Schleife bei Bewegen eines Bilds
 
wo soll ich den quellcode einfügen?
wo isn dieser Code des OnTick-Events??

wicht 9. Okt 2009 14:45

Re: Repeat-Until Schleife bei Bewegen eines Bilds
 
Klick einfach doppelt auf den Timer drauf im Designer. Dann bist du an der richtigen Stelle.

Haxx0r79 9. Okt 2009 15:00

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 04:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz