Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - [VisualCLX] Problem = TWinControl-Eigenschaften in Instanzvariablen


Pepp3r - Di 22.03.11 12:24
Titel: Problem = TWinControl-Eigenschaften in Instanzvariablen
hallo :)
schon wieder ein Problem. Ich bin von allen Wolken gefallen und kann mir nicht erklären warum folgendes nicht funktioniert:
rufe

Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Start1Click(Sender: TObject);
begin
  Tetris := TTetris.Create(Form1);
end;


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
  TTetris = class
  private
    sizeStein: Integer;
    sizeFeldX: Integer;
    sizeFeldY: Integer;
  public
    //...
  end;

constructor TTetris.Create(owner: TWinControl);
begin
  Tetris.PaintSpielfeld(owner);
end;
  //...
procedure TTetris.PaintSpielfeld(eltern: TWinControl);
begin
  sizeStein := (eltern.Height) div 24;   //klappt net
  sizeFeldX := sizeStein*10+1+sizeStein;
  sizeFeldY := sizeStein*20+1+sizeStein;

end;
  //..

auf.

Bekomme einen runtimefehler "Access voilation" :shock:


jaenicke - Di 22.03.11 12:32

Wo auch immer das deklariert ist, Tetris ist im Konstruktor noch nicht zugewiesen. Du meinst sicher Self, außerdem kannst du das weglassen.


Horschdware - Di 22.03.11 12:34

user profile iconPepp3r hat folgendes geschrieben Zum zitierten Posting springen:



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
  TTetris = class
  private
    sizeStein: Integer;
    sizeFeldX: Integer;
    sizeFeldY: Integer;
  public
    //...
  end;

constructor TTetris.Create(owner: TWinControl);
begin
  Tetris.PaintSpielfeld(owner);
end;



Den markierten Teil entfernen und schon gehts :-)

Du referenzierst ja auf "this" und nicht auf "Tetris"...

edit: Ach, in Delphi heisst das ja "self" ^^


jaenicke - Di 22.03.11 12:37

Davon abgesehen ist das auch ein wenig ein Fehler im Konzept. Das erzeugte Objekt wird vom Formular benutzt, deshalb gehört die Referenz auch unter private dort hin.

Dann hätte der Fehler gar nicht passieren können.


Pepp3r - Di 22.03.11 12:38

jap danke. Ist natürlich doof die eigene Klasse beim createn aufzu rufen. :lol:
man hat gelernt... :D