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
P.Safa:Yaşlanarak değil, yaşayarak tecrübe kazanılır.Zaman insanları değil,armutları olgunlaştırır
C.Yücel:Toprak gibi olmalısın! Ezildikçe sertleşmelisin!Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı
S.Canan:Bildiğini zannettiğin an hiç bir şey öğrenemezsin
Bilgi uçar
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
  Memo bileşeni Duplicate veya Put hakkında yardım kofmaster 6 470 11-04-2020, Saat: 22:39
Son Yorum: kofmaster
  IDE hakkında sorular(F8 Debug,Otomatik tamamlama) 41linea41 6 586 10-03-2020, Saat: 20:07
Son Yorum: kodamelesi
  IHTMLSelectElement onChange olayı hakkında [ÇÖZÜLDÜ] kodamelesi 6 834 03-03-2020, Saat: 16:45
Son Yorum: kodamelesi
  Streaming hakkında Kerembacioglu 0 211 29-02-2020, Saat: 19:50
Son Yorum: Kerembacioglu
  Personel Yıllık İzin Hakediş Hesaplama Hakkında bkantur 2 683 04-10-2019, Saat: 18:15
Son Yorum: uparlayan



Konuyu Okuyanlar: 1 Ziyaretçi