![]() |
Grundfragen zur Listbox und Timer
Im Voraus solltet ihr wissen das wir ein elektrisches Auto über den Computer steuern wollen.
Dazu müssen wir die einzelnen Checkboxen ansprechen damit der Computer weiß in welche Richtung das Auto fahren soll. Wir wollen das das Auto in einer vorgegebenen Zeit in eine bestimmte Richtung fährt dafür benötigen wir den Timer. Die Zeit und die Richtung in die das Auto fahren soll tragen wir in eine Stringgrid ein, in welcher der Timer die Werte ausliest. 1.Frage: Wir haben keine Ahnung was (stringgrid1.Row>stringgrid1.RowCount-2) then stringgrid1.RowCount:=stringgrid1.Rowcount+1; zu bedeuten hat
Delphi-Quellcode:
unit Unit4;
procedure TForm4.Button1Click(Sender: TObject); var index:integer; begin Form1.cbStrobe.checked:=true; if (stringgrid1.Row>stringgrid1.RowCount-2) then stringgrid1.RowCount:=stringgrid1.Rowcount+1; stringgrid1.Cells[0,stringgrid1.Row]:=(Edzeit.text); stringgrid1.Cells[1,stringgrid1.Row]:=(ComboBox1.Text); stringgrid1.Row:=stringgrid1.Row+1; end; 2.Frage: Wieso müssen wir 2 Zeiten vereinbaren? ;zeitS:String; zeitI:integer und daraus schlussfolgernd verstehen wir nicht zeitS:=stringgrid1.Cells[0,Index]; zeitI:=Strtointdef(zeitS,0);
Delphi-Quellcode:
3.Frage: Wir verstehen den euch vorliegenden Quelltext nicht, was hat dieser zu bedeuten?
procedure TForm4.Button3Click(Sender: TObject);
var i,b,p:integer; g:string; zeitS:String; zeitI:integer; begin zeitS:=stringgrid1.Cells[0,Index]; zeitI:=Strtointdef(zeitS,0); Timer1.Interval := 1000 * zeitI; Timer1.Enabled:=True; g:= stringgrid1.Cells[1,Index]; if g ='Geradeaus' then begin Form1.cbStrobe.checked:=false; Form1.cbData1.checked:=false; Form1.cbData3.checked:=true; Form1.cbData5.checked:=true; Form1.cbData7.checked:=true; end; if g= 'Rückwärts' then begin Form1.cbStrobe.checked:=false; Form1.cbData3.checked:=false; Form1.cbData1.checked:=true; Form1.cbData5.checked:=true; Form1.cbData7.checked:=true; end; if g= 'Geraderechts' then begin Form1.cbStrobe.checked:=false; Form1.cbData5.checked:=false; Form1.cbData1.checked:=false; Form1.cbData3.checked:=true; Form1.cbData7.checked:=true; end; if g= 'Geradelinks' then begin Form1.cbStrobe.checked:=false; Form1.cbData7.checked:=false; Form1.cbData1.checked:=false; Form1.cbData3.checked:=true; Form1.cbData5.checked:=true; end;
Code:
Inc(Index);
If Index > stringgrid1.Row then Index := 0; if (Timer1.Interval<1) then Timer1.Interval:=1; end; 4.Frage: Wieso müssen wir die oben geschriebene Procedur nochmal komplett in den Timer einsetzen?
Code:
Danke
procedure TForm4.Timer1Timer(Sender: TObject);
var g:string; i,b,p:integer; zeitS:String; zeitI:integer; begin Form1.cbStrobe.checked:=false; Form1.cbData1.checked:=false; Form1.cbData3.checked:=false; Form1.cbData5.checked:=false; Form1.cbData7.checked:=false; zeitS:=stringgrid1.Cells[0,Index]; zeitI:=Strtointdef(zeitS,0); Timer1.Interval := 1000 * zeitI; g:= stringgrid1.Cells[1,Index]; if g ='Geradeaus' then begin Form1.cbStrobe.checked:=false; Form1.cbData1.checked:=false; Form1.cbData3.checked:=true; Form1.cbData5.checked:=true; Form1.cbData7.checked:=true; end; if g= 'Rückwärts' then begin Form1.cbStrobe.checked:=false; Form1.cbData1.checked:=true; Form1.cbData3.checked:=false; Form1.cbData5.checked:=true; Form1.cbData7.checked:=true; end; if g= 'Geraderechts' then begin Form1.cbStrobe.checked:=false; Form1.cbData5.checked:=false; Form1.cbData1.checked:=false; Form1.cbData3.checked:=true; Form1.cbData7.checked:=true; end; if g= 'Geradelinks' then begin Form1.cbStrobe.checked:=false; Form1.cbData7.checked:=false; Form1.cbData1.checked:=false; Form1.cbData3.checked:=true; Form1.cbData5.checked:=true; end; Inc(Index); If Index > stringgrid1.Row then begin timer1.Enabled:=false; Index := 0; Form1.cbStrobe.checked:=True; Form1.cbData1.checked:=false; Form1.cbData3.checked:=false; Form1.cbData5.checked:=false; Form1.cbData7.checked:=false; if (Timer1.Interval<1) then Timer1.Interval:=1;end; end; |
Re: Grundfragen zur Listbox und Timer
hi delphi-projekt,
erst mal eins vorweg, teile deine Probleme auf mehrere Threads auf. Pro Frage ein Thread. Bemühe dich um eine ordentliche Formatierung deines Codes. Dann bekommst du sicher schneller deine Antwort. Zitat:
Zitat:
Es würde aber auch so gehen:
Delphi-Quellcode:
Dann spart man die Stringvariable.
ZeitI := StrtoIntDef(StringGrid1.Cells[0, Index], 0);
Zitat:
Delphi-Quellcode:
Inc(Index); // Index um einen Erhöhen (nächste Zeile)
If Index > stringgrid1.Row then // wenn letzte Zeile des StringGrid erreicht Index := 0; // dann mit Zeile 0 wieder anfangen Zweiter Teil:
Delphi-Quellcode:
wird ein Intervall von 0 gesetzt, so soll dieser auf 1 gesetzt werden. Null Millisekunden bringt keinen Sinn. Ob eine Milisekunde was bringt ist die zweite Frage, aber wohl besser wie 0.
if (Timer1.Interval<1) then
Timer1.Interval:=1; Nächste Frage später Gruß oki |
Re: Grundfragen zur Listbox und Timer
Zitat:
Echt macht eher Sinn, den gesamten Teil in eine eigenen Procedure auszulagern. Bsp.:
Delphi-Quellcode:
Sowohl in der Ereignisbehandlungsmethode für den Button wie auch im Timer rufst du dann SteppIt auf.
procedure SteppIt;
var .... begin .... end;
Delphi-Quellcode:
Ein weiterer Vorteil ist, dass wenn du Änderungen im Ablauf vornimmst du es nur ein einer Stelle tun mußt. Du kannst nichts vergessen und alle Aufrufe funzen gleich.
procedure TForm4.Button3Click(Sender: TObject);
begin SteppIt; end; ... procedure TForm4.Timer1Timer(Sender: TObject); begin SteppIt; end; Gruß oki |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:18 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