Servus,
ich schreibe grade ein kleines netzwerk spiel und ich bekomme ab und zu einen fehler an einer stelle im code, die sehr oft ausgeführt wird. Der fehler wird manchmal erhoben, wie gesagt, die prozedur wird verdammt oft ausgeführt. wenn aber der fehler einmal geraised war, wird er JEDESMAL wenn die prozedur ausgeführt wird, wieder erhoben.
Hier die prozedur:
Delphi-Quellcode:
function TForm1.CheckWin (WinColor : TColor) : Boolean;
var
I, J : Integer;
HasWon : Boolean;
begin
HasWon := False;
for I := 1 to 5 do
begin
for J := 1 to 4 do
begin
try
if (TPanel (FindComponent ('p' + IntToStr (J) + IntToStr (I))).Color = WinColor) and
(TPanel (FindComponent ('p' + IntToStr (J) + IntToStr (I + 1))).Color = WinColor) and
(TPanel (FindComponent ('p' + IntToStr (J) + IntToStr (I + 2))).Color = WinColor) and
(TPanel (FindComponent ('p' + IntToStr (J) + IntToStr (I + 3))).Color = WinColor) then
HasWon := True;
if (TPanel (FindComponent ('p' + IntToStr (J) + IntToStr (I))).Color = WinColor) and
(TPanel (FindComponent ('p' + IntToStr (J + 1) + IntToStr (I + 1))).Color = WinColor) and
(TPanel (FindComponent ('p' + IntToStr (J + 2) + IntToStr (I + 2))).Color = WinColor) and
(TPanel (FindComponent ('p' + IntToStr (J + 3) + IntToStr (I + 3))).Color = WinColor) then
HasWon := True;
if (TPanel (FindComponent ('p' + IntToStr (J) + IntToStr (I))).Color = WinColor) and
(TPanel (FindComponent ('p' + IntToStr (J + 1) + IntToStr (I))).Color = WinColor) and
(TPanel (FindComponent ('p' + IntToStr (J + 2) + IntToStr (I))).Color = WinColor) and
(TPanel (FindComponent ('p' + IntToStr (J + 3) + IntToStr (I))).Color = WinColor) then
HasWon := True;
finally
end;
end;
end;
for I := 4 to 8 do
begin
for J := 4 to 7 do
begin
try
if (TPanel (FindComponent ('p' + IntToStr (J) + IntToStr (I))).Color = WinColor) and
(TPanel (FindComponent ('p' + IntToStr (J + 1) + IntToStr (I - 1))).Color = WinColor) and
(TPanel (FindComponent ('p' + IntToStr (J + 2) + IntToStr (I - 2))).Color = WinColor) and
(TPanel (FindComponent ('p' + IntToStr (J + 3) + IntToStr (I - 3))).Color = WinColor) then
HasWon := True;
finally
end;
end;
end;
result := HasWon;
end;
Der fehler tritt immer in den FindComponents auf, die panels existieren auch alle, die er prüft.
Der Fehler:
Zitat:
Access violation at Address <ADDRESSE>. Read of Address <ADRESSE>
Warum wird er erhoben? greife ich zu schnell auf findcomponent zu? Habe es mal in try .. finally blocks gesetzt, allerdings raised er den fehler TROTZDEM!
Danke für die Hilfe.
MfG
[edit=SirThornberry] Mfg, SirThornberry[/edit]