Autor Beitrag
flowstar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 123

WinME
D6 Enterprise
BeitragVerfasst: So 25.01.04 16:40 
Hallo
Ich habe folgendes Problem:
Ich erstelle ein Object:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
type TGameButton = object
          X :0..1000;
          Y :0..1000;
          down : Boolean;
     end;


Un dann habe ich eine Variable von diesem Object:
ausblenden Delphi-Quelltext
1:
Test : TGameButton					


Nun will ich die Variable down ändern:
ausblenden Delphi-Quelltext
1:
Test.Down := true;					

Nun kommt aber immer die Fehlermeldung:
"Left side cannot be assigned to"

Ich weiß nicht wo das Problem ist. Bitte helft mir
Danke

PS: Ich benutze Delphi 6

Moderiert von user profile iconPeter Lustig: Topic Verschoben
MaxiTB
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 679

Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
BeitragVerfasst: So 25.01.04 17:51 
Soviel ich weiß, sind class members standardmäßig private. Mache es richtiger, dann schauts so aus (mit Verwendung von properties):

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
type TGameButton=object
 private:
  mX: integer; 
  mY: integer; 
  mDown: boolean; 

 public:
  
  property X: integer read mX write mX;
  property Y: integer read mY write mY;
  property Down: boolean read mDown write mDown;
end;


Besser ist natürlich noch, du verwendest eine Klasse (class) da objects eigentlich gar nicht mehr verwendet werden sollen (Rückwärtskompatiblität).

Das würde analog dann so aussehen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
type TGameButton=class
 private:
  mX: integer; 
  mY: integer; 
  mDown: boolean; 

 public:
  
  property X: integer read mX write mX;
  property Y: integer read mY write mY;
  property Down: boolean read mDown write mDown;
end;


Besser noch, du fügst einen constructor hinzu, wo default werde initialisiert werden:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
type TGameButton=class
 private:
  mX: integer; 
  mY: integer; 
  mDown: boolean; 

 public:
  
  constructor Create();

  property X: integer read mX write mX;
  property Y: integer read mY write mY;
  property Down: boolean read mDown write mDown;
end;

constructor TGameButton.Create();
begin
  mX:=0
  mY:=0
  mDown:=false; 
end;


Aber wie gesagt - der Fehler ist nur eine Zugriffsverletzung, weil standardmäßig members private sind.

_________________
Euer Mäxchen
Wer früher stirbt, ist länger tot.
MaxiTB
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 679

Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
BeitragVerfasst: So 25.01.04 18:00 
Moment ... alles nochmals zurück - ich hab schon wieder Pascal und C++ verwechselt. *g*

Nach ein bisserl nachstöbern würde ich schätzen, du mußt das object vorher explizit erstellen (Speicher reservieren). So oder so - ich empfehle dir meine Methode oben mit der Klasse trotzdem.

Aufruf dann:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
 lButton: TGameButton;
begin
 lButton:=TGameButton.Create();
 lButton.Down:=true;
 FreeAndNil(lButton);
end;

_________________
Euer Mäxchen
Wer früher stirbt, ist länger tot.
flowstar Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 123

WinME
D6 Enterprise
BeitragVerfasst: So 25.01.04 18:26 
Ich dachte eigentlich, dass objects nicht erst erstellt werden müssen.
Aber daran liegts auch nicht.
Auch wenn ich vorher
ausblenden Delphi-Quelltext
1:
Gamebutton := TGamebutton.Create;					

aufrufe kommt immernoch der gleiche Fehler.
flowstar Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 123

WinME
D6 Enterprise
BeitragVerfasst: So 25.01.04 18:36 
ok
hab den fehler gefunden. So wie ichs oben beschieben hab funktionierts wunderbar.

Ich hatte den Button nur als Konstante statt Variable deklariert.
MaxiTB
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 679

Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
BeitragVerfasst: So 25.01.04 18:36 
objects haben keinen constructor soweit ich weiß !

Die müssen irgendwie mit new und dispose angelegt werden ... aber da bin ich nicht so fit in der Sache, weil wie gesagt eher schlecht ist, wenn man sich das angewöhnt :wink: ; mein Tip bleibt: Verwende lieber Klassen, sind moderner, können mehr und haben auch noch den Vorteil, daß Borland sie weiterhin noch unterstützt !

Edit:

*lol* Okay - das ist auch eine Sache mit dem const. Trotzdem solltest du objects nicht mehr verwenden :wink: .

_________________
Euer Mäxchen
Wer früher stirbt, ist länger tot.