Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Obekt-Erstellung funktioniert nicht (https://www.delphipraxis.net/149995-obekt-erstellung-funktioniert-nicht.html)

zod1ac 4. Apr 2010 23:12


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

Panthrax 4. Apr 2010 23:23

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.

Luckie 4. Apr 2010 23:24

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.

DeddyH 4. Apr 2010 23:35

Re: Obekt-Erstellung funktioniert nicht
 
Zitat:

Zitat von Panthrax
Das Ereignis TForm1.OnCreate ist nicht zugewiesen. Beim Formular im Objektinspektor einfach noch einmal beim Eintrag für das Ereignis OnCreate doppelklicken.

Dazu zusätzlich noch 2 Dinge: der Destruktor Destroy sollte immer überschrieben werden (Stichwort override). Und wenn Du schon eine Getter-Methode hast (getAugen) würde ich an Deiner Stelle gleich noch eine (ReadOnly-)Property Augen einführen.

zod1ac 4. Apr 2010 23:54

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.

DeddyH 4. Apr 2010 23:57

Re: Obekt-Erstellung funktioniert nicht
 
Kein Problem, aber die Property scheinst Du nicht eingerichtet zu haben ;)

zod1ac 5. Apr 2010 00:10

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

DeddyH 5. Apr 2010 00:17

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:
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;
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.

himitsu 5. Apr 2010 06:17

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

zod1ac 5. Apr 2010 20:26

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:
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 ;
Wie kann ich es nun so einbauen. dass sobald Bank=0, der Button nicht mehr klickbar ist, also z.B. auch Visible:=false.

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 14:41 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz