Thema: Delphi Zugriffsverletzung

Einzelnen Beitrag anzeigen

Hybrid666

Registriert seit: 15. Jul 2006
Ort: Erster Stock
250 Beiträge
 
Delphi 7 Personal
 
#1

Zugriffsverletzung

  Alt 4. Jun 2008, 11:30
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]
  Mit Zitat antworten Zitat