Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Objekte gezielt aufrufen (https://www.delphipraxis.net/124246-objekte-gezielt-aufrufen.html)

Tod787 17. Nov 2008 14:34


Objekte gezielt aufrufen
 
Hallo, habe folgendes Problemchen:

Ich habe eine Klasse mit Feldern

Zitat:

TMyclass (Field1, Field2, Field3)
und mehrere Objekte davon

Zitat:

Objekt1 := TMyclass.create
Objekt2 := TMyclass.create mit Feldern
Object3 := TMyclase.create mit Feldern
Wenn ich jetzt eine Variable y habe die von 1-3 geht... Wie schaffe ich das richtige Objekt aufzurufen?

sprich wenn
Zitat:

y = 3
soll
Zitat:

Object3
aufgerufen werden. Da ich mehrere 100 Objekte habe möchte ich auf Verzweigungen verzichten.

Kurz: Gibt es eine Methode mit der man das Ganze so ähnlich schreiben kann wie
Zitat:

object + y.field1 := true;

Luckie 17. Nov 2008 14:38

Re: Objekte gezielt aufrufen
 
Pack deine Objekte in eine Delphi-Referenz durchsuchenTObjectList, dann kannst du sie über einen Index ansprechen.

Tod787 18. Nov 2008 08:11

Re: Objekte gezielt aufrufen
 
Erstmal danke!

Möchte mich an ein Beispiel hier aus dem Forum richten.

Delphi-Quellcode:
var
   liste:TObjectlist;
begin
  liste.add(TObjekt.create('Test1'));
  liste.add(TObjekt.create('Test2'));
end;
Bei mir kommt allerdings eine Fehlermeldung bei der Deklaration.
Was muss denn noch in den "Uses-Teil" damit TObjectlist deklariert werden kann?

Edit: Hat sich erledigt!

Delphi-Quellcode:
type TObjectList = class (Classes.TList);
Also nix uses ;)

automatix 18. Nov 2008 08:25

Re: Objekte gezielt aufrufen
 
Hallo!

Zuerst sollte irgendwo bevor auf die Liste zugegriffen wird ein
Delphi-Quellcode:
list := TObjectList.Create;
stehen.

Die uses Anweisung sollte um Contnrs erweitert werden.

Grüße

DeddyH 18. Nov 2008 08:26

Re: Objekte gezielt aufrufen
 
Delphi-Quellcode:
uses Contnrs;
Also doch uses ;)

Sherlock 18. Nov 2008 08:28

Re: Objekte gezielt aufrufen
 
Wenn in einem Beitrag etwas so hervorgehoben wird: Delphi-Referenz durchsuchenTObjectList, dann bedeutet es, daß Du dazu etwas in der Onlinehilfe Deines Delphi findest. Wenn du dort nach TObjectList suchst, dann findest Du ganz schnell alle nötigen Informationen. ;)

Sherlock

Tod787 18. Nov 2008 08:51

Re: Objekte gezielt aufrufen
 
Guten Morgen Sherlock, danke, hab es dann auch gemerkt :)

Jetzt hab ich allerdings doch noch ein Problem das in der Hilfe nciht geschildert wird.

Ich möchte nämlich in jeder Zeile der Liste ein Array of TObject haben.

Delphi-Quellcode:
Interface

(...)

type TObject = class(TObject)
    // Felder
    Field1: Single;
    Field2: Single;
    Field3: Integer;
    Field4: Integer;
end;

(...)

var

   MyObject1: array[0..20] of TObject;
   MyObject2: array[0..20] of TObject;
   MyObject3: array[0..20] of TObject;
   MyObject3: ...
   

   liste: TObjectlist;

Implemetation:
   MyObject1 := TObject.create;
   MyObject2 := TObject.create;
   MyObject3 := TObject.create;
   MyObject4 := ...

Wie kann ich das jetzt mit einer Objectlist realisieren?

Meine bescheide Anfänge wären:

Delphi-Quellcode:
Interface

(...)

type TObjectList = class (Classes.TList)
    // Felder
    Field1: Single;
    Field2: Single;
    Field3: Integer;
    Field4: Integer;
end;

(...)

var

   liste: TObjectlist;

Implemetation:

(...)   

begin
    liste.add(TObjekt.create('Test1'));
    liste.add(TObjekt.create('Test2'));
end;
Aber wie bekomme ich das mit Arrays hin?

Sherlock 18. Nov 2008 09:15

Re: Objekte gezielt aufrufen
 
Also, leg doch in die ObjectList weitere ObjectLists.

Sherlock

DeddyH 18. Nov 2008 09:20

Re: Objekte gezielt aufrufen
 
Und nimm die aus der Unit Contnrs statt einer eigenen Implementierung. Btw: "TObject" als eigener Klassenname ist mehr als unglücklich.

Sherlock 18. Nov 2008 09:26

Re: Objekte gezielt aufrufen
 
Delphi-Quellcode:
liste.add(TObjekt.create('Test1'));
liste.add(TObjekt.create('Test2'));
Allein wegen dieser beiden Zeilen ist das ganze bisher doch sowieso eher akademischer Natur.

;)

Sherlock

Tod787 18. Nov 2008 09:39

Re: Objekte gezielt aufrufen
 
Zitat:

Zitat von Sherlock
Delphi-Quellcode:
liste.add(TObjekt.create('Test1'));
liste.add(TObjekt.create('Test2'));
Allein wegen dieser beiden Zeilen ist das ganze bisher doch sowieso eher akademischer Natur.

;)

Sherlock

Sorry dir nicht folgen. Das ist ein Beispiel aus dem Forum.

Also eine Liste in einer Liste? Wie wird das denn realisiert? Und vor allem wie sprechen ich das Übergeordnete bzw. das Untergeordnete Objekt an?

Sherlock 18. Nov 2008 09:55

Re: Objekte gezielt aufrufen
 
TObjekt gibts halt nicht, das ist alles ;)

Sherlock

Sir Rufo 18. Nov 2008 10:12

Re: Objekte gezielt aufrufen
 
Ein Liste in einer Liste ... hmmm ... schauen wir uns das einmal an ...

Code:
Liste <--- TObjectList
+--Liste <--- TObjectList
|  +--Eintrag <--- TObject
|  +--Eintrag <--- TObject
+--Eintrag <--- TObject
+--Eintrag <--- TObject
+--Liste <--- TObjectList
   +--Eintrag <--- TObject
   +--Liste <--- TObjectList
      +Eintrag <--- TObject
Also als Ausgangspunkt haben wir eine TObjectList (klar, wir wollen ja Objekte in einer Liste haben)
Jetzt gibt es als gültige Listenelemente einmal TObject und weil wir ja nochmals Listen wollen auch TOobjectList.
Das geht, weil
Code:
TObject
+--TList
   +--TObjectList
TObjectList ein Nachfahr von TObject ist, und eine TObjectList kann alle Elemente Speichern, die sich irgendwie von TObject ableiten lassen.

Und das nennt man dann OOP.

Wie kann man prüfen, ob das gefundene Objekt eine Liste ist:

Delphi-Quellcode:
if Liste[ idx ] is TObjectList
then
  // Es ist eine Liste
else
  // Es ist nur ein schnödes Objekt
cu

Oliver


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