Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - EAccessviolation-Problem beim Erzeugen von Objekt


IMM0rtalis - Di 26.05.09 17:10
Titel: EAccessviolation-Problem beim Erzeugen von Objekt
Hi, ich habe folgendes Problem:
Ich bekomme in der Zeile "Spielaufbau.Spielfeld[i].Feld := TShape.Create(MainForm);" immer eine EAccessviolation-Fehlermeldung und weiß nicht genau warum.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
unit UMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TMainForm = class(TForm)
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  TSpielfeldRecord = record
    Feld : TShape;
    Typ : string;
  end;

  TSpielaufbau = class(TObject)
  test : TShape;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    Spielfeld : Array[0..39of TSpielfeldRecord;
    procedure LoadSpielfeld;
  end;



var
  MainForm: TMainForm;
  Spielaufbau: TSpielaufbau;


implementation

{$R *.dfm}

procedure TMainForm.FormCreate(Sender: TObject);
  Begin
    //Starteigenschaften
    MainForm.Color := $d9f0ed;

    //Spielaufbau
    Spielaufbau.LoadSpielfeld;
  End;



procedure TSpielaufbau.LoadSpielfeld;
 var
 i : Integer;
  Begin
    //--
    for i:=0 to 39 do
      Begin
        Spielaufbau.Spielfeld[i].Feld := TShape.Create(MainForm);
        Spielaufbau.Spielfeld[i].Feld.Parent := MainForm;
        Spielaufbau.Spielfeld[i].Feld.Shape := stRoundRect;
        Spielaufbau.Spielfeld[i].Feld.Brush.Color := clWhite;
        Spielaufbau.Spielfeld[i].Feld.Width := 50;
        Spielaufbau.Spielfeld[i].Feld.Height := 50;
        // Posititionierung
        Spielaufbau.Spielfeld[i].Feld.Left := 10;
        Spielaufbau.Spielfeld[i].Feld.Top := 0;

        Spielaufbau.Spielfeld[i].Feld.Enabled := false;
        Spielaufbau.Spielfeld[i].Feld.Show; 

      End;

  End;


end.


Es hat glaube ich etwas mit dem Record oben zu tun... selbst wenn ich "Spielaufbau.Spielfeld[i].Typ" (beachte 'Typ') einen String zuweise, gibt es eine EAccessviolation...

Würdet ihr das überhaupt so machen? Aber ich mächte gerne den Array aufteilen.. :( da sollen ja noch mehr Sachen in den Record kommen...

Bitte um shcnelle Hilfe^^

thx schonmal

MfG


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Di 26.05.2009 um 17:32


jakobwenzel - Di 26.05.09 17:23

Nun ja, du musst das Spielfeld ja auch erstmal erzeuigen:

Delphi-Quelltext
1:
Spielfeld:=TSpielaufbau.Create;                    


IMM0rtalis - Di 26.05.09 17:29


Delphi-Quelltext
1:
Spielaufbau:=TSpielaufbau.Create;                    


O.o ^^ thx^^ wusste ich nicht... habe ja auch noch nie zwei Klassen in einer Unit erstellt.. :( bei zwei verschiedenen Units gabs das Problem irgendwie nicht^^

dankööö^^


jakobwenzel - Di 26.05.09 17:34

Jede Klasseninstanz muss irgendwann mal erstellt werden, ob in mehreren Units oder nicht. :wink:


jaenicke - Mi 27.05.09 00:44

Und auch wieder freigegeben werden! In FormDestroy muss deshalb noch

Delphi-Quelltext
1:
Spielaufbau.Free;