AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Grundfragen zur Listbox und Timer

Ein Thema von delphi-projekt · begonnen am 16. Apr 2009 · letzter Beitrag vom 16. Apr 2009
Antwort Antwort
delphi-projekt
(Gast)

n/a Beiträge
 
#1

Grundfragen zur Listbox und Timer

  Alt 16. Apr 2009, 18:09
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:
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;
3.Frage: Wir verstehen den euch vorliegenden Quelltext nicht, was hat dieser zu bedeuten?
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:
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;
Danke
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Grundfragen zur Listbox und Timer

  Alt 16. Apr 2009, 20:26
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:
1.Frage: Wir haben keine Ahnung was (stringgrid1.Row>stringgrid1.RowCount-2) then
stringgrid1.RowCount:=stringgrid1.Rowcount+1; zu bedeuten hat
ist die aktuell selektierte Zeile größer als die vorletzte Zeile, dann erhöhe die Anzahl der Zeilen des StringGrid um ein. Auf deutsch, ist die letzte Zeile selektiert, so hänge eine neue Zeile an das StringGrid ran.

Zitat:
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);
ZeitS ist der String der in der Zelle steht und ZeitI der Integer. Der Timer erwartet in Interval einen Integer. Ein StringGrid speichert aber nur Strings in seinen Zellen. Also wird zuerst der String gelesen und danach dieser in einen Integer gewandelt.
Es würde aber auch so gehen:
  ZeitI := StrtoIntDef(StringGrid1.Cells[0, Index], 0); Dann spart man die Stringvariable.


Zitat:
3.Frage: Wir verstehen den euch vorliegenden Quelltext nicht, was hat dieser zu bedeuten?
Code: markieren
Inc(Index);
If Index > stringgrid1.Row
then Index := 0;

if (Timer1.Interval<1) then
Timer1.Interval:=1;
end;
Erster Teil:
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:
  if (Timer1.Interval<1) then
    Timer1.Interval:=1;
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.

Nächste Frage später

Gruß oki
42
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Grundfragen zur Listbox und Timer

  Alt 16. Apr 2009, 20:34
Zitat:
4.Frage: Wieso müssen wir die oben geschriebene Procedur nochmal komplett in den Timer einsetzen?
Müßt ihr nicht. Ich denke mal, dass über den Button unabhängig vom Timer um einen Schritt weiter gesetzt wird. So zu sagen Handbetrieb und Automatik (mit Timer).
Echt macht eher Sinn, den gesamten Teil in eine eigenen Procedure auszulagern. Bsp.:
Delphi-Quellcode:
procedure SteppIt;
var ....
begin
  ....
end;
Sowohl in der Ereignisbehandlungsmethode für den Button wie auch im Timer rufst du dann SteppIt auf.
Delphi-Quellcode:
procedure TForm4.Button3Click(Sender: TObject);
begin
  SteppIt;
end;

...

procedure TForm4.Timer1Timer(Sender: TObject);
begin
  SteppIt;
end;
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.

Gruß oki
42
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:15 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