Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

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)

TurboMartin 16. Mai 2006 15:30


Zugriffsverletzung bei if in einer for-Schleife
 
Hi Leute,
ich hab folgenden Code:
Delphi-Quellcode:
var I: Integer;
    Image: Array[1..13] of TImage;
begin
  for I := 0 to 12 do
    if (Image[I+1].Top = 96) and (Image[I+1].Left = 8) then Image[I+1].Top := 48
    else if (Image[I+1].Top = 48) and (Image[I+1].Left = 536) then Image[I+1].Top := 96
         else if (Image[I+1].Top = 96) and (Image[I+1].Left = 536) then Image[I+1].Top := 144
              else if (Image[I+1].Top = 144) and (Image[I+1].Left >= 9)then Image[I+1].Left := Image[I+1].Left - 8
                   else if (Image[I+1].Top = 144) and (Image[I+1].Left = 8) then Image[I+1].Top := 96
                        else Image[I+1].Left := Image[I+1].Left + 8;

end;
:arrow:
allerdings krieg ich in der forschleife schon beim zweiten mal Image[I+1] (Image[I+1].Left = 8) eine zugriffsverletzung, die sich dauernd wiederholt(durch die schleife). was mache ich falsch??? :?:

BenjaminH 16. Mai 2006 15:33

Re: Zugriffsverletzung bei if in einer for-Schleife
 
Kanns sein, dass du die Objekte nicht erstellt hast?
Da sollte für jedes Objekt eine Instanz von TImage zugewiesen werden.

TurboMartin 16. Mai 2006 15:34

Re: Zugriffsverletzung bei if in einer for-Schleife
 
ich hab alle erstellt

Klaus01 16. Mai 2006 15:35

Re: Zugriffsverletzung bei if in einer for-Schleife
 
aehm, hast Du schonmal irgendwo

Image[0].create oder ähnliches gemacht

ansonsten sind Deine Instanzen von TImage nicht existend.


Zeig uns doch mal etwas mehr Code.
So ist anzunehmen das sich alles in einer Prozedur/Methode abspielt
und Du mit einem lokalem Array of TImage arbeitest.

Grüße
Klaus

[edit] war wieder einer schneller, aber sehe ich auch so [/edit]

mkinzler 16. Mai 2006 15:38

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

ich hab alle erstellt
Wo? Kann es sein das du Image doppelt deklariert hast? Du verwendest aber die lokal definierte Version und diese hat lauter leere Referenzen. Falls du auf höhrerer Ebene einen anderen Array mit dem Namen Image hast, entferne die lokale Version.

BenjaminH 16. Mai 2006 15:38

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

Zitat von TurboMartin
ich hab alle erstellt

Das sieht in deinem Code da oben aber nicht so aus...

TurboMartin 16. Mai 2006 17:48

Re: Zugriffsverletzung bei if in einer for-Schleife
 
Liste der Anhänge anzeigen (Anzahl: 1)
also, bisher war nicht dabei, drum hier das ganze. also das ding ist für physik :mrgreen:

Klaus01 16. Mai 2006 17:56

Re: Zugriffsverletzung bei if in einer for-Schleife
 
Delphi-Quellcode:
 TForm1 = class(TForm)
    Timer1: TTimer;
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Panel4: TPanel;
    Panel5: TPanel;
    Panel6: TPanel;
    Panel7: TPanel;
    Panel8: TPanel;
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Image4: TImage;
    Image5: TImage;
    Image6: TImage;
    Image7: TImage;
    Image8: TImage;
    Image9: TImage;
    Image10: TImage;
    Image11: TImage;
    Image12: TImage;
    Image13: TImage;
    Image14: TImage;
    Image15: TImage;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
var I: Integer;
    Image: Array[1..13] of TImage;
begin
  for I := 0 to 12 do
    if (Image[I+1].Top = 96) and (Image[I+1].Left = 8) then Image[I+1].Top := 48
    else if (Image[I+1].Top = 48) and (Image[I+1].Left = 536) then Image[I+1].Top := 96
         else if (Image[I+1].Top = 96) and (Image[I+1].Left = 536) then Image[I+1].Top := 144
              else if (Image[I+1].Top = 144) and (Image[I+1].Left >= 9)then Image[I+1].Left := Image[I+1].Left - 8
                   else if (Image[I+1].Top = 144) and (Image[I+1].Left = 8) then Image[I+1].Top := 96
                        else Image[I+1].Left := Image[I+1].Left + 8;

end;
Dein Image1 aus der Interfacekonfiguration ist nicht gleich image[i+1] wenn i = 0.
Das mußt Du dann anders lösen, wenn ich mich recht erinnere geht das mit FindComponent,
aber da wissen andere besser drüber Bescheid.
Kannst Dir mal diesen Thread anschauen, ähnliches Problem wie Deines http://www.delphipraxis.net/internal...=findcomponent

Eine andere Möglichkeit ist, Du erstellst Dir die Images zur Laufzeit.
Dann kannst Du die Arraystruktur verwenden.

Grüße
Klaus

TurboMartin 16. Mai 2006 20:00

Re: Zugriffsverletzung bei if in einer for-Schleife
 
Also so:
Delphi-Quellcode:
var I: Integer;
    Image: Array[1..13] of TImage;
begin
  for I := 0 to 12 do
    if (FindComponent(Image[I+1]).Top = 96) and (FindComponent(Image[I+1])Left = 8) then FindComponent(Image[I+1]).Top := 48 
    else if (FindComponent(Image[I+1]).Top = 48) and (FindComponent(Image[I+1]).Left = 536) then FindComponent(Image[I+1]).Top := 96 
         else if (FindComponent(Image[I+1]).Top = 96) and (FindComponent(Image[I+1]).Left = 536) then FindComponent(Image[I+1]).Top := 144 
              else if (FindComponent(Image[I+1]).Top = 144) and (FindComponent(Image[I+1]).Left >= 9)then FindComponent(Image[I+1]).Left := FindComponent(Image[I+1]).Left - 8 
                   else if (FindComponent(Image[I+1]).Top = 144) and (FindComponent(Image[I+1]).Left = 8) then FindComponent(Image[I+1]).Top := 96 
                        else FindComponent(Image[I+1]).Left := FindComponent(Image[I+1]).Left + 8;

end;
oder wie? :?: :wiejetzt:

Phistev 16. Mai 2006 20:08

Re: Zugriffsverletzung bei if in einer for-Schleife
 
Delphi-Quellcode:
for i:= 1 to 13 do begin
  if (FindComponent("Image"+IntToStr(i)).Left = 96) and //...
So ungefähr, der Rest sollte dann einfach sein


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:10 Uhr.
Seite 1 von 4  1 23     Letzte »    

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