Problem = TWinControl-Eigenschaften in Instanzvariablen
spacer
Autor Nachricht
Pepp3r
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 74



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 markieren
1:
2:
3:
4:
procedure TForm1.Start1Click(Sender: TObject);
begin
Tetris := TTetris.Create(Form1);
end;

ausblenden Delphi-Quelltext markieren
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:
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 15841
Erhaltene Danke: 741

XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, 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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 724
Erhaltene Danke: 53

Win XP professional, Win 7 Professional x64, Ubuntu
Delphi 5, Delphi 2005 Personal, Delphi 2006, Delphi XE, C++ Builder 5, PHP, SAP R/3
BeitragVerfasst: Di 22.03.11 12:34 
user profile iconPepp3r hat folgendes geschrieben Zum zitierten Posting springen:


ausblenden Delphi-Quelltext markieren
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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 15841
Erhaltene Danke: 741

XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, 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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Pepp3r Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 74



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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home