![]() |
Obekt-Erstellung funktioniert nicht
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo liebe Delphi-Praxis Gemeinde,
ich habe ein kleines Problem mit den Objekten bei Delphi. Vor kurzem habe ich einen Einstieg in die Objektorientierung gemacht und wollte ein simples Programm schreiben. Nach Betätigen des Buttons, werden drei zufällige Würfel generiert. Also Würfelaugen, die dann auf Panels ausgegeben werden. Ich habe meinen kompletten Projektordner im Anhang, nach dem Compilen kommen keine Fehler, doch beim ButtonCLick kommt ein Fehler "Access violation....". Ich hoffe ihr könnt mir helfen. Danke schonmal im Voraus mfg |
Re: Obekt-Erstellung funktioniert nicht
Das Ereignis TForm1.OnCreate ist nicht zugewiesen. Beim Formular im Objektinspektor einfach noch einmal beim Eintrag für das Ereignis OnCreate doppelklicken.
|
Re: Obekt-Erstellung funktioniert nicht
Bitte poste hier doch den relevanten Quellcode. Sich erst die Datei runterladen, das Archiv zu entpacken, die Datei zu öffnen, ist sehr umständlich. Da wird sich kaum einer die Mühe machen, dir helfen zu wollen.
|
Re: Obekt-Erstellung funktioniert nicht
Zitat:
|
Re: Obekt-Erstellung funktioniert nicht
OnCreate hat super geklappt, und override hab ich nun auch dazugefügt. Danke Panthrax und DeddyH ;)
Zur späten Stunde noch Hilfe erhalten--> TOP! :) Danke nochmals, Gute Nacht. |
Re: Obekt-Erstellung funktioniert nicht
Kein Problem, aber die Property scheinst Du nicht eingerichtet zu haben ;)
|
Re: Obekt-Erstellung funktioniert nicht
Ich muss zu meiner Schande gestehen, dass ich nicht ganz weiß, was das ist :oops:
Wenn du es mir erklären würdest, werde ich es selbstverständlich mit einbauen. mfg |
Re: Obekt-Erstellung funktioniert nicht
Alles, was Du z.B. im OI im "linken" Reiter sehen kannst, sind Properties(Eigenschaften). Eine solche zu erstellen ist ganz einfach. Für Deinen Fall:
Delphi-Quellcode:
Statt nun explizit GetAugen aufrufen zu müssen, kannst Du nun über TWuerfel.Augen direkt auf die Eigenschaft zugreifen, der Rest läuft intern ab.
type
TWuerfel = class private FAugen: integer; //privates Feld function GetAugen: integer; //Zugriffsmethode zum Auslesen (Getter) public property Augen: integer read GetAugen; //ReadOnly-Property, da kein write vorhanden end; ... function TWuerfel.GetAugen: integer; begin Result := FAugen; end; |
Re: Obekt-Erstellung funktioniert nicht
Wozu erstellst du diese Augen dynamisch?
Erstelle schon alle Augen im OI und blende die Nichtbenötigten über .Visible (oder .Hide und .Show) aus/ein. Achso, da gibt es ja noch garkeine Augen :oops: PS: Das nächste Mal einfach erstmal schauen, ob und wann deine Prozeduren aufgerufen werden. z.B. Haltepunkte in alle wichtige Prozeduren legen und/oder eben auch mal im OI nachsehn. Beim Debuggen von Button1Click hätte auch noch auffallen können, daß wuerfelo noch NIL ist und somit nie erstellt wurde. (Das geht hier ganz gut, daß Objektvariablen und globale Variablen, wie z.B. wuerfelo automatisch erstmal mit Nullen initialisiert werden) wuerfelo solltest du uch besser in den Private-Abschnitt der Form verschieben. > globale Variablen sind "böse" Darum wird auch immer wieder im Forum darauf hingewiesen, daß Variablen am Besten so nah wie möglich da deklariert werden sollen, wo sie auch verwendet werden. wuerfelo verwendest du nur innerhalb deiner Form und es wird dort auch erstellt und vernichtet, demnach gehört es quasi auch zur Form und paßt somit sehr gut in
Delphi-Quellcode:
TForm1 = class(TForm)
... private { Private declarations } wuerfelo: TWuerfel; public |
Re: Obekt-Erstellung funktioniert nicht
Vielen Dank,
so scheint es auch einfacher zu sein. :) Aber nun noch eine kleine Frage. Bei mir im Programm wird die Eigenschaft "Visible" irgendwie falsch verstanden.
Delphi-Quellcode:
Wie kann ich es nun so einbauen. dass sobald Bank=0, der Button nicht mehr klickbar ist, also z.B. auch Visible:=false.
procedure TForm1.Button1Click(Sender: TObject);
begin repeat bank:=bank-1; panel5.Caption:=IntToStr(bank); if bank=0 then ShowMessage('Sie haben verloren'+ #13 + 'Starten Sie ein neues Spiel!'); until bank>=0 ; Wenn ich es unten in den Code schreibe, wird der Button sofort nach dem ersten Drücken nicht mehr sichtbar. Was genau mache ich falsch? Und nochmal ein ganz großes Lob an euch, sehr einsteigerfreundliches Board hier und nette COmmunity ;). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz