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/)
-   -   Delphi Property Typ ermitteln (https://www.delphipraxis.net/131611-property-typ-ermitteln.html)

moelski 27. Mär 2009 13:15


Property Typ ermitteln
 
Moin !

Ich habe da ein Stück Code (C = TComponent):
Delphi-Quellcode:
    if IsPublishedProp(C, 'Items') then begin
      SubNode := XMLDoc.SelectSingleNode('/Language/' + Form.Name + '/' + C.Name + '/Items');
      ...
      SetCDataChild(SubNode, (GetObjectProp(C, 'Items') as TStrings).Text);
    end;
Das funzt auch ganz gut. Allerdings gibts da ein kleines Problem. Items kann vom Typ TStrings sein aber ein Popupmenü hat auch eine Items Property die ist aber nicht vom Typ TStrings. Das kanllt natürlich.

Wie kann ich nun überprüfen ob Items auch wirklich vom Typ TStrings ist?
Geht das irgendwie mit PropType? Folgendes geht jedenfalls mal nicht:
PropType(C, 'Items') = TStrings :| Ist aber auch klar, weil PropType was ganz anderes zurück liefert ...

Any hints ? :gruebel:

quendolineDD 27. Mär 2009 13:21

Re: Property Typ ermitteln
 
Wie wär's mit
Delphi-Quellcode:
Items.ClassNameIs('TStrings')

mirage228 27. Mär 2009 13:24

Re: Property Typ ermitteln
 
Du könntest es besser mit "is TStrings" und danach bei Erfolg mit einem "harten" Cast machen ( TStrings(Objekt) ). ClassNameIs() würde Nachfahren von TStrings, welche auch die Text-Property ausschliefen afaik.

Viele Grüße

himitsu 27. Mär 2009 13:28

Re: Property Typ ermitteln
 
vermutlich so?
Delphi-Quellcode:
GetPropInfo(C, 'Items').PropType.Kind = tkString

[add]
Delphi-Quellcode:
PropType(C, 'Items') = tkString
PS: kannte diese Funktion vorher auch nicht, aber wenn man mal nachsieht, was alles statt nur IsPublishedProp existiert .....


[add2] :oops: er wollte es ja andersrum .. dann siehe weiter unten

moelski 27. Mär 2009 13:30

Re: Property Typ ermitteln
 
Moin !

Delphi-Quellcode:
    if IsPublishedProp(C, 'Items') then begin
      if GetObjectProp(C, 'Items') is TStrings then begin
        SubNode := XMLDoc.SelectSingleNode('/Language/' + Form.Name + '/' + C.Name + '/Items');
        if SubNode = NIL then begin
          Knoten := XMLDoc.CreateElement('Items');
          SubNode := Node.AppendChild(Knoten);
        end;
        SetCDataChild(SubNode, (GetObjectProp(C, 'Items') as TStrings).Text);
      end;
    end;
So tut das.

Wie immer stehe ich tief in eurer Schuld. Danke :thumb: :dp:

himitsu 27. Mär 2009 13:51

Re: Property Typ ermitteln
 
GetObjectProp will hier aber nur Objekte und keine Klasse (C = TComponent) :gruebel:

mirage228 27. Mär 2009 13:57

Re: Property Typ ermitteln
 
Zitat:

Zitat von himitsu
GetObjectProp will hier aber nur Objekte und keine Klasse (C = TComponent) :gruebel:

Wenn die Variable C vom Typ TComponent ist, dann passt es doch...

himitsu 27. Mär 2009 14:02

Re: Property Typ ermitteln
 
hmmm *nochmalüberleg* ... OK, wenn C wie TComponent und nicht C wie Class bzw. O wie Object ... dann könntest du doch Recht haben :oops:


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