Çok Yakında Yeni Bir Arayüzle karşınızdayız! http://yeni.delphican.com/

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
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
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;
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Cevapla
#4
(24-04-2019, Saat: 15:54)Abdullah ILGAZ Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.@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
  Personel Yıllık İzin Hakediş Hesaplama Hakkında bkantur 2 188 04-10-2019, Saat: 18:15
Son Yorum: uparlayan
  Moduler Programlama Hakkinda TheEAK 4 318 18-09-2019, Saat: 10:43
Son Yorum: TheEAK
  IDE çoklu monitör kullanımı hakkında adelphiforumz 2 320 10-07-2019, Saat: 12:45
Son Yorum: adelphiforumz
  GarantiBBVA SFTP işlemleri hakkında adelphiforumz 4 464 09-07-2019, Saat: 10:43
Son Yorum: r3n4m3
  read ve write kullanımı hakkında alisahin 3 493 21-05-2019, Saat: 14:57
Son Yorum: alisahin



Konuyu Okuyanlar: 1 Ziyaretçi