Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Klasse/Methoden (https://www.delphipraxis.net/30616-klasse-methoden.html)

muster2002 27. Sep 2004 10:45


Klasse/Methoden
 
Habe folgendes Problem mit der Klasse vorgaben:

Wenn ich auf Gruppen zugreife, stürzt das Program ab.


Delphi-Quellcode:
unit UVorgaben;

interface
uses UNimm,Uform2;

type tvorgaben = class(tnimm)
     private
       
     public
       Gruppen : integer;
       Staebchen : integer;
       user : boolean;
       wert_vorgabe : boolean;
       constructor create;
       procedure set_gruppen(gruppenstr :string);
end;



implementation
uses sysutils;

constructor tvorgaben.create;
begin
  Gruppen:=0;
  Staebchen:=0;
  user:=false;
  wert_vorgabe:=false;
end;

procedure tvorgaben.set_gruppen(gruppenstr :string);
begin
  form2.edit1.text:= gruppenstr;
  gruppen:=strtoint(gruppenstr);
end;
end.
[edit=Luckie]Delphi-Tags eingefügt. Mfg, Luckie[/edit]

Luckie 27. Sep 2004 10:49

Re: Klasse/Methoden
 
Zitat:

Zitat von muster2002
Wenn ich auf Gruppen zugreife, stürzt das Program ab.

Mit was für einer Fehlermeldung?

Das
Delphi-Quellcode:
form2.edit1.text:= gruppenstr;
kommt mir spanisch vor. Sollte es nicht andersrum heißen?

Erzeugst du die Klasse auch irgendwo, bevor du sie benutzt? Eventuell hilft mein Klassen Tutorial: http://tutorials.luckie-online.de

muster2002 27. Sep 2004 10:52

Re: Klasse/Methoden
 
Das Textfeld ist nur zur Kontrolle, ob in Gruppen was drinnen steht.

In der nächsten Zeile stürzt es ab mit der Fehlermeldung, dass der Arbeitsspeicher leer ist.(FFFFFF)

Ich kann zip und pdf nicht öffnen, bin in der Schule.

sakura 27. Sep 2004 11:00

Re: Klasse/Methoden
 
Du hast da was vergessen :zwinker:
Code:
constructor tvorgaben.create;
begin
  [color=#f50000]inherited Create;[/color]
  Gruppen:=0;
  Staebchen:=0;
  user:=false;
  wert_vorgabe:=false;
end;
...:cat:...

oki 27. Sep 2004 11:06

Re: Klasse/Methoden
 
Hi muster2002,

so wie Luckie sagt, erst die Instanz kreieren!

Außerdem würde ich die Klasse klarer definieren.

Delphi-Quellcode:
type
  TVorgaben = class(tnimm)
  private
    FUser: boolean;
    FWert_Vorgabe: boolean;
    FStaebchen: integer;
    FGruppen: integer;
    procedure SetGruppen(const Value: integer);
    procedure SetStaebchen(const Value: integer);
    procedure SetUser(const Value: boolean);
    procedure SetWert_Vorgabe(const Value: boolean);

  public
    constructor create;
    property Gruppen : integer read FGruppen write SetGruppen;
    property Staebchen : integer read FStaebchen write SetStaebchen;
    property user : boolean read FUser write SetUser;
    property wert_vorgabe : boolean, read FWert_Vorgabe write SetWert_Vorgabe;
end;
Außerdem ist es nicht sehr elegant innerhalb einer Objectmethode auf eine globale Variable zuzugreifen.

Das tust du in deiner Set-Methode für Form2. Hier solltest du entweder eine Variable FForm2 in deiner Klasse halten und dieses Formular in deinem Create erzeugen, oder ganz darauf verzichten.

Gruß oki

muster2002 27. Sep 2004 11:18

Re: Klasse/Methoden
 
Mit Inherited funktioniert es nicht, denn ich greife auf die Eigenschaften des Vorfahren überhaupt nicht zu.


Das zweite ist nicht der Fehler!
Es werden nur Lese und Schreibrechte zugewiesen!
Bitte helft mir!

muster2002

oki 27. Sep 2004 11:34

Re: Klasse/Methoden
 
Hi,

inherited ist zwingend erforderlich!!!!

Da ist es egal, ob du auf Vorfahren zugreifst. Da du einen eigenen Konstruktor definierst mußt du inherited create aufrufen, sonst wird keine Instanz deines Objektes erstellt.

Also, mach es einfach mal und du wirst sehen das es funzt.

Gruß oki

Muetze1 27. Sep 2004 11:39

Re: Klasse/Methoden
 
Moin!

Ob du auf Eigenschaften des Vorfahren zugreifst oder nicht ist doch völligst egal. Das Inherited Create muss in den Constructor rein als erstes ...

Und bisher wissen wir nicht wie du auf die Klasse von aussen zugreifst, also ob du wirklich eine Instanz anlegst - was ich (und die anderen wohl auch) nicht glauben - weil sonst würde es nicht zu dieser Fehlermeldung kommen.

Delphi-Quellcode:
Var
  Vorgabe : TVorgaben;
Begin
  Vorgabe := TVorgaben.Create; // <--- !!!!

  Vorgabe.Staebchen := 4;
  Vorgabe.Gruppen  := 17;
 
  Vorgabe.Free;
End;
MfG
Muetze1

muster2002 27. Sep 2004 21:36

Re: Klasse/Methoden
 
Ich habe es mit inherited ausprobiert, es liegt nicht daran.
Aber ich lasse es natürlich drin.

Ich habe 2 Formulare angelegt und 2 Units.
Ich habe die Klasse Vorgabe als Nachfahre von Nimm deklariert.

Ich habe die Instanz erzeugt, denn ich habe auf sie zugegriffen, indem ich einfach einen Wert aus der Combobox einem Textfeld zugewiesen habe.

Also muss es doch die Klasse Vorfahren geben.


Aus dem Quelltext von oben:

form2.edit1.text:= gruppenstr;


Erst jetzt stürzt es ab:

gruppen:=strtoint(gruppenstr);


muster2002

P.s. Sorry, für meinen Ausdruck, aber ich bin nicht im Deutsch Leistungskurs.

Nothine 27. Sep 2004 21:44

Re: Klasse/Methoden
 
Zitat:

Zitat von muster2002
Das Textfeld ist nur zur Kontrolle, ob in Gruppen was drinnen steht.

wenn du unbedingt kontrollieren willst wäre sowas wahrscheinlich einfacher:
Delphi-Quellcode:
uses Dialogs;

...

procedure tvorgaben.set_gruppen(gruppenstr: string);
begin
  ShowMessage(gruppenstr); //keine globalen Variablen, weniger Probleme
  Gruppen := StrToIntDef(gruppenstr,0); //nicht jeder string-wert ist ein gültiger Integer
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:18 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz