Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Wie muss eine korrekte Schleife aussehen


delphidepp - Mo 03.11.03 16:47
Titel: Wie muss eine korrekte Schleife aussehen
sorry ich bin ein newbe!

ich habe eine schleife gebastelt die aber scheinbar nicht richtig funktioniert zumindestens nicht so wie ich das gern hätte oder ich habe ein knick in meiner logik.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Button1Click(Sender: TObject);
var
   i: integer;

begin
  for i:=0 to 2 do
    begin
      label1.Caption:=(inttostr(i));
      sleep(1000);
    end;
end;


wenn meine logik richtig ist dann sollte die schleife beim 1 durchlauf
eine 0 in das label feld schreiben und danach 1 sekunde warten.
beim 2 durchlauf kommt eine 1 ins labelfeld
und bei 3 durchlauf eine 2 ins labelfeld

und danch sollte die schleife beendet sein.

wenn ich aber auf den button drücke dann leit mein proggi für 3 sekunden hängen (also "schläft er diese zeit) und dann sehe ich sofort eine 2 dort stehen.

ich möchte aber dass gerne so haben dass ich sehe wie eine 0 erschein dann nach 1 sekunde eine 1 und wieder nach einer sekunde eine 2 erscheint.

wie sollte ich denn dann die schleife aufbauen?

danke


Delete - Mo 03.11.03 16:50

Vor das sleep ein Application.ProcessMessages oder ein Label1.Refresh. Du musst deiner anwendung auch die Zeit geben das Label zu aktualisieren.


delphidepp - Mo 03.11.03 17:00

ok danke für die super schnelle antwort!

es hat schon mal funktioniert, aber nun das proggi das ich gerade versuche zu machen:

ich lese das telefonbuch von meinem handy aus, und nutze folgendes dazu:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.Button4Click(Sender: TObject);
var s: integer;
    check: String;
begin

  for s:=1 to 100 do
    begin
      SerialPortNG1.SendString('AT+CPBR='+inttostr(s)+ #13+#10);
      memo1.Refresh;
      sleep(75);
      memo1.Refresh;
      check:=serialportng1.ReadNextClusterAsString;
      memo1.Lines.Add(check);

      check:=serialportng1.ReadNextClusterAsString;
      memo1.Lines.Add(check);

    end;
end;


nun habe ich das prolem dass die einträge aus dem telefonbuch nicht der anzahl der schleife entsprechen meine schleif ehört bei 60 auf.

und ich nicht verfolgen kann wie er eintrag für einntrag ausliest

wo steckt nun hier der wurm?

sorry nochmal aber ich peil das irgendwie nicht!

danke


Delete - Mo 03.11.03 17:27

entweder liest du vorher die Anzahl der Einträge aus oder du nutzt eienb while Schleife, die so lange läuft, bis eine Abbruchbedingung greift. Wie diese aussieht, musst du wissen. Leerstinmg oder was weiß ich.


delphidepp - Di 04.11.03 16:01

ok danke für die schnellen antworten. soweit habe ich fast alles gecheckt ABER ein Problemchen habe ich noch und das macht mich bald wahnsinnig. Ich muss echt ein knick in der meiner Logik haben.

Also mal grundlegendes zu meinem Proggi

ich habe einen Timer der alle 10 ms am ComPort4 nachsieht was, dieser zurückgibt und schreibt alles in ein Memofeld rein.

Mit einem Button lasse ich eine Serie Befehle an diesen ComPort senden.
der Quelltext sieht wie folgt aus:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Button4Click(Sender: TObject);
var i, s: integer;
begin
    i:=1;
        while I >= 1 do
              begin
                    SerialPortNG1.SendString('AT+CPBR='+inttostr(i)+ #13+#10);
                    gauge1.Progress:=i;
                    gauge1.Refresh;
                    sleep(75);
                    i:=i+1;
                        if i=101 then
                        break;
              end;


end;


Nun wenn ich den Button drücke sehe ich wie der Statusbalken auf 100% rauszählt. Dabei erscheint nichts im Memofeld. Erst wenn der Gauge1 Balken auf 100 % ist, dann sehe ich wie die Antworten auf meine Befehle im Memofeld1 einlaufen. Das zweite Problem ist auch, dass mit der Schleife der Befehl 100 Mal ausgeführt werden sollte. Im Memofeld bekomme ich aber nicht 100 Mal eine Antwort zurück, sondern (ist unterschiedlich mal mehr mal weniger) so ca. 60 Antworten.

Was mache ich bloß falsch?

Danke @All