Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zugriffsverletzung bei if in einer for-Schleife (https://www.delphipraxis.net/69526-zugriffsverletzung-bei-if-einer-schleife.html)

Helmi 16. Mai 2006 20:11

Re: Zugriffsverletzung bei if in einer for-Schleife
 
sie meinten es so:

Delphi-Quellcode:
var I: Integer;

begin
  for I := 1 to 13 do
    begin
      with (FindComponent('Image' + IntToStr(I)) as TImage) do
        begin
          if (Top = 96) and (Left = 8) then
            Top := 48
          else
            if (Top = 48) and (Left = 536) then
              Top := 96
            else
              if (Top = 96) and (Left = 536) then
                Top := 144
              else
                if (Top = 144) and (Left >= 9) then
                  Left := Left - 8
                else
                  if (Top = 144) and (Left = 8) then
                    Top := 96
                  else Left := Left + 8;
        end;
    end;
end;
Ich hab mir erlaubt es zu formatieren

TurboMartin 18. Mai 2006 16:56

Re: Zugriffsverletzung bei if in einer for-Schleife
 
danke dafür, aber ich hab jetzt wieder ein problem.
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var I: Integer;
    J: Integer;
begin
  for I := 1 to 13 do
    begin

      if (for J := 1 to 13 do
         begin
           (((FindComponent('Image' + IntToStr(J)) as TImage).Left) >= ((FindComponent('Image' + IntToStr(I)) as TImage).Left + 8))
         end;) then ((FindComponent('Image' + IntToStr(I)) as TImage).Left) := (FindComponent('Image' + IntToStr(I)) as TImage).Left
         else if ((FindComponent('Image' + IntToStr(I)) as TImage).Top = 96) and ((FindComponent('Image' + IntToStr(I)) as TImage).Left = 8) then
            (FindComponent('Image' + IntToStr(I)) as TImage).Top := 48
          else
            if ((FindComponent('Image' + IntToStr(I)) as TImage).Top = 48) and ((FindComponent('Image' + IntToStr(I)) as TImage).Left = 536) then
              (FindComponent('Image' + IntToStr(I)) as TImage).Top := 96
            else
              if ((FindComponent('Image' + IntToStr(I)) as TImage).Top = 96) and ((FindComponent('Image' + IntToStr(I)) as TImage).Left = 536) then
                (FindComponent('Image' + IntToStr(I)) as TImage).Top := 144
              else
                if ((FindComponent('Image' + IntToStr(I)) as TImage).Top = 144) and ((FindComponent('Image' + IntToStr(I)) as TImage).Left >= 9) then
                  (FindComponent('Image' + IntToStr(I)) as TImage).Left := (FindComponent('Image' + IntToStr(I)) as TImage).Left - 8
                else
                  if ((FindComponent('Image' + IntToStr(I)) as TImage).Top = 144) and ((FindComponent('Image' + IntToStr(I)) as TImage).Left = 8) then
                    (FindComponent('Image' + IntToStr(I)) as TImage).Top := 96
                  else (FindComponent('Image' + IntToStr(I)) as TImage).Left := (FindComponent('Image' + IntToStr(I)) as TImage).Left + 8;
     end;
end;
beim end fon der forschleife(die mit J), komm der error:
Statement expected, but expression of 'Boolean' found.
was muss ich ändern?

Flare 18. Mai 2006 17:00

Re: Zugriffsverletzung bei if in einer for-Schleife
 
Delphi-Quellcode:
if (for J := 1 to 13 do
Da ist das "if (" zu viel...wenn das weg ist müsste es gehen!


Flare

TeronG 18. Mai 2006 17:05

Re: Zugriffsverletzung bei if in einer for-Schleife
 
btw: FindComponent würd ich nicht in nen Timer packen. (FindComponent braucht seine Zeit)
Such dir deine Bildchen beim Start (OnCreate) mit FindComponent zusammen und wirf sie dann in dein/ein Array.
Danach kannste gemütlich/einfach mit dem array arbeiten.


Delphi-Quellcode:
For i := 1 To 13  Do bildchen[i] := TImage(FindComponent('Image' + IntToStr(i)));

TurboMartin 18. Mai 2006 17:13

Re: Zugriffsverletzung bei if in einer for-Schleife
 
@Flare: aber ich muss es prüfen.
wie soll man sonst sehen, ob wenn er sich bewegt nicht ein anderes bild "rammt"?

--
@TeronG: aber wie bringe ich die for schleife unter?

Flare 18. Mai 2006 17:15

Re: Zugriffsverletzung bei if in einer for-Schleife
 
Dann solltest du überlegen, ob diese Art von Kollisionsabfrage eine geeignete ist :mrgreen:
Die abfrage sollte also nicht genau an dieser Stelle stehen...


Flare

TurboMartin 18. Mai 2006 17:17

Re: Zugriffsverletzung bei if in einer for-Schleife
 
wieso nicht? wenn es sich bewegt hat auf ein anderes ist es zu spät. :wiejetzt: :shock: :?

Flare 18. Mai 2006 17:19

Re: Zugriffsverletzung bei if in einer for-Schleife
 
Ich kapier gerade nicht, wie du mit diesem Fetzen Quellcode eine Kollisionsabfrage realisieren möchtest. Immerhin werden die Images auf jeden Fall bewegt, egal ob die sich übershcneiden oder nicht. Von der Kollisionsabfrage hast du bisher noch nichts reingebracht.


Flare

TeronG 18. Mai 2006 17:23

Re: Zugriffsverletzung bei if in einer for-Schleife
 
Zitat:

Zitat von TurboMartin
@TeronG: aber wie bringe ich die for schleife unter?

erstmal machste dein array global
Delphi-Quellcode:
var
  Form1: TForm1;
  Image : array [1..5] of TImage;
und dann die for schleife einfach in FormCreate "reinwerfen" ...

:gruebel: das sollts eigentlich gewesen sein ..

TurboMartin 18. Mai 2006 17:25

Re: Zugriffsverletzung bei if in einer for-Schleife
 
und wie würdest du die abfrage machen? ich weiß nicht, wie sonnst. :wiejetzt:
@TeronG: die soll ja immer ausgeführt werden die schleife. die bilder sollen ja nicht aufeinander"fahren".


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:13 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz