Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Delphi überspringt eine Zeile


Fabian E. - Mi 09.04.08 20:25
Titel: Delphi überspringt eine Zeile
hallo zusammen,

habe ein kleines problem mit einem schleifenkonstrukt.
Der compiler weigert sich in eine Zeile zu springen aber seht selbst:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
procedure TForm1.btGoCountClick(Sender: TObject);
var
  i                           : Integer;
  StopIt                        : Boolean;
begin
  StopIt := false;
  if btGoCount.Caption = 'Start' then
    begin
      btGoCount.Caption := 'Stop';
      pbCount.Max := StrToInt(edCount.Text);
      pbCount.Position := 0;
      for i := 1 to StrToInt(edCount.Text) do
        begin
          btGo.Click;
          Application.ProcessMessages;
          pbCount.Position := i;
          if StopIt then
            Exit;                         //Hier will er nicht hin, also wenn ich einen Breakpoint setzte wird dieser             
                                          //ungültig...
        end;
    end
  else if btGoCount.Caption = 'Stop' then
    begin
      btGoCount.Caption := 'Start';
      StopIt := true;                      //Hier das selbe...keine ahnung warum...wenn ich alles durchdebugge 
                                           //überspringt er die zeile einfach
    end;
end;


Hat jemand eine idee woran das liegen könnte?

gruß


Xentar - Mi 09.04.08 20:34

Delphi bringt ein wenig Intelligenz mit - es erkennt, dass die markierten Zeilen niemals durchlaufen werden können.

Du initialisierst die Variable mit false. Bis Zeile 17 gibt es keine Möglichkeit, dass dieser Wert geändert wird -> kann sie an der Stelle nicht true sein -> weg optimiert.
In Zeile 25 setzt du sie zwar auf true, aber verwendest sie danach nicht mehr -> weg optimiert.

Das ganze sollte übrigens auch als Hinweise ausgegeben werden, so von wegen "Zugewiesener Wert wird nicht benutzt" ;)


jaenicke - Mi 09.04.08 20:52

Ich vermute mal, dass das eine Möglichkeit zum Abbrechen des Vorgangs werden soll. Dann musst du die Variable aber auch global deklarieren und dann funktioniert das auch, da von außerhalb der Prozedur ein Zugriff auf die Variable möglich ist.


Fabian E. - Mi 09.04.08 20:54

user profile iconjaenicke hat folgendes geschrieben:
Ich vermute mal, dass das eine Möglichkeit zum Abbrechen des Vorgangs werden soll. Dann musst du die Variable aber auch global deklarieren und dann funktioniert das auch, da von außerhalb der Prozedur ein Zugriff auf die Variable möglich ist.


ach verdammt... ich glaub ich hatte heute echt zu lang schule... naja dumme fehler passieren auch schonmal... danke :)

gruß


passiv - Do 10.04.08 08:00

genau das gleiche Problem hatte vor kurzem ein Freund von mir. der hatte ein randomize dann den Prozeduraufruf, und wenn das erste in der Prozedur auch ein randomize war, hat er drinnen alle Zeilen mit einer bestimmten Variable ignoriert. als das randomize in der Prozedur weg war, hat er alles gemacht wie er sollte ...