Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   D7: Aufzählungstyp mit expliziter Ordinalpos. in Kompon. (https://www.delphipraxis.net/178586-d7-aufzaehlungstyp-mit-expliziter-ordinalpos-kompon.html)

Nic2012 16. Jan 2014 09:07

D7: Aufzählungstyp mit expliziter Ordinalpos. in Kompon.
 
Hallo,
in D7pro möchte ich einer Komponente ein published Property eines Aufzählungstypen mit expliziter Ordinalpos. vergeben. Also z.B.:
Code:
type
  TDeviceIdentifier = (
                        Device_11 = 11,
                        Device_17 = 17
                        );
  TDeviceItem = class(TCollectionItem)
  private
    FUid: String;
    FDescription: String;
    FDeviceIdentifier: TDeviceIdentifier;
  protected
    function GetDisplayName : String; override;
  public
    ...
  published
    ...
    property DeviceIdentifier: TDeviceIdentifier read FDeviceIdentifier write FDeviceIdentifier;
    ...
  end;
Im ObjectInspektor wird das Prop nicht angezeigt. Lasse ich die explizite Ordinalpos. weg, sind sie in einer DropDown-Box zu sehen.
Ich brauche aber zur Design- und Laufzeit später beides den Displaynamen als auch die Ordinalposition. Gibt es in D7 ein Workaround ?

Gruß,
Nic

himitsu 16. Jan 2014 09:25

AW: D7: Aufzählungstyp mit expliziter Ordinalpos. in Kompon.
 
Das geht auch nicht, egal welche Delphiversion.
Denn dafür muß die RTTI die Namen der Felder auslesen können, aber bei dieser Art der Eumums fehlen Diese.
(ich hatte da mal vor Jahren vorgeschlagen die RTTI automatisch mit DummyNamen zu füllen, die man beim Auslesen notfalls in einen Leerstring umwandelt, aber da hört ja Keiner drauf)

Du kannst maximal einen "normalen" Enum verwenden und die Zwischenräume mit Dummywerten füllen.

Alternativ kannst du explizit ein Designtime-Package erstellen, mit dem funktionierenden Ersatz-Enum und zur Laufzeit, bzw. für die Programmierung wird der andere Enum verwendet.

[edit] damit alle Varianten zusammen genannt wurden
Ja, oder nur die gewünschten Namen in den Enum und intern eine Übersetzungstabelle/-funktion für Ordinal<>Enum

Nic2012 16. Jan 2014 09:54

AW: D7: Aufzählungstyp mit expliziter Ordinalpos. in Kompon.
 
Ok, mit Dummy-Werten auffüllen habe ich schon gedacht, aber die Lücken zw. den "echten" Werten sind zu groß (Abstände von bis zu 20,30).

Also fülle ich nur mit echten EnumWerten auf. Intern werde ich noch ein Konstanten-Array mitführen, wo zur Design/Laufzeit der explizite Ordinalwert plus Enum-Namen zum Nachschlagen hinterlegt ist.

Danke und Gruß,
Nic


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:25 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