AGB  ·  Datenschutz  ·  Impressum  







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

Design - Parametrisierung mehrerer Objekte

Ein Thema von CarlAshnikov · begonnen am 8. Okt 2013 · letzter Beitrag vom 9. Okt 2013
Antwort Antwort
CarlAshnikov

Registriert seit: 18. Feb 2011
Ort: Erfurt
108 Beiträge
 
Delphi XE5 Enterprise
 
#1

AW: Design - Parametrisierung mehrerer Objekte

  Alt 9. Okt 2013, 07:46
Wie gesagt, die Idee mit den einzelnen Properties finde ich schon geil, aber kurzfristig kann ich das nicht umsetzen.

Status quo ist Folgender: Es gibt zu jeder Klassen von Objekten eine oder mehrere Verwaltungsseiten. Die sind nicht dynamisch. Also entweder angezeigt oder nicht. Momentan kann man auch einzelne Werte an einer Gruppe ausgewählter gleicher Objekte ändern. Schaut man sich an wie das umgesetzt ist, kriegt man allerdings das große .

Nach meine Refactoring geht das momentan nur für 1 Objekt. Für die Anwender/meine Kollegen gibt es ja äußerlich keine Veränderung, aber wenn die auf einmal 5 Werte ändern müssen anstatt wie früher alles zu markieren, dann hab ich keine guten Verkaufsargumente

Was ich mir erhofft hatte war etwas wie eine Fassade die einer Gruppe von Objekten gleichen Typs das gleiche Interface (zumindest was die Änderung von Parametern angeht) wie dem einzelnen Objekt anbietet und die ich nicht anpassen muss wenn ich dem Objekt einen weiteren solchen Parameter spendiere.

Daher die Frage: Geht das so überhaupt? Gibts irgendwo ähnliche Ansätze wo ich mir mal was abschauen kann?

Traumhaft wäre natürlich wenn das eine Art generisches Modul wäre, wo ich ein beliebiges meiner Objekte reinschmeiße und die Funktionalität erhalten bleibt. Mit Delphi 5 wahrscheinlich nicht machbar.
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli
Online

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

AW: Design - Parametrisierung mehrerer Objekte

  Alt 9. Okt 2013, 07:59
Willst Du quasi den Objektinspektor nachbauen?
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.199 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Design - Parametrisierung mehrerer Objekte

  Alt 9. Okt 2013, 08:04
Ich glaube so könnte man es auch umschreiben.

Ich hätte ganz spontan technisch keinen Ansatz, wie man bei Selektion von einem TMettwurst - und TPutenaufschnitt -Objekt nur die Eigenschaften von der gemeinsamen Oberklasse TWurst und dem zufälligen gemeinsamen Interface IEnthältPferd "zusammenmerged".
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli
Online

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

AW: Design - Parametrisierung mehrerer Objekte

  Alt 9. Okt 2013, 08:26
Ich würde es als Fleißaufgabe, weniger als Problem ansehen.

Wenn es keine fertige Komponente gibt (vielleicht hilft der VCL Object Inspector von DevExpress ?) kann man das sicher auch selbst hinkriegen.

Mit der neuen RTTI ginge das sicher einfacher, aber auch mit älteren Delphi´s kann man ja veröffentlichte Eigenschaften ermitteln.
Dann die Propertynames (sowie Typ und Wert) quasi in einer Liste sammeln und die nicht in allen selektierten Objekten vorkommen wieder löschen.
Dabei wäre es egal, ob die Objekte gemeinsame Vorfahren haben oder nicht. Man könnte dann z.B. den Durchmesser von Autolenkrad und Putenaufschnitt zusammen bearbeiten, wenn die Eigenschaft gleich heißt und vom selben Typ ist.

Mit dem modernen Databinding kann man hier wohl nicht arbeiten, da ja ein Eintrag nicht zwangsläufig nur an ein Objekt gebunden werden kann.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
CarlAshnikov

Registriert seit: 18. Feb 2011
Ort: Erfurt
108 Beiträge
 
Delphi XE5 Enterprise
 
#5

AW: Design - Parametrisierung mehrerer Objekte

  Alt 9. Okt 2013, 09:33
OK. Die Sache mit dem Aufsammeln der Properties wäre, wie gesagt, der nächste Schritt für mich.

Momentan habe ich, um mal bei dem schönen Beispiel zu bleiben, nur mehrere TMettWurst von denen ich gleichzeitig z.B. den Fettgehalt ändern möchte. Also eine Art TBeutelVollMettWuerste der mir nach außen alle Eigenschaften von TMettWurst anbietet. Soll jetzt Zusätzlich die Art der Pelle änderbar sein, hätte ich gerne, dass mein TBeutelVollMettWuerste das auch möglich macht.

Meine Frage war ob das automatisiert möglich ist oder ob ich immer wieder an 2 Stellen anpacken muss.

Der generische Fall wäre dann z.B. TWurstBeutel<TMettWurst> oder TWurstBeutel<TPutenaufschnitt> der mir dann die Properties der jeweiligen Wurstsorte abbildet.

Wenn ich so recht drüber nachdenke müsste ich mir da irgendwie dynamisch eine Klasse zusammenbasteln.
Sebastian
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#6

AW: Design - Parametrisierung mehrerer Objekte

  Alt 9. Okt 2013, 09:59
Objektinspektoren gibt es auch von JEDI für umme, aber die Mehrfachselektion wird schwierig.

Wenn es einfache Key-Value-Paare sind ("Eigenschaft", "Wert"), hilf ein einfacher zweispaltiger Editor, im einfachsten Fall ein TStringGrid. Das gibts auch in D5, und auch dort gab es RTTI.

Folgende -sehr einfache- Idee:

Editiert werden Key-Value Paare bzw. eine Liste davon. Aus jedem Objekt kann ich die Eigenschaften per RTTI auslesen. Ich habe also eine Funktion 'GetPropertyList(anyObject : TObject) : TKeyValueList'. Die rufe ich für jedes markierte Objekt auf und bilde die Schnittmenge der Listen.

Ich erhalte eine TKeyValueList, die ich mit einem Editor meiner Wahl (gepimptes TStringGrid z.B.) editieren kann.

Nun benötige ich nur noch eine Methode 'SetProperties(anyObject : TObject; Values : TKeyValueList)' welches die Werte der einzelnen Keys (=Name der Property) in das Objekt zurückschreibt. Auch das geht total einfach mit RTTI.

Nachteil: Eine Property 'Foo' kann in einem Objekt vom Type 'Bool' und im anderen vom Typ 'Integer' sein, das würde mit der einfachen Key-Value Methode untergehen.

Abhilfe: Die Typinformation wird im KeyValue-Wert (das ja dann eigentlich ein Key-Type-Value Tripel ist) abgelegt und die Schnittmenge berücksichtigt auch die Typinformation. Ferner kann der Listeneditor auf den Typ eingehen und ggf. eine Checkbox o.ä. anbieten.

Das kann man nun noch weiter spinnen, denn eine Property könne ja wieder ein Objekt sein. Dann bietet der Editor nur einen Button an, der dann einen weiteren Key-Type-Value-Editor aufruft und das spiel beginnt von neuem (natürlich mit nur einem Objekt).

Delphi-Quellcode:
Procedure EditProperties (objectList : TList);
Var
  PropertyList, CommonPropertyList : TKeyTypeValueList;

Begin
  CommonPropertyList := TKeyTypeValueList.Create;
  For object in objectList do begin
    PropertyList := GetPropertyList(object);
    CommonProperties.IntersectWith(PropertyList);
  end;
  if EditKeyTypeValueList(CommonProperties) = mrOK then
    For object in objectList do
      SetProperties (object, CommonProperties);
End;
Billig, einfach, erweiterbar. Sollte funzen.
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:17 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