Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi eigene Klasse als array (https://www.delphipraxis.net/152220-eigene-klasse-als-array.html)

ichhabeeinproblem 15. Jun 2010 15:38

eigene Klasse als array
 
Also, ich habe ein Problem.

Erstens will ich eine eigene Klasse haben. Diese soll z.B. Einheit.Name, Einheit.Kosten enthalten.
Diese Einheiten will ich dann in einem Array anordnen, sodass ich mit einem Integer wert auf eine bestimmte Einheit aus dem Array zugreifen kann. Außerdem soll dass array später in einer Listbox angezeigt werden.

Ich hab im Moment keine Ahnung wie ich ein eigenes array von meiner Klasse hinbekomme. (bin ein wenig aus der Übung und hatte ne extrem schlechte Informatiklehrerin) Hoffentlich habe ich wenigstens an der richtigen STelle gepostet und nichts schwachsinniges geschrieben^^. Es wäre super wenn ich ein paar Codeansätze und Erklärungen von euch bekommen könnte.

DenSchub 15. Jun 2010 15:44

AW: eigene Klasse als array
 
Versuche, ein Array als Klassenvariable zu definieren, in dem du die genannten Daten speicherst.
Und gegen das "aus der Übung kommen" gibt es im Delphi-Treff schöne Tutorials und im Bereich OOP-Einstieg kann ich dir diese 35-seitige PDF empfehlen.

Google und die Forensuche hätten dir auch gerne geholfen.

Teekeks 15. Jun 2010 15:52

AW: eigene Klasse als array
 
Delphi-Quellcode:
type
  TMeineKlasse=class
    {bla bla blupp}
    {...}
  end;

  TMeineKlasseArray=array of TMeineKlasse;

var MeineKlassen:TMeineKlasseArray;

//Initialisierung des Arrays ganz zu beginn:
SetLength(MeineKlassen,0);

//Initialisierung eines neuen Array-Elementes:
SetLength(MeineKlassen,Length(MeineKlassen)+1);        //Array um ein Feld erweitern
Meineklassen[High(MeineKlassen)]:=TMeineKlasse.create; //Instanz erzeugen

himitsu 15. Jun 2010 15:54

AW: eigene Klasse als array
 
Sollen da einfach nur Daten gespeichert werden?

Wenn ja, warum dann nicht einen Record verwenden?

ichhabeeinproblem 15. Jun 2010 16:01

AW: eigene Klasse als array
 
Erstmal vielen Dank für die Antwort,
allerdings habe ich immer noch Probleme...
Ich hab mir die Links mal angeguckt, allerdings hab ich momentan nicht Lust und Zeit alles durchzulesen. Auch nen Stück Code, dass ich übernehem wollte hat nicht ganz funktioniert. Ich komm gerade nicht weiter. Ich schreib mal was ich versucht hab und hoffe, dass ihr mir was schreiben könnt was funktioniert.
Code:

type

Einheit = class
    private
      Name: string;
      Kosten: Integer;
    public
   end;

   Einheitenliste= array[1..5] of Einheit;

...

Einheitenliste[1].Name:='blabla';
Delphi motzt immer bei der letzten Zeile rum. Was hab ich falsch gemacht und wie gehts richtig. Am liebsten würde ich fertigen code bekommen.


(mit Google hatte ich gesucht)

himitsu 15. Jun 2010 16:03

AW: eigene Klasse als array
 
Siehe Post #3.

Wenn du Objekte verwenden willst, dann mußt du diese auch erstellen ( .Create ) und am Ende natürlich auch wieder freigeben ( .Free ) .

Bei einer Variante mir Records wäre sowas nicht nötig.

ichhabeeinproblem 15. Jun 2010 16:07

AW: eigene Klasse als array
 
oho, während ich meine antwort geschrieben habe ist ja ne menge neues gekommen. ich probier erstmal was rum und melde mich falls ich nochmal probleme hab. Nochmal vielen Dank an alle fleißigen Antworter. (Hätte nicht gedacht, dass alles so schnell geht).

himitsu 15. Jun 2010 16:14

AW: eigene Klasse als array
 
Zitat:

Zitat von ichhabeeinproblem (Beitrag 1029064)
(Hätte nicht gedacht, dass alles so schnell geht).

Tut uns Leid :lol:

PS: Du nutzt wirklich noch Delphi 2?
Ich glaub unser DP-Admin hatte noch ein paar Delphi 7 Serials und falls man einen netten Brief an den Embarcadero-Support schreibt, dann könnte man von denen noch einen Turbo Delphi-Serial aka Delphi 2006 bekommen.
(Setupdateien gibt's dann von uns)
Und abundzu gibt's auch mal was Günstiges bei eBay und Co. oder als Beilage in einigen Delphi-Büchern.

ichhabeeinproblem 15. Jun 2010 16:26

AW: eigene Klasse als array
 
Ein neues Problem hat sich aufgetan. Wenn ich auf Start drücke erscheint die Meldung:

Zugriffsverletzung bei Adresse 00403593 in Modul 'Project1.exe'
Schreiben von Adresse 00000004

Was zum Teufel heißt das?

-- Ich benutzte Delphi 3 unter Vista --

DenSchub 15. Jun 2010 16:28

AW: eigene Klasse als array
 
:wall:
Schau dir GENAU Post 3 an. Hast du die Klasse deklariert? Die Variable? Hast du entsprechend .create() und setLenght() gemacht?

ichhabeeinproblem 15. Jun 2010 16:31

AW: eigene Klasse als array
 
Code:
//Initialisierung des Arrays ganz zu beginn:
SetLength(MeineKlassen,0);

//Initialisierung eines neuen Array-Elementes:
SetLength(MeineKlassen,Length(MeineKlassen)+1); //Array um ein Feld erweitern
Meineklassen[High(MeineKlassen)]:=TMeineKlasse.create; //Instanz erzeugen
kommt das alles in den TForm1.FormCreate Teil?

DenSchub 15. Jun 2010 16:32

AW: eigene Klasse als array
 
Oder in jeder anderen procedure, ja ;-)

implementation 15. Jun 2010 16:33

AW: eigene Klasse als array
 
:wall:
Denk doch mal nach...
Der erste Teil kann in OnCreate, initialization oder was auch immer.
Der zweite Teil kommt dann dahin, wo du eine Einheit hinzufügen willst.

ichhabeeinproblem 15. Jun 2010 16:44

AW: eigene Klasse als array
 
jaja, ist jetzt so halbwegs klar, nur eine Fehlermeldung kommt: Inkompatible Typen: 'String' und 'Einheitenlisten'
dass kommt bei der zeile: SetLength(Einheitenliste1,0);
ich hab eigentlich den code aus dem dritten post nachgebaut mit meinen Bezeichnungen.

scrat1979 15. Jun 2010 16:51

AW: eigene Klasse als array
 
Warum statt einem Array nicht einfach eine ObjectList nehmen?!? Die ist doch genau für so einen Zweck gemacht (oder gabs die bei D2 nicht? Bin erst bei D7+ eingestiegen :) )

SCRaT

ichhabeeinproblem 15. Jun 2010 16:53

AW: eigene Klasse als array
 
was weiß ich obs die gibt... ich hab doch keine ahnung, aber ich such mal danach^^

scrat1979 15. Jun 2010 16:56

AW: eigene Klasse als array
 
Delphi-Quellcode:
  MeineObjectList : TObjectList;

  [...]

  MeineObjectList := TObjectList.Create;
  MeineObjectList.Add(MeineKlasse.Create);

  { Hier kann man zugreifen }
  TMeineKlasse(MeineObjectList[0]).Feldname := 'sdfsdf';

  { und zum schluß alles freigeben }
  for i := 0 to MeineObjectList.Count-1 do
    TMeineKlasse(MeineObjectList[i]).Free;

 MeineObjectList.Free;
... zumindest so ähnlich :)

ichhabeeinproblem 15. Jun 2010 17:07

AW: eigene Klasse als array
 
Weiß jemand obs das in Delphi 3 gibt? Ich habs gerade ausprobiert und da kam: Undefinierter Bezeichner: TObjectList . Heißt das die Idee mit Objectlist kann ich vergessen oder mir nen neueres Delphi besorgen?

DenSchub 15. Jun 2010 17:09

AW: eigene Klasse als array
 
Bei Google suchenTObjectList delphi3 ERSTES Ergebnis:
Zitat:

for example because you have Delphi 3 or 4, that don't know TObjectList

implementation 15. Jun 2010 17:50

AW: eigene Klasse als array
 
Zitat:

Zitat von ichhabeeinproblem (Beitrag 1029093)
Weiß jemand obs das in Delphi 3 gibt? Ich habs gerade ausprobiert und da kam: Undefinierter Bezeichner: TObjectList . Heißt das die Idee mit Objectlist kann ich vergessen oder mir nen neueres Delphi besorgen?

hmmm, du könntest dir TObjectList auch selber implementieren....:gruebel:

himitsu 15. Jun 2010 18:46

AW: eigene Klasse als array
 
Hmmmm, ich dachte in Delphi 3 gab es noch keine dynamischen Arrays?
(diese sollte es doch erst seit Delphi 4 geben)

Das würde dann auch erklären, warum SetLength nicht funktioniert.


PS: Darum ja auch der Tipp auf eine etwas "neuere" Delphiversion.

Delphi 3 war die zweite Win32-Version, ist inzwischen auch schon 13 Jahre alt und quasi noch auf dem Stand von Windows 95.

(vielleicht gibt es ja Ende des Jahres, mit Delphi 2011, endlich wieder eine günstigere oder gar kostenlose Version)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:02 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