Ich habe den Fehler durch ein kleines Programm simulieren wollen:
Delphi-Quellcode:
Label1.Caption := '-1';
Label1.Caption := '1';
Damit bekomme ich den Fehler allerdings nicht.
Mein Projektcode führt zu dem Fehler, aber es ist noch etwas bizarrer geworden.
Nur das LblPunkte1 führt zu diesem Fehler, das LblPunkte2 nicht.
Delphi-Quellcode:
//------------------------------------------------
//Wechsel-----------------------------------------
//------------------------------------------------
procedure TFormMain.Wechsel();
var
IntGeschossen : Integer;
IntAufnahme: Integer;
begin
//Jetzige Aufnahme verarbeiten und Anzeigen aktualisieren
IntGeschossen := IntEsLiegen - SpinEditBaelle.Value;
//Neue Höchstserie?
IntAufnahme := StrToInt(LblAufnahme.Caption);
if bSpieler1IstDran then //Welcher Spieler ist dran? -> Punkte addieren etc.
begin
Spieler1.Punkte := Spieler1.Punkte + IntGeschossen;
LblPunkte1.Caption := IntToStr(Spieler1.Punkte); //Anzeige aktualisieren-> Fehler, wenn
//die Anzeige vorher '-1' angezeigt hat und soll nun eine positive Zahl anzeigen
SGridTab1.Cells[0,IntAufnahme] := LblAufnahme.Caption;
SGridTab1.Cells[1,IntAufnahme] := IntToStr(IntGeschossen);
SGridTab1.Cells[3,IntAufnahme] := IntToStr(Spieler1.Punkte);
//Passt die nächste Aufnahme noch auf das Sheet oder muss eine neue Zeile angefügt werden?
if SGridTab1.RowCount <= IntAufnahme + 1 then
begin
SGridTab1.RowCount := SGridTab1.RowCount + 1;
SGridTab2.RowCount := SGridTab2.RowCount + 1;
//Die Tabellen bei Überlauf scrollen
SGridTab1.TopRow := SGridTab1.TopRow + 1;
SGridTab2.TopRow := SGridTab2.TopRow + 1;
end;
//Neue Höchstserie?
if IntGeschossen > Spieler1.Serie then Spieler1.Serie := IntGeschossen;
end else
begin
Spieler2.Punkte := Spieler2.Punkte + IntGeschossen;
LblPunkte2.Caption := IntToStr(Spieler2.Punkte); //Anzeige aktualisieren-> kein Fehler
SGridTab2.Cells[0,IntAufnahme] := LblAufnahme.Caption;
SGridTab2.Cells[1,IntAufnahme] := IntToStr(IntGeschossen);
SGridTab2.Cells[3,IntAufnahme] := IntToStr(Spieler2.Punkte);
LblAufnahme.Caption := IntToStr(IntAufnahme+1);
//Neue Höchstserie?
if IntGeschossen > Spieler2.Serie then Spieler2.Serie := IntGeschossen;
end;
//Nächste Aufnahme:
bSpieler1IstDran := not bSpieler1IstDran; //Nächster Spieler ist dran
IntEsLiegen := SpinEditBaelle.Value;
end;
Das ist die Prozedur, in die der Debugger hineinspringt. Aber ich weiß nicht, was das mit einer Scrollbar zu tun haben soll.
Delphi-Quellcode:
function TControlScrollBar.HandleAllocated: boolean;
begin
Result := (FControl <> nil) and FControl.HandleAllocated;
end;