Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Zugriffsverletzung?? (https://www.delphipraxis.net/160025-zugriffsverletzung.html)

Michelle 23. Apr 2011 18:01

Zugriffsverletzung??
 
Hallo!

Ich habe ein Problem. Ich programmiere gerade ein Spiel, in dem eine Spielfigur Sterne einsammeln muss. Für die Sterne habe ich eine Klasse aufgemacht: TStar.

Code:
TStar = class
  Found : Boolean;
  PosX, PosY : integer;
  procedure Shine;

...

var
  Star : Array[1..20] of TStar; //es gibt in jedem Level 20 Sterne
Wenn das Level lädt möchte ich jedem Stern seine Position zuweisen (PosX und PosY), die im Memo-Feld MemoLoadPos steht.

Code:
Star[1].PosX := StrToInt(MemoLoadPos.Lines[2]);
Star[1].PosY := StrToInt(MemoLoadPos.Lines[3]);
Delphi sagt, das sei eine Zugriffsverletzung, aber ich bin mir nicht bewusst, irgendjemanden verletzt zu haben.

Vielen Dank im Voraus für eure Antworten! Ich hoffe, die Frage ist nicht zu dämlich, aber ich habe echt keine Ahnung!

mkinzler 23. Apr 2011 18:04

AW: Zugriffsverletzung??
 
Wieviel Zeilen hat das Memo? (.Lines ist 0-indiziert)

Michelle 23. Apr 2011 18:07

AW: Zugriffsverletzung??
 
Das Memo-Feld hat 22 Zeilen. Vorher lade ich eine txt-Datei in das Memo-Feld, in dem die Positionen der Spielfigur und der Sterne stehen.

mkinzler 23. Apr 2011 18:10

AW: Zugriffsverletzung??
 
Hast du die Instanzen der Klasse auch erzeugt?

Delphi-Quellcode:
Star[1] := TStar.Create;

Michelle 23. Apr 2011 18:19

AW: Zugriffsverletzung??
 
Das habe ich auch schon versucht. Ich rufe die Prozedure StarCreate in FormCreate auf
Ich habe eine Prozedur "FormCreate", während der ich die Prozedur StarCreate aufrufe. (In StarCreate macht er die Instanzen

Code:
procedure TFormLvl.StarCreate;
var i : integer;
begin
  for i := 1 to 20 do Star[i].Create;
  Star[1].PosX := ... //wie oben beschrieben

  ImgStar1.Left := Star[1].PosX;
  ImgStag1.Top := Star[1].PosY;
end;

Wie gesagt rufe ich die Prozedur in procedure FormCreate auf. Das macht er auch alles, aber die nächste ZEile im FormCreate wird als Fehler angezeigt. Dabei ist es egal, welche Zeile als nächstes im FormCreate steht. Delphi meldet immer noch eine Zugriffsverletzung und die nächste Zeile wird blau hinterlegt.

mkinzler 23. Apr 2011 18:22

AW: Zugriffsverletzung??
 
Füge mal begin..end ein
Delphi-Quellcode:
for i := 1 to 20 do Star[i].Create;
begin
  Star[1].PosX := ... //wie oben beschrieben

  ImgStar1.Left := Star[1].PosX
  ImgStag1.Top := Star[1].PosY;
end;

Michelle 23. Apr 2011 18:29

AW: Zugriffsverletzung??
 
Aber ich will doch nur das Star[i].Create 20 mal wiederholen. Das andere tipp ich 20 mal ein, weil ich ja jedes einzelne Bild verschieben will und ich keinen Array of Image habe sondern nur 20 einzelne Bilder ImgStar1, ImgStar2, ... Außerdem verwirrt mich diese komische Zugriffsverletzung. Delphi hat irgendein Problem mit meinem TStar bzw. den Instanzen Star[i]. Ich habe schon viel mit denen probiert aber immer gab es eine Zugriffsverletzung. Habe ich vielleicht im Aufbau etwas falsch gemacht oder muss man bei dem Create irgendetwas beachten?

mkinzler 23. Apr 2011 18:32

AW: Zugriffsverletzung??
 
Ist das Memo zu dieser Zeit schon gefüllt?

Michelle 23. Apr 2011 18:36

AW: Zugriffsverletzung??
 
Ja, ist es. Zu dem Zeitpunkt stehen 22 verschiedene ganzzahlige Werte im MemoFeld.

mkinzler 23. Apr 2011 18:38

AW: Zugriffsverletzung??
 
Poste mal den ganzen Quelltext


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:30 Uhr.
Seite 1 von 3  1 23      

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