![]() |
Zugriffsverletzung bei if in einer for-Schleife
Hi Leute,
ich hab folgenden Code:
Delphi-Quellcode:
:arrow:
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; 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??? :?: |
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. |
Re: Zugriffsverletzung bei if in einer for-Schleife
ich hab alle erstellt
|
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] |
Re: Zugriffsverletzung bei if in einer for-Schleife
Zitat:
|
Re: Zugriffsverletzung bei if in einer for-Schleife
Zitat:
|
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:
|
Re: Zugriffsverletzung bei if in einer for-Schleife
Delphi-Quellcode:
Dein Image1 aus der Interfacekonfiguration ist nicht gleich image[i+1] wenn i = 0.
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; 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 ![]() Eine andere Möglichkeit ist, Du erstellst Dir die Images zur Laufzeit. Dann kannst Du die Arraystruktur verwenden. Grüße Klaus |
Re: Zugriffsverletzung bei if in einer for-Schleife
Also so:
Delphi-Quellcode:
oder wie? :?: :wiejetzt:
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; |
Re: Zugriffsverletzung bei if in einer for-Schleife
Delphi-Quellcode:
So ungefähr, der Rest sollte dann einfach sein
for i:= 1 to 13 do begin
if (FindComponent("Image"+IntToStr(i)).Left = 96) and //... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:10 Uhr. |
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