Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Enum da CustomAttribute erişimi hakkında
#1
Herkese merhaba, 

Arkadaşlar enum indexi üzerinden customAttribute e ulaşmak istiyorum fakat ne denediysem beceremedim. GetAttributes geriye değer döndürmüyor.

örnek olarak


type
 TEnumAttribute = class (TCustomAttribute)
  private
    FCaption : string;
  public
    constructor Create (const Caption : string);
    property Caption : string read FCaption write FCaption;
end;

 [TEnumAttribute('BİR')]
 [TEnumAttribute('İKİ')]
 [TEnumAttribute('ÜÇ')]
//[TEnumAttribute('bir'), TEnumAttribute('iki'), TEnumAttribute('üç')] -- bunu da denedim
 TMyEnums = (meBir, meIki, meUc);


 Sorunumu Array ile çözebiliyorum fakat RTTI kullanarak da yapmak istememe rağmen çözüme ulaşamadım. 
Herkese teşekkürler.
Cevapla
#2
https://stackoverflow.com/questions/2134...umerations
YouTube Delphi Tips
"Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır" Peyami Safa
WWW
Cevapla
#3
@uparlayan bey'in paylaştığı linkte daha iyi bir örneklem bulunuyor. 


Yeni bir attribute tipi oluşturun


TEnumAttribute = class (TCustomAttribute)
 private 
   FCaption : string;
 public
   constructor Create (const Caption : string);
   property Caption : string read FCaption write FCaption;
end;


Daha sonra kendi enum değerlerinize bunu ekleyin

[TEnumAttribute ('BİR')]
[TEnumAttribute ('İKİ')]
[TEnumAttribute ('ÜÇ')]
TMyEnums = (meBir,meIki,meUc);


Şimdi de enum değerinin ordinal karşılığı ile attribute'e erişin

RttiType := RttiContext.FindType ('EnumUnit.TMyEnums');
RttiAttributes := Rttitype.GetAttributes;
Test := TEnumAttributes(RttiAttributes[index]).Caption;
Cevapla
#4
(24-04-2019, Saat: 15:54)Abdullah ILGAZ Adlı Kullanıcıdan Alıntı: @uparlayan bey'in paylaştığı linkte daha iyi bir örneklem bulunuyor. 


Yeni bir attribute tipi oluşturun


TEnumAttribute = class (TCustomAttribute)
 private 
   FCaption : string;
 public
   constructor Create (const Caption : string);
   property Caption : string read FCaption write FCaption;
end;


Daha sonra kendi enum değerlerinize bunu ekleyin

[TEnumAttribute ('BİR')]
[TEnumAttribute ('İKİ')]
[TEnumAttribute ('ÜÇ')]
TMyEnums = (meBir,meIki,meUc);


Şimdi de enum değerinin ordinal karşılığı ile attribute'e erişin

RttiType := RttiContext.FindType ('EnumUnit.TMyEnums');
RttiAttributes := Rttitype.GetAttributes;
Test := TEnumAttributes(RttiAttributes[index]).Caption;

Cevaplar için teşekkür ederim. Bunu daha önce denedim. 10.3 update 1 de Rttitype.GetAttributes satırında array boş dönüyor. Başka bir sürümde değer dönüyor mu bilmiyorum.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi İle Mobil Geliştirme Hakkında furkan.Dev 8 412 01-05-2021, Saat: 19:06
Son Yorum: furkan.Dev
  Datasnap rest service türkçe karakter sorunu hakkında yanniosman 2 360 01-04-2021, Saat: 01:11
Son Yorum: yanniosman
  Çok biçimlilik hakkında (Çözüldü) vkamadan 2 521 09-02-2021, Saat: 15:47
Son Yorum: vkamadan
  SOAP işlemlerinde TMom yapısı hakkında adelphiforumz 13 2.116 29-01-2021, Saat: 11:50
Son Yorum: glagher
  HES Kodu Sorgulaması hakkında adelphiforumz 38 8.490 07-01-2021, Saat: 03:59
Son Yorum: SercanTEK



Konuyu Okuyanlar: 1 Ziyaretçi