Autor Beitrag
Pepp3r
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82



BeitragVerfasst: Di 22.03.11 12:24 
hallo :)
schon wieder ein Problem. Ich bin von allen Wolken gefallen und kann mir nicht erklären warum folgendes nicht funktioniert:
rufe
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Start1Click(Sender: TObject);
begin
  Tetris := TTetris.Create(Form1);
end;

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: Di 22.03.11 12:34 
user profile iconPepp3r hat folgendes geschrieben Zum zitierten Posting springen:


ausblenden 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" ^^

_________________
Delphi: XE - OS: Windows 7 Professional x64
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82



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