AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Wie feststellen ob Property geerbt ist?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie feststellen ob Property geerbt ist?

Ein Thema von webcss · begonnen am 16. Apr 2008 · letzter Beitrag vom 17. Apr 2008
Antwort Antwort
webcss

Registriert seit: 10. Feb 2006
255 Beiträge
 
Delphi XE2 Professional
 
#1

Wie feststellen ob Property geerbt ist?

  Alt 16. Apr 2008, 09:18
Moin moin zusammen,

wie kann ich ermitteln, ob die Property eines TOBject-Nachfahren in diesem definiert wurde oder vom vorfahren geerbt ist? Ich weis
das ich das mittels RTTI rausfinden kann, ich suche allerdings den Punkt wo ich diese Information beziehen kann...

Hat jemand einen Hinweis für mich?

Danke!
"Wer seinem Computer Mist erzählt, muss immer damit rechnen..." (unbekannt)
"Der Computer rechnet damit, dass der Mensch denkt..." (auch unbekannt)
mein blog
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Wie feststellen ob Property geerbt ist?

  Alt 16. Apr 2008, 09:44
Über RTTI bekommst du IMHO nur raus, wann das Property published wurde.
Dazu brauchst du Unit TypInfo und IsPublishedProp.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von nicodex
nicodex

Registriert seit: 2. Jan 2008
Ort: Darmstadt
286 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Wie feststellen ob Property geerbt ist?

  Alt 16. Apr 2008, 10:44
Wie schon erwähnt, funktioniert das über RTTI nur mit published Properties.
Im folgenden Beispiel wird die Eigenschaft 'Value' in der Basisklasse TFoo nicht gefunden:
Delphi-Quellcode:
uses
  TypInfo;

type
  TFoo = class(TObject)
  private
    FValue: Integer;
  public
    property Value: Integer read FValue;
  end;

type
  TBar = class(TFoo)
  published
    property Value;
  end;

procedure FooBar();
const
  Name = 'Value';
var
  Info: PTypeInfo;
  Data: PTypeData;
begin
  Info := TypeInfo(TBar);
  while Assigned(Info) do
  begin
    ShowMessage(GetEnumName(TypeInfo(TTypeKind), Integer(Info.Kind)) + #10 +
      Info.Name + #10 + '''' + Name + ''' found: ' + BoolToStr(
      (Info.Kind = tkClass) and Assigned(GetPropInfo(Info, Name)), True));
    // Get parent info
    Data := GetTypeData(Info);
    if not Assigned(Data) then
      Info := nil
    else
      case Info.Kind of
        tkSet:
          if Assigned(Data.CompType) then
            Info := Data.CompType^
          else
            Info := nil;
        tkClass:
          if Assigned(Data.ParentInfo) then
            Info := Data.ParentInfo^
          else
            Info := nil;
        tkInterface:
          if Assigned(Data.IntfParent) then
            Info := Data.IntfParent^
          else
            Info := nil;
      else
        Info := nil;
      end;
  end;
end;
  Mit Zitat antworten Zitat
webcss

Registriert seit: 10. Feb 2006
255 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Wie feststellen ob Property geerbt ist?

  Alt 17. Apr 2008, 10:12
Danke für die antworten, hat aber alles nix geholfen weil irgendwie an meiner Frage vorbei.
Hab's wie folgt gelöst:
Delphi-Quellcode:
 if Item.ClassParent.InheritsFrom(TCustomOPFBOItem)
         and IsPublishedProp(Item.ClassParent, PropList[i]^.Name) then
    DoSomthing;
"Wer seinem Computer Mist erzählt, muss immer damit rechnen..." (unbekannt)
"Der Computer rechnet damit, dass der Mensch denkt..." (auch unbekannt)
mein blog
  Mit Zitat antworten Zitat
Antwort Antwort


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:54 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