AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Objekt mit Objekt assoziieren?

Ein Thema von Mattze · begonnen am 12. Apr 2007 · letzter Beitrag vom 18. Apr 2007
Antwort Antwort
Seite 1 von 2  1 2      
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#1

Objekt mit Objekt assoziieren?

  Alt 12. Apr 2007, 15:23
Hallo,

ist es möglich zwei (oder mehrere) Objekte zu assoziieren?
Das ist eigentlich schon der allgemeinste Fall.
Mir geht es darum, einem TObject einen Satz von Eigenschaften anzuhängen, der immer präsent ist, wenn ich auf das Objekt zugreife.
Bei manchen Sachen (TStringlist usw.) gibt es ja direkt die Eigenschaft "Objekt", aber was kann man bei "richtigen" Objekten (TListbox usw.) machen - also nicht für das einzelne item, sondern für das Objekt insgeamt?
Würde ein pointer auf die "Zusatzstruktur" ins Tag reinpassen? Ginge das überhaupt?

Vielleicht hat sowas schon mal einer probiert. Über einen Tipp würde ich mich sehr freuen.

Gruß
Matthias
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Objekt mit Objekt assoziieren?

  Alt 12. Apr 2007, 15:25
Du kannst natürlich deine eigene Klasse von TStringList ableiten und beliebige Eigenschaft ergänzen.
in die Objects Eigenschaft der TStringList kannst du beliebige Objekte reinlegen, da ja vom Typ TObject. Zum Auslesen musst Du dann zurückcasten.
  Mit Zitat antworten Zitat
12. Apr 2007, 15:29
Dieses Thema wurde von "Jelly" von "Windows API / MS.NET Framework API" nach "Object-Pascal / Delphi-Language" verschoben.
Ist eine Objekt Frage
angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Objekt mit Objekt assoziieren?

  Alt 12. Apr 2007, 15:32
Hi,

ja, du kannst dir ja eine eigene Komponente erweitern, damit du diese Möglichkeiten nutzen kannst.

ungetestet:
Delphi-Quellcode:
type
    TNewListbox = class(TListBox);
       AStringList: TStringList;
end;

ich hoffe das hilft
Ansgar
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Objekt mit Objekt assoziieren?

  Alt 12. Apr 2007, 15:39
Hi,
wozu TListBox erweitern? Eine ListBox hat doch bereits eine TStrings (abstrakter Vorfahre von TStringList)-Eigenschaft. Und mithilfe von Delphi-Referenz durchsuchenAddObject kann man dann auch ganz einfach Objekte, beliebigen Typs hinzufügen:
Delphi-Quellcode:
type
  TMyCustomObject = class(TObject)
    // beliebige Eigenschaften, Methoden etc.
  end;

{ ... }

var
  AnCustomObject: TMyCustomObject;
begin
  AnCustomObject := TMyCustomObject.Create;
  MyListBox.Items.AddObject('Caption', AnCustomObject);
end;

var
  ASavedObject: TMyCustomObject;
begin
  ASavedObject := MyListBox.Items.Objects[{Hier kommt die ID des Eintrags}] as TMyCustomObject;
end;
Chris
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#6

Re: Objekt mit Objekt assoziieren?

  Alt 12. Apr 2007, 15:54
Hallo,

da habt Ihr mich falsch verstanden.
Das waren nur Beispiele. Um die geht es absolut nicht!
Ich will auch nicht etwas ableiten. Soviel ist es dann doch nicht wert.
Das ist viel zu kompliziert gedacht.
Ich bin nur zu faul, überall und ständig eine Variable zu deklarieren und neu zuzuweisen. Beispiel;

(Objekt ein allgemeines, Objekta und -b sind Objekte vom gleichen Typ, OV, OVa, OVb sind "Eigenschaftensätze" auch vom gleichen Typ)
Delphi-Quellcode:
if Objekt=Objekta then
   OV:=OVa
else
if Objekt=Objektb then
   OV:=OVb;
...
benutzt wird dann im Weiteren nur noch OV.

Wenn ich z. Bsp. ohne diese If-Konstruktion direkt "OV:=OVvonObjekt" schreiben oder im Weiteren dann nur "OVvonObjekt" benutzen könnte, fände ich das einfach schöner.

Gruß
Matthias

[edit=SirThornberry]Delphi-Tags gesetzt - nächstes mal bitte selbst machen - Mfg, SirThornberry[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Objekt mit Objekt assoziieren?

  Alt 12. Apr 2007, 16:49
eigentlich hast du dir die Frage schon selbst beantwortet.
Du willst das OVa mit Objekta assoziirt wird, OVb mit Objectb etc.
Hättest du uns das nicht verraten wüssten wir es nicht. Genau so ist es auch mit dem Programm. Irgendwo musst du erstmal festlegen welches Object zu welchem Gehört. Und genau das machst du ja hier:
Delphi-Quellcode:
if Objekt=Objekta then
   OV:=OVa
else if Objekt=Objektb then
   OV:=OVb;
Bei der Variante ist es natürlich so das jedesmal die ganzen Vergleiche abgearbeitet werden was CPU-Last verursacht.
Es geht also nur darum dafür eine bessere Lösung zu finden.
Wenn man jetzt wüsste um welche Objecte es speziell geht (TControl, TListbox ect.) und ob die Objekte sich gegenseitig referenzieren sollen könnte man nach einer besseren Lösung suchen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#8

Re: Objekt mit Objekt assoziieren?

  Alt 12. Apr 2007, 17:29
Wie wäre es mit einem Class helper?

Du könntest dir eine "Zusatzstrukturklasse" schreiben, die deine Daten enthält, und dann nen class helper, der TObject ein Feld dieser Klasse hinzufügt. Dann hat jede Klasse (und somit auch jedes Objekt) ein Feld dieser Klasse; jetzt kannst du das Zusatzobjekt erstellen, und an dein anderes Object anhängen ...

Oder habe ich das jetzt schon wieder nicht richtig verstanden?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Objekt mit Objekt assoziieren?

  Alt 12. Apr 2007, 17:38
sind Felder bei Classhelpern erlaubt? Wäre mir neu bzw. hab ichs noch nicht hinn bekommen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#10

Re: Objekt mit Objekt assoziieren?

  Alt 12. Apr 2007, 17:42
Hallo,

man, seid Ihr schnell!!! Danke!

Es ist ein VirtualStringtree.
Davon nutze ich zwei, die eigentlich genau das gleiche machen.
Sie unterscheiden sich eben nur in ein paar "Randbedingungen", die als Record für jeden daliegen.
(Die öffnen z. Bsp. Dateien und dazu brauchen sie den Dateinamen. Der ist natürlich unterschiedlich für beide. Aber vom Prinzip, wie er benutz wird usw. ist es halt das gleiche.)

Diesen Record möchte ich fest an den Tree binden.
Wenn ich z. Bsp. eine Procedure XYZ(VST: TVirtualStringtree...) möchte ich in der Prozedur nicht erst "umständlich" den zu benutzenden Record auswählen müssen. Besser wäre es, wenn ich gleich mit "VST.record" arbeiten könnte.
Wenn ich also z. Bsp. im Tag einen Pointer auf den Record ablegen könnte, könnte ich direkt auf den richtigen Record zugreifen und könnte mir die Auswahl vorher sparen.

Ich habe gerade den Classhelper gelesen! Dufte!!! Wenn ich das richtig kapiert habe, scheint es genau sowas zu sein! Von dem Begriff habe ich schon mal etwas gelesen, aber noch nie weiter daran gedacht. Ich weiß nicht, was das ist. Wie schreibt man sowas? Gibt es da irgendwo in der Literatur Beispiele?

Gruß
Matthias
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:42 Uhr.
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