AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Komponente mit Objekten, die Eigenschaften der Komponente benötigen
Thema durchsuchen
Ansicht
Themen-Optionen

Komponente mit Objekten, die Eigenschaften der Komponente benötigen

Ein Thema von Captnemo · begonnen am 18. Sep 2014 · letzter Beitrag vom 19. Sep 2014
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#1

Komponente mit Objekten, die Eigenschaften der Komponente benötigen

  Alt 18. Sep 2014, 14:49
Hi,

der Titel ist etwas unglücklich, aber ich weiß nicht, wie ich meine Frage in einem Satz darstellen soll.

Ich schreibe mir grad eine grafische Komponente zur Darstellung eines Urlaubsplans.

In dieser Komponente erzeuge ich mir eine ObjectList mit Eintragstype (Urlaub, Krank, Lehrgang, ...) die dann solche Sachen wie Farbe usw. beinhalten.

Dann soll diese Komponente natürlich auch eine Objectlist für die eigentlichen Einträge haben, die dann z.B. Beginn, Ende, usw. beinhalten. Und dann soll dieses Entrags-Object auch eine Eigenschaft haben, die den Eintragstyp festlegt. Diese soll aber aus der oben genannten Objectliste stammen.

Wie kann man so was machen? Ich müsste ja im Create des Eintrags die Eintragstypliste übergeben. Mir ist nur nicht ganz klar, wie ich das machen könnte. Kann mir da einer auf die Sprünge helfen?
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#2

AW: Komponente mit Objekten, die Eigenschaften der Komponente benötigen

  Alt 18. Sep 2014, 15:05
Deine Eintragstypen sind ja soetwas wie Templates. Tolle Sache!

Dafür gibt es eine Klasse, die diese Templates verwaltet (TemplateManager). Die Klasse hat eine Methode
Delphi-Quellcode:
//
Function Template(aTemplateType : TTemplateType) : TLayoutTemplate;
//
Der Urlaubsplan instantiiert einen TemplateManager. Im OI kannst Du die Farben für die einzelnen Eintragstypen (TTemplateType) dann konfigurieren.

Nun erstellst Du einen Eintrag im Urlaubsplan. Dem Eintrag gibst Du den TemplateManager mit. Nun kannst Du im Eintrag einen Eintragstyp (TTemplateType) auswählen (Urlaub, Krankheit, Blaumachen etc.). Der Eintrag holt sich dann zum Zeichnen (also in seinem Paint z.B.) vom Templatemanager jeweils das entsprechende TLayoutTemplate ab und zeichnet sich entsprechend.

So kannst Du das Layout ändern oder den Eintragstyp und hast immer sofort alles richtig dargestellt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: Komponente mit Objekten, die Eigenschaften der Komponente benötigen

  Alt 18. Sep 2014, 15:09
Am Einfachsten geht das wohl mit einer Collection.


Ich glaub so ging das in etwa
Delphi-Quellcode:
TDeineDaten = class(TCollectionItem)
  property Name: string; // z.B. 'Urlaub'
  property Farbe: TColor;
end;

TDeinUrlaubsplan = class(TComponent)
  property Eintragstypen: TCollection read FEintragstypen write FEintragstypen;
end;

//im Contructor
FEintragstypen := TCollection.Create(TDeineDaten);
Eventuell mußte man noch den Property-Reader dafür schreiben, damit die Daten in der DFM landen, falls das nicht automatisch funktioniert.
(notfalls mal bei TListView.Columns abgucken)



Und für Collections gibt es bereits einen fertigen Standard-Property-Editor, für das Hinzufügen/Bearbeiten von Items.
$2B or not $2B

Geändert von himitsu (18. Sep 2014 um 15:12 Uhr)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Komponente mit Objekten, die Eigenschaften der Komponente benötigen

  Alt 18. Sep 2014, 15:39
Wie wärs ganz klassisch? Ich würde mir eine Basisklasse mit virtuell abstrakten Methoden anlegen. TUrlaub, TKrank, TLehrgang usw. sind davon abgeleitet und überschreiben diese Methoden. Diese Klassen verfügen über eine Methode Draw. Dann gibt es eine Liste in der diese Items hinzugefügt werden können. Diese Liste hat ebenfalls eine Methode Draw. Zum Hinzufügen von Items aus anderen Listen kann die Liste zum Beispiel Methoden AddFromEintragsList o.ä. haben oder es gibt Konvertierungsmöglichkeiten EintragItemToListItem. Je nachdem welches Create ein Item verwendet weiß die Liste so "ganz von allein" ob es sich um Urlaub, Krank, oder Lehrgang handelt.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#5

AW: Komponente mit Objekten, die Eigenschaften der Komponente benötigen

  Alt 18. Sep 2014, 15:42
Jo, und nun möchte man ausnahmsweise den Eintragstypen 'Betriebsausflug' hinzufügen. Leider muss man bei deiner Lösung dann an den Quelltext ran.
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Komponente mit Objekten, die Eigenschaften der Komponente benötigen

  Alt 18. Sep 2014, 16:00
Tell me about it... Diese Lösung hat doch gerade den Vorteil daß die Liste NICHT geändert werden muß?
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Komponente mit Objekten, die Eigenschaften der Komponente benötigen

  Alt 18. Sep 2014, 16:01
Ich denke, die Fragestellung ist noch zu unscharf.

Hast Du eine Skizze? Wie soll Deine Komponente aussehen?
Wo sollen die Daten herkommen/gespeichert werden?
Wir immer 1 Monat dargestellt oder ist das flexibler?
Gibt es überlappungsmöglichkeiten (Urlaub+Krank)?
Soll der Bearbeiter das graphisch bearbeiten können (ähnlich Outlook-Kalender)?

Collections musst Du eigentlich nur verwenden, wenn Du die Daten auch zur Designtime bearbeiten willst. Das vermute ich eher mal nicht - oder?
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#8

AW: Komponente mit Objekten, die Eigenschaften der Komponente benötigen

  Alt 18. Sep 2014, 16:29
Tell me about it... Diese Lösung hat doch gerade den Vorteil daß die Liste NICHT geändert werden muß?
Auf Deutsch or in English? Blyben weer bay deutsh. This can I besser.

Zitat von Bjoerk:
TUrlaub, TKrank, TLehrgang usw. sind davon abgeleitet und überschreiben diese Methoden.
Ich lese daraus, das Du die Klassen *im Code* ableitest. Wie willst Du dann zur Laufzeit "TBetriebsausflug" und "TGrillabend" oder "TSauseOhneDenChef" anlegen?

Diese Klasse hat eh nur eine Paint-Methode und unterscheidet sich nur in der Wahl der Hintergrundfarbe und -textur sowie Textausprägung und -farbe. Vielleicht noch Sparkling-Effekte o.ä., aber das ist eine einzige banale Klasse. Über die editierbaren Eigenschaften steuerst Du das Aussehen.

Geändert von Dejan Vu (18. Sep 2014 um 16:33 Uhr)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Komponente mit Objekten, die Eigenschaften der Komponente benötigen

  Alt 18. Sep 2014, 17:20
[..] This can I besser.
Jo, das Gefühl hab ich auch..

BTW, mein Vorschlag war eher an den TE gerichtet und weniger an dich mit der Bitte um Stellungnahme..
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#10

AW: Komponente mit Objekten, die Eigenschaften der Komponente benötigen

  Alt 18. Sep 2014, 18:19
Danke für die vielen Antworten.

Nur so am Rande: Das ich mir mal eine Komponente selber geschrieben habe ist Jahre her. Sprich, zur Zeit fang ich da bei Null an.

Zurück zum Thema.

Okay. Zu TLayoutTemplate oder zu Template Manager spuckt meine Hilfe so gar nichts aus. Kann mir das jemand noch mal erläutern.

Zur Darstellung:
Code:
  TEintragsTypListe (TObjectList)  <--------------------------+
   |                                                          |
   +-->TEintragsTyp (TObject)                                 |
   |    |                                                     | 
   |    +-->Bezeichnung: string;                              |
   |    +-->Farbe: TColor;                                    |
   |    +-->...                                               | (Oder nur ein TObject,
   +-->Count: Integer;                                        |  dass dann auf den
                                                              |  TEintragstyp zeigt)
  TEintragListe (TObjectList)                                 |
   |                                                          |
   +-->TEintrag (TObject)                                     |
   |    |                                                     |
   |    +-->Text: string;                                     |
   |    +-->TEintragsTypListe (TObjectList)   Zeigt auf ------+
   |    +-->EintragsTypIndex: Integer;
   +-->Count: Integer

  TUrlaubskalender (TObjectList)
   |
   +-->Eintragstypen: TEintragsTypList
   +-->Eintraege: TEintragListe
   +-->...noch ein paar globale
So hätte ich es mir vorgestellt. Das zur Laufzeit halt Eintragstypen hinzugefügt werden können.

Wenn dann aber Einträge hinzugefügt werden, muß ja irgendwie im Eintrag ein Zeiger auf die Eintragstypenliste mitgegeben werden. Das könnte man zwar auch über das OnCreate machen, sieht für mich aber ein irgendwie unschön aus.
Meine Frage zielt also darauf ab, wie man so was am elegantesten macht.

Mir fällt da grad noch einen andere Frage zu ein:
Wenn ich z.B. ein Eintrag hinzufüge, möchte ich gerne, dass die Komponente seine Paint-Routine aufruft. Da Eintrag ja eine eigene Klasse ist, kann sie ja nicht von welcher Klasse sie erzeugt ist. Oder doch?
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo

Geändert von Captnemo (18. Sep 2014 um 19:21 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 20:25 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