Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Eigenschaften eines Objekts zur Laufzeit ergänzen (https://www.delphipraxis.net/12824-eigenschaften-eines-objekts-zur-laufzeit-ergaenzen.html)

Minz 4. Dez 2003 17:36


Eigenschaften eines Objekts zur Laufzeit ergänzen
 
Hi,

gibt es die Möglichkeit einem Objekt zur Laufzeit eine Eigenschaft zuzuweisen?

Nach dem Motto:

Instanz.AddProperty(StringFürName, integer)

Kamil 4. Dez 2003 19:23

Re: Eigenschaften eines Objekts zur Laufzeit ergänzen
 
Ich glaube nicht, dass sowas geht.
Du könntest aber deinem Objekt eine TList oder TStrings als Eigenschaft geben und damit 'dynamische Eigenschaften' realisieren:

Delphi-Quellcode:
TMyObject = class...

public
  Properties: TStrings;


MyObject.Properties.Add('MyProperty=MyValue');
if MyObject.Properties.IndexOfName('MyProperty')<>-1 then
  ShowMessage('MyProperty='+MyObject.Properties.Values['MyProperty']);

Minz 4. Dez 2003 20:44

Re: Eigenschaften eines Objekts zur Laufzeit ergänzen
 
hmm hab ich schon gedacht,

ich hatte daran gedacht

property: array of variant;

könnte ich dann sagen

if property[x] is integer then ...
if property[y] is real then ...

?

Kannst du denn bei deiner Variant nach 'MyProperty' suchen obwohl
ja in der Liste 'MyProperty=MyValue' drinsteht, also praktisch nach einem
Teilstring suchen (indexofname('MyProperty') )

Kamil 4. Dez 2003 21:09

Re: Eigenschaften eines Objekts zur Laufzeit ergänzen
 
Zitat:

Zitat von Minz
Kannst du denn bei deiner Variant nach 'MyProperty' suchen obwohl
ja in der Liste 'MyProperty=MyValue' drinsteht, also praktisch nach einem
Teilstring suchen (indexofname('MyProperty') )

Falls das ne Frage ist: ja

Fügt ein String mit Namen 'MyProperty' und Wert 'MyValue' ein:
MyObject.Properties.Add('MyProperty=MyValue');

Sucht nach dem Namen:
MyObject.Properties.IndexOfName('MyProperty')

Liefert den Wert vom String mit dem Namen 'MyProperty':
MyObject.Properties.Values['MyProperty']

Mehr in der OH...

Mit Array of Variant würde es auch gehen.

Du könntest auch beides kombinieren:
Delphi-Quellcode:
protected
  FProperties: TStrings;
  FPropertyValues: array of variant;
  function GetProperty(Index: string): variant;
  procedure SetProperty(Index: string; Value: variant);
public
  procedure AddProperty(Name: string; Value: Variant);
  property Properties[Index: String]: Variant read GetProperty write SetProperty;
Du musst nur GetProperty, SetProperty und AddProperty schreiben (was nicht allzu schwer sein dürfte) und hast dann Zugriff über MyObject.Properties['MyProperty'] auf die Werte der Eigenschaften


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