![]() |
einfaches lauflicht?
hi @ all!!
ich hab ein einfaches lauflicht programmiert. es arbeitet mit 10 labels, wovon immer nur 3 "rot leuchten". ich hab es schon hinbekommen, dass das lauflicht von links nach rechts und wieder zurück funktioniert, aber dann geht es nicht weiter... warum nicht!? damit zähle ich ein label hoch, woran sich das lauflicht orientieren soll:
Code:
und mit diesem teil "leuchten" die label auf:
Label1.Caption := IntToStr(i+1);
i := i+1;
Code:
(da ist es bereits an der 4. "lampe")
if label1.caption='20' then
begin label12.color:=clblack; label15.color:=clred; end; der rückweg geht gleich:
Code:
if label1.caption='85' then
begin label15.color:=clblack; label12.color:=clred; end; alles schön und gut... aber wenn ich jetzt das label auf '0' setzte, geht es nicht weiter, aber er sollte doch eigentlich wieder hochzählen, oder? thx Chriss |
Kannst Du bitte erst mal posten, wie diese 10 Labels angeordnet sind bzw. wie das mit dem Lauflicht aussehen soll? Irgendwie peile ich die Quelltextteile, die Du geschrieben hast, nämlich (noch) nicht. ;-)
|
also, die label sind horizontal angeordnet, also in einer reihe:
:arrow: :arrow: :arrow: :arrow: :arrow: :arrow: :arrow: :arrow: :arrow: :arrow: nach den quelltextausschnitten, leuchtet gerade (beide male einmal von links nach rechts und auf dem rückweg von rechts nach links): :arrow: :idea: :idea: :idea: :arrow: :arrow: :arrow: :arrow: :arrow: :arrow: ich hoffe, dass das die anordnung verdeutlicht... der timer ist übrigends auf 0001 gestellt, damit ein laufender übergang erfolgen kann |
Warum machst Du denn nicht so etwas?:
Delphi-Quellcode:
In "Position" steht gerade die Nummer des mittleren der drei Labels, die gerade leuchten.
var
Position: Byte; Labels: array[0..9] of TLabel; procedure Initialize; var i: Byte; begin for i := 0 to 2 do Labels[i].Color := clRed; for i := 3 to 9 do Labels[i].Color := clBack; Position := 1; end; procedure MoveRight; begin Labels[(Position+9) mod 10].Color := clBlack; Position := (Position+1) mod 10; Labels[(Position+1) mod 10].Color := clRed; end; procedure MoveLeft; begin Labels[(Position+1) mod 10].Color := clBlack; Position := (Position+9) mod 10; Labels[(Position+9) mod 10].Color := clRed; end; |
ähm, sorry, aber dann tut sich gar nichts!
sicher, dass ich nicht noch was brauche?! timer oder so?! |
Du brauchst natürlich noch deinen Timer! Der muss ja die Prozeduren ausführen.
Die Labels bewegen sich ja nicht weil es ihnen Spaß macht sondern weil der Timer ihnen in den Ar*** tritt! ;) MfG Florian :hi: |
entweder bin ich jetzt total durch den wind, oder ich bin zu blöd dazu!!!
ich muss die prozeduren da nehmen und sie mit dem timer starten, oder?! wie mache ich das denn, wenn ich die in den timer setze, gibts nen fehler (wegen dem wort "prozedur" hinter "begin") *schäm* :oops: :oops: |
das wort procedure is ja nur bei der eigentlichen Prozedur. Wenn du sie aufrufst musst du das nich mehr schreiben. wenn du z.B. ein Procedur
Delphi-Quellcode:
hast, dann musst du beim aufrufen z.B. in einem ButtonClick nur noch schreiben:
procedure TForm1.Hallosagen;
begin ShowMessage('Hallo') end;
Delphi-Quellcode:
begin
Hallosagen end; |
Ich schließ mich da jetzt mal Satanly (;)) an. Du nimmst einen Timer, doppelklickst auf ihn nachdem du alle Einstellungen gemacht hast und dann schreibst du hinter das begin der Prozedur:
Delphi-Quellcode:
Dann kommt schon das end; der Prozedur und gut is.
Labels[(Position+9) mod 10].Color := clBlack;
Position := (Position+1) mod 10; Labels[(Position+1) mod 10].Color := clRed; MfG Florian :hi: |
Feherl: unkompatible typen...
denke, dass bezieht sich auf die labels! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:39 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