Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bild bei Position X stoppen.. (https://www.delphipraxis.net/33180-bild-bei-position-x-stoppen.html)

MAD_87 2. Nov 2004 19:35


Bild bei Position X stoppen..
 
Hi erstmal..

Ich bin grad dabei mir ein Ampelprogramm zu bauen und hab jetzt ne Frage. Mein Auto fährt bei Grün normal über die Ampel. Bei Rot sollte das Auto dann bis zu der Haltelinie fahren und dann stoppen. Wie kann ich das jetzt in Delphi verwirklichen?
Danke schonmal für die Antworten..

velgreyer 2. Nov 2004 19:42

Re: Bild bei Position X stoppen..
 
Da musst Du uns schon mehr über Dein Programm sagen ;) z.B.: Ist Dein Auto ein TImage; Bewegst Du das Auto mit TTimer?

http://datar.de/s.jpg, vel

MAD_87 2. Nov 2004 19:48

Re: Bild bei Position X stoppen..
 
Ok ich glaub du hast mir die Antwort schon indirekt gegeben. Ist ein tImage und ein Timer.
Würde das so gehen?:
Delphi-Quellcode:
If Image1.Top=X
then Timer.Enabled:=false
end;
Ich glaub so müsste das gehn..
Naja wenns anders geht könnt ihr ja was sagen..

Airblader 2. Nov 2004 22:42

Re: Bild bei Position X stoppen..
 
ja, wohl schon.

Gedanke:

Delphi-Quellcode:
if (ampel = rot) AND (auto_position = Haltelinie) then
begin
 Form1.Timer1.Enabled := false;
end;
Nich dass dein aut zu früh anhält ;)

Oder gleich so?

Delphi-Quellcode:
if ampel = rot then
begin
 if auto_position = haltelinie then
 begin
  Form1.Timer1.Enabled := false
 end else
  Auto_geschwindigkeit := Auto_geschwindigkeit - 1;
 end;
end;
Dann wird es immer langsamer wenn es rot ist ;) (Vergiss nicht es wieder schneller zu machen!)

MAD_87 3. Nov 2004 18:47

Re: Bild bei Position X stoppen..
 
[quote="Airblader"]ja, wohl schon.

Gedanke:

Delphi-Quellcode:
if (ampel = rot) AND (auto_position = Haltelinie) then
begin
 Form1.Timer1.Enabled := false;
end;
Nich dass dein aut zu früh anhält ;)
[quote]

habs ja auch so gehabt aber mein Auto fährt einfach weiter und hält wenn ich auf Rot klick, egal obs jetzt Top=100 oder Top=200 hat..

deinen anderen Tipp muss ich auch mal probieren.. Danke..

Airblader 4. Nov 2004 10:44

Re: Bild bei Position X stoppen..
 
Mir fällt grad noch was wichtiges ein:

Wenn du die geschw. immer verringerst, musst du natürlich aufpassen, dass du dann nicht zu früh auf geschw. 0 und -1 etc. kommst! (Beo rot rückwärts fahren :zwinker: )

Dazu kann man das auf 2 verschiedene arten lösen:

Delphi-Quellcode:
var halt: Boolean;
halt := false;

...

if ampel = rot then
begin
   if auto_position = haltelinie then
   begin
      Form1.Timer1.Enabled := false;
      halt := true;
   end else
   begin
      if (not (haltelinie - auto_position) > geschwindigkeit) AND (halt = true) then
      begin
         Auto_geschwindigkeit := Auto_geschwindigkeit - 1;
      end;
   end;
end;
Auf die Weise würde er (denk ich :gruebel: ) exakt bei der Haltelinie anhalten.

Allerdingst musst du dann - wenns wieder grün wird - halt := false machen

air

MAD_87 4. Nov 2004 19:29

Re: Bild bei Position X stoppen..
 
So hab jetzt das Programm so ziemlich laufen, nur irgendwie stoppt der zwar bei Rot und so jetzt, aber der fährt bei Grün nicht mehr los. Hier mein Code:

Delphi-Quellcode:
procedure TForm1.tiAuto1Timer(Sender: TObject);
begin
imAuto1.Top:=imAuto1.Top-1;
if shgruen1.Visible=true
then
tiAuto1.Enabled:=true
else if (shrot1.Visible=true) and (imAuto1.Top=330)
then tiAuto1.Enabled:=false
else if imAuto1.Top=-40
then imAuto1.Top:=400;
end;
Ich denke dass der richtig ist..

EDIT: Hab meine eigenen Kürzel:
im=Image
sh=Shape
ti=Timer

MAD_87 5. Nov 2004 11:01

Re: Bild bei Position X stoppen..
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier mal mein Delphiprogramm. Hab jetzt nochmal nach Fehlern geguckt aber nix gefunden. Und meine tolle Infolehrerin hat keinen Bock da mal drüber zu gucken, weil der logische Aufbau scheiße ist...

Airblader 5. Nov 2004 11:45

Re: Bild bei Position X stoppen..
 
ganz klarer logikfehler ;)

Wenn es rot wird, ist der timer aus.
dann ist doch klar, dass onTimer nicht ausgeführt wird und somit der timer gar nichtmehr enabled wird :)

Lösung:

nicht den timer ausschalten, sondern nur:

Delphi-Quellcode:
if shgruen1.Visible=true then
begin
imAuto1.Top:=imAuto1.Top-1;
end;
Verstanden? ;)

-------------------------------------
Änder deine tiAuto1Timer prozedur einfach so(habs getestet und es geht)

Delphi-Quellcode:
procedure TForm1.tiAuto1Timer(Sender: TObject);
begin
        if (shgruen1.Visible=true) AND (not shgelb1.Visible=true) then
        begin
                imAuto1.Top := imAuto1.Top-1
        end else
        if shrot1.Visible=true AND (not shgelb1.Visible=true) then
        begin
                if imAuto1.Top = 330 then
                        imAuto1.Top := imAuto1.Top
                else
                        imAuto1.Top := imAuto1.Top-1;
        end;

        if imAuto1.Top = -40 then
        begin
                imAuto1.Top := 400;
        end;
end;
Noch was:
Warum arbeitest du mit so vielen Shapes?
Mach doch einfach immer
shampel1.brush.color := clRed;
etc. :gruebel: ;)

MAD_87 5. Nov 2004 19:14

Re: Bild bei Position X stoppen..
 
Man bin ich dumm... Danke..
Habs mit den Shapes gemacht weil wir die grad in Info hatten. Wir haben heute erst mit Canvas,.. angefangen. Naja und jetzt lass ich das halt so. Ich hab ja eh erst 10 Std. oder so mit Delphi gearbeitet.

Nur mal so nebenbei: Findest du dass der Aufbau von meinen Quelltext unübersichtlich ist? Meine Infolehrerin hat damit nämlich Probleme. Die macht da immer so 2 Leerzeichen nach dem was Delphi schreibt. Naja ich finds auf jeden Fall so übersichtlicher.. Aber egal.. Jetzt kann ich sie ja testen, ob die den Fehler auch so schnell findet..
Danke nochmal..


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:25 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz