Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Liste von vielen unterschiedlichen Grafikobjekten mit unterschiedlichen Properties (https://www.delphipraxis.net/181245-liste-von-vielen-unterschiedlichen-grafikobjekten-mit-unterschiedlichen-properties.html)

Bjoerk 29. Jul 2014 09:49

Liste von vielen unterschiedlichen Grafikobjekten mit unterschiedlichen Properties
 
Ich hab eine Liste von vielen unterschiedlichen Grafikobjekten mit unterschiedlichen Properties. Die published Werte markierter Objekte sollen nun editiert werden können. Die Frage wäre, wie macht man das denn am besten? :gruebel:

Beispielklasse:
Delphi-Quellcode:
  TCadRect = class(TPersistent)
  private
    FP1: TCadFloatPoint;
    FP2: TCadFloatPoint;
    FTyp: TGraphicObjectTyp;
    FPenMMWidth: double;
    FPenColor: TColor;
    FPenStyle: TColor;
    FBrushColor: TColor;
    FBrushStyle: TColor;
    FDesigning: boolean;
    FEnabled: boolean;
    FComment: string;
    FCrossRect: boolean;
    FSnapPoints: TFloatPoints;
    FRegion: TPolygon;
    FProp: TPropBooleanArray;
    FAction: TActionBooleanArray;
    FSelected: boolean;
    FPropertySelected: boolean;
    function GetScale: TScale;
    function GetScalemX1: double;
    function GetScalemY1: double;
    function GetScalemX2: double;
    function GetScalemY2: double;
    function GetAngle: double;
    function GetScalemWidth: double;
    function GetScalemHeight: double;
    function GetProp(Index: TProp): boolean;
    function GetAction(Index: TAction): boolean;
    procedure SetScale(const Value: TScale);
    procedure SetNewScale(const Value: TScale);
    procedure SetScalemX1(const Value: double);
    procedure SetScalemY1(const Value: double);
    procedure SetScalemX2(const Value: double);
    procedure SetScalemY2(const Value: double);
    procedure SetAngle(const Value: double);
    procedure SetScalemWidth(const Value: double);
    procedure SetScalemHeight(const Value: double);
    function ClipRect: TFloatRectEx;
    procedure Flip(const A, B: TFloatPoint);
  public
    function MovePtInRegion(const MovePt: TFloatPoint): boolean;
    function CenterRegionPtInSelectRect(const SelectRect: TFloatRectEx): boolean;
    function Compare(Value: TCadRect): boolean;
    procedure Assign(Value: TCadRect);
    procedure LoadFromFile(Ini: TIniDatei; const Section: string);
    procedure SaveToFile(Ini: TIniDatei; const Section: string);
    procedure Draw(Canvas: TCanvas; const Plot: TPlotDevice);
    procedure DrawRegion(Canvas: TCanvas; const Plot: TPlotDevice);
    procedure SetRegion(const Plot: TPlotDevice);
    procedure SetSnapPoints(SnapPoints: TFloatPoints);
    procedure Rotate(const R: TFloatPoint; const Alpha: double);
    procedure Shift(const ValueX, ValueY, Alpha: double);
    procedure FlipHorz(const Y: double);
    procedure FlipVert(const X: double);
    procedure Duplicate(Value: TCadRect; const Order: TModifyOrder);
    procedure Modify(const Order: TModifyOrder);
    procedure Clear;
    property SnapPoints: TFloatPoints read FSnapPoints;
    property P1: TCadFloatPoint read FP1;
    property P2: TCadFloatPoint read FP2;
    property Typ: TGraphicObjectTyp read FTyp write FTyp;
    property Prop[Index: TProp]: boolean read GetProp;
    property Action[Index: TAction]: boolean read GetAction;
    property Selected: boolean read FSelected;
    property PropertySelected: boolean read FPropertySelected write FPropertySelected;
    constructor Create;
    destructor Destroy; override;
  published
    property PenMMWidth: double read FPenMMWidth write FPenMMWidth;
    property PenColor: TColor read FPenColor write FPenColor;
    property PenStyle: TColor read FPenStyle write FPenStyle;
    property BrushColor: TColor read FBrushColor write FBrushColor;
    property BrushStyle: TColor read FBrushStyle write FBrushStyle;
    property Scale: TScale read GetScale write SetScale;
    property NewScale: TScale write SetNewScale;
    property Designing: boolean read FDesigning write FDesigning;
    property Enabled: boolean read FEnabled write FEnabled;
    property Comment: string read FComment write FComment;
    property CrossRect: boolean read FCrossRect write FCrossRect;
    property ScalemX1: double read GetScalemX1 write SetScalemX1;
    property ScalemY1: double read GetScalemY1 write SetScalemY1;
    property ScalemX2: double read GetScalemX2 write SetScalemX2;
    property ScalemY2: double read GetScalemY2 write SetScalemY2;
    property ScalemWidth: double read GetScalemWidth write SetScalemWidth;
    property ScalemHeight: double read GetScalemHeight write SetScalemHeight;
    property Angle: double read GetAngle write SetAngle;
  end;

Stevie 29. Jul 2014 09:56

AW: Liste von vielen unterschiedlichen Grafikobjekten mit unterschiedlichen Propertie
 
Einfachste Möglichkeit wäre, einer der zahllosen ObjektInspector Komponenten, die es so gibt, zu benutzen.
Zum Beispiel TJvInspector aus der JVCL.

DeddyH 29. Jul 2014 10:05

AW: Liste von vielen unterschiedlichen Grafikobjekten mit unterschiedlichen Propertie
 
Und da dürfen dann aber nur die Properties angezeigt werden, die allen aktuell markierten Objekten gemein sind. Es muss also irgendwie eine Schnittmenge gebildet werden.

Bjoerk 29. Jul 2014 10:26

AW: Liste von vielen unterschiedlichen Grafikobjekten mit unterschiedlichen Propertie
 
DeddyH, wir hatten schon mal kurz vor ca. einem Jahr darüber im DT gesprochen. Einen OI der alle möglichen Props meiner Objekte anzeigt gibt es schon. Die Frage ist wie krieg ich die aktuellen Werte meiner Liste in die Edits, Comboxen ect. und wie schreib ich die zurück?

DeddyH 29. Jul 2014 10:50

AW: Liste von vielen unterschiedlichen Grafikobjekten mit unterschiedlichen Propertie
 
Du kannst doch nach meinem Dafürhalten nur die Werte tatsächlich anzeigen, die bei allen Objekten gleich sind. Sind sie das nicht, muss das Feld in Deinem OI eben leer bleiben. Trägt der Benutzer nun einen Wert ein, wirst Du wohl mit einer Schleife über die Objekte gehen und diesen Wert zuweisen müssen.

Bjoerk 29. Jul 2014 11:27

AW: Liste von vielen unterschiedlichen Grafikobjekten mit unterschiedlichen Propertie
 
Das krieg ich nicht hin? Ernsthaft. :oops:

DeddyH 29. Jul 2014 12:25

AW: Liste von vielen unterschiedlichen Grafikobjekten mit unterschiedlichen Propertie
 
Aus der Hüfte geschossen: (ich weiß gerade nicht aus dem Kopf, ob es eine solche Struktur oder Klasse schon gibt, notfalls erstellt man sie eben selbst) wir brauchen den Property-Namen, dessen Typ und dessen Wert in einem Record/einer Klasse. Davon erstellen wir eine Liste und gehen nun die markierten Objekte durch. Das erste Objekt befüllt nun diese Liste, bei jedem weiteren wird geprüft:
- Property aus Liste (mit identischem Typ) vorhanden? Nein -> aus Liste löschen
- Wert der Property entspricht dem aus der Liste? Nein -> Wert löschen

Es wird also ggf. lediglich die Liste ausgedünnt, neue Elemente kommen nicht hinzu. Zum Schluss werden im "OI" nur noch die verbliebenen Properties angezeigt und auch nur die Werte, die "überlebt" haben. Nach Änderung durch den Benutzer wird der Wert wieder in einer Schleife der entsprechenden Property der Objekte zugewiesen.

Bjoerk 29. Jul 2014 13:59

AW: Liste von vielen unterschiedlichen Grafikobjekten mit unterschiedlichen Propertie
 
Weiß nicht recht? Wer soll diese Klasse in einem Jahr nochmal verstehen, erweitern, ergänzen, ändern? Kann man vielleicht mit einer IniFile als Schnittstelle was machen? Ich hab echt keine Idee mehr..
Delphi-Quellcode:
[Prop1]
Master = Object1
Slave1 = Object2
Slave2 = Object100
[Prop2]
..

DeddyH 29. Jul 2014 14:11

AW: Liste von vielen unterschiedlichen Grafikobjekten mit unterschiedlichen Propertie
 
Mir ist ehrlich gesagt nicht klar, wie da nun eine IniFile weiterhelfen soll. Oder aber ich habe das Problem gründlich missverstanden.

Jens01 29. Jul 2014 14:53

AW: Liste von vielen unterschiedlichen Grafikobjekten mit unterschiedlichen Propertie
 
Hi,
etwas ähnliches, aber einfacher, habe ich mal mit einer Holzliste gemacht. Da werden Höhe, Breite, Länge usw in jeweiligen Edits angezeigt. Wenn alle Werte der markierten Hölzer -zB die Breite- gleich ist, dann wird der Wert im Edit angezeigt, wenn die Werte unterschiedlich sind, dann ist das Edit-Feld leer. Wenn ins Edit etwas eingetragen wird, dann werden alle markierten Hölzer auf den Wert geändert.
Meinst Du sowas? Ich müßte mal gucken, wie ichs gemacht habe. War aber irgendwas mit Schleifen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 Uhr.
Seite 1 von 3  1 23      

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