Autor Beitrag
Fabian E.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 554

Windows 7 Ultimate
Visual Studio 2008 Pro, Visual Studion 2010 Ultimate
BeitragVerfasst: Mi 09.04.08 20:25 
hallo zusammen,

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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 554

Windows 7 Ultimate
Visual Studio 2008 Pro, Visual Studion 2010 Ultimate
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 270

WIN XP Professional
Delphi 7 Enterprise, Java (Eclipse), Python 2.5, Django 1.1
BeitragVerfasst: 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 ...

_________________
Die Probleme, die es in der Welt gibt, sind nicht mit der gleichen Denkweise zu lösen, die sie erzeugt hat.
Albert Einstein