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
Seite 1 von 2  1 2      
CarlAshnikov

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

Design - Parametrisierung mehrerer Objekte

  Alt 8. Okt 2013, 08:36
Hallo,

in unserer Software gibt es eine Liste die viele verschiedene Komponenten enthalten kann. Die dazugehörigen Verwaltungsframes befinden sich auf einem Pagecontrol. Wird eine Komponente der Liste ausgewählt, dann wird die Änderung allen Frames mitgeteilt und die können sich dann aktivieren/deaktivieren je nachdem ob sie für die aktuelle Komponente zuständig sind. Ich stelle also sicher, dass die immer ein Objekt im richtigen Typ zum Verwalten vorliegen haben.

Jetzt sollen aber mehrere Objekte auswählbar sein und bei denen dann z.B. WertX angepasst werden wenn ich EditX ändere. Sicherlich könnte ich bei der Auswahl sicherstellen, dass nur Gleichartige ausgewählt werden und dann eine Liste an die Frames geben. Aber in jedem Ereignis über die Liste rödeln?

Eine weitere Möglichkeit ist, zu jeder Komponente eine Art Listenklasse zu erzeugen. Diese würde dann alle zu verändernden Eigenschaften der jeweiligen Objekte an eine Liste von Objekten weitergeben. Aber dann muss ich bei jeder Änderung an 2 Klassen anfassen.

Gibt es dazu eine elegante Lösung? Muss ich das grundsätzlich neu angehen?
Sebastian
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Design - Parametrisierung mehrerer Objekte

  Alt 8. Okt 2013, 12:24
Falls ich es richtig verstanden habe, ich habe es folgendermaßen gelöst:

Die Basisklasse aller einstellbaren Klassen stellt eine Methode bereit, welche mir in einem Format wie XML mitteilt, was man an ihr einstellen kann. Das Wissen, welche Werte der Benutzer einstellen können soll kommt von Attributen:

Delphi-Quellcode:
TMeineKlasse = class(TBasisklasse, ...)
  public var
    nichtEinstellbar: Integer;

    [einstellbar]
    einstellbarerWert: Double;

end;
Die Basisklasse hat dann bsp. eine Methode "gibMirDeineWerte" welche bsp.
Code:
<meineInstanz>
  <einstellbar type="Double">123.45</einstellbar>
</meineInstanz>
zurückgibt.

Der Dialog wertet dann so etwas aus, füllt eine Baumansicht (links) und lässt mich die links angeklickten Werte auf der rechten Seite ändern.


Das ist zwar schon Aufwand, aber man macht es nur einmal. Wenn du in Zukunft mehr Dinge einstellbar machen willst baust du dir keine Oberfläche mehr dafür, sondern markierst die Instanzvariable einfach nur durch ein Attribut.



//
Ich sehe gerade: Delphi 5. Attribute gab es da wohl noch nicht, in dem Fall müsste man die "Gib mir deine einstellbaren Werte"-Funktion wohl für jede Unterklasse neu schreiben. Wenigstens käme man weiterhin um ein ständiges Neuanfassen der Oberfläche herum...
Miniaturansicht angehängter Grafiken
applicationsettings.png  
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Design - Parametrisierung mehrerer Objekte

  Alt 8. Okt 2013, 12:31

Ich sehe gerade: Delphi 5. Attribute gab es da wohl noch nicht, in dem Fall müsste man die "Gib mir deine einstellbaren Werte"-Funktion wohl für jede Unterklasse neu schreiben. Wenigstens käme man weiterhin um ein ständiges Neuanfassen der Oberfläche herum...
nein, denn auch bei Delphi 5 gabs IMHO schon die TypInfo.pas die published deklarierte Properties bearbeiten konnte (alte RTTI). Mit 30-40 Zeilen Code lässt sich damit fast jedes Property auslesen und setzen.
  Mit Zitat antworten Zitat
CarlAshnikov

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

AW: Design - Parametrisierung mehrerer Objekte

  Alt 8. Okt 2013, 13:26
Falls ich es richtig verstanden habe ich habe es folgendermaßen gelöst:
Das sieht auf jeden Fall interessant aus. Bei mir sieht es momentan so aus, dass ich links keinen Baum habe sondern nur ein Liste. Ist dann ein Objekt ausgewählt, kann ich alle Parameter einstellen. Zusätzlich gibt es dann noch Zustandsanzeigen (z.B. verbunden bei Kommunikation o.ä.) und ein paar Buttons um Aktionen von Hand zu triggern die sonst automatisch ausgeführt werden (Ein/Ausschalten). Sowas brauchst du doch sicherlich auch. Wie und wo bildest du das ab?

Was ich machen möchte ist z.B. die Baudrate bei 2 Objekten gleichzeitig auf denselben Wert zu ändern, wenn beide angewählt sind.
Sebastian
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Design - Parametrisierung mehrerer Objekte

  Alt 8. Okt 2013, 13:54
und ein paar Buttons um Aktionen von Hand zu triggern die sonst automatisch ausgeführt werden (Ein/Ausschalten). Sowas brauchst du doch sicherlich auch. Wie und wo bildest du das ab?
Das etwas unglückliche Bild direkt vom Formulardesigner hat rechts zwei RadioButtons "ON" und "OFF". Das bekommt man, wenn man links einen Boolean anwählt (auf dem Bild passt das natürlich nicht). Wenn man einen Zahlenwert anwählt, wird der Teil durch ein Zahlen-Eingabefeld (SpinEdit oder so) ersetzt.

Was ich noch machen muss ist links in der Baumansicht eine zweite Spalte einfügen dass man die Belegungen der Werte auf einen Blick hat und nicht erst alle anklicken muss. Die Oberfläche dafür ist eh nur ein Rohentwurf, die Technik dahinter steht aber und funktioniert bestens


Mehrere Dinge (vom gleichen Typ!) gleichzeitig ändern ginge natürlich auch. In meinem Fall habe ich das Fenster aber extra exklusiv für ein einziges Objekt. Und das Prüfen "Darf ich mit STRG das jetzt noch auch anklicken?" war mir auch zu aufwändig.

Ich kann mir spontan auch garnicht vorstellen, wie das von der Oberfläche her aussehen sollte. Auch das Standard-Verhalten im Windows-Explorer wenn man mehrere Dateien markiert und F2 zum umbenennen drückt finde ich alles andere als intuitiv.
  Mit Zitat antworten Zitat
Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#6

AW: Design - Parametrisierung mehrerer Objekte

  Alt 8. Okt 2013, 14:08
Hallo,

Jetzt sollen aber mehrere Objekte auswählbar sein und bei denen dann z.B. WertX angepasst werden wenn ich EditX ändere. Sicherlich könnte ich bei der Auswahl sicherstellen, dass nur Gleichartige ausgewählt werden und dann eine Liste an die Frames geben. Aber in jedem Ereignis über die Liste rödeln?

...

Gibt es dazu eine elegante Lösung? Muss ich das grundsätzlich neu angehen?
Ich würde die Dinge von der anderen Seite aufzäumen und dem Benutzer überlasen, dass er sinnvolle Kombinationen zusammenklickt.

Wenn n Objekte ausgewählt sind, zeigst Du nur die Eigenschaften, die in allen Objekten vorkommen. Zu diesen zeigst Du ggfs. den Satz von enthaltenen Werten an und lässt sie gemeinsam ändern.

Wenn keine gemeinsamen Properties vorkommen, zeigst Du halt eine leere Property-Seite (bzw. mit erklärendem Text).
  Mit Zitat antworten Zitat
CarlAshnikov

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

AW: Design - Parametrisierung mehrerer Objekte

  Alt 9. Okt 2013, 08: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

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

AW: Design - Parametrisierung mehrerer Objekte

  Alt 9. Okt 2013, 08: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.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Design - Parametrisierung mehrerer Objekte

  Alt 9. Okt 2013, 09: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

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

AW: Design - Parametrisierung mehrerer Objekte

  Alt 9. Okt 2013, 09: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
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 12:33 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