Tüm Platformlar için Hızlı Uygulama Geliştirme Kitap Yayın Süreci
Kitap gözden geçirilmek üzere BTG (Bilgi ve Teknoloji Grubu) 'na gönderildi. 05.10.2018-14:10
BTG (Bilgi ve Teknoloji Grubu) tarafından iki sayfalık bir reklam tasarımı bekleniyor. 08.10.2018 - 15:30

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 3 oy
  • 1
  • 2
  • 3
  • 4
  • 5
String üzerinden enum değeri çağırma
#1
Merhaba,

Bildiğiniz üzere enum yapısı gereği string değerleri muhafaza etmiyor. Peki enum içindeki değerleri string ile eşleştirip enum değerini vererek string alabileceğimiz bir fonksiyonu nasıl yaparız? İlk çözümleyen +10 puanı alır. Kolay gelsin Smile


Dip: Sabit string array kullanmak serbesttir.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Cevapla
#2
(18-09-2017, Saat: 11:59)Abdullah Ilgaz Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba,

Bildiğiniz üzere enum yapısı gereği string değerleri muhafaza etmiyor. Peki enum içindeki değerleri string ile eşleştirip enum değerini vererek string alabileceğimiz bir fonksiyonu nasıl yaparız? İlk çözümleyen +10 puanı alır. Kolay gelsin Smile


Dip: Sabit string array kullanmak serbesttir.

interface 

type
  TDil = (TR, EN, AR, RU);
  TDilHelper = record helper for TDil
    private
    protected
    public
      function SetDil(aDil: String): TDil; overload;
      function SetDil(aDilID: Integer): TDil; overload;
      function ToString: string;
      function ID: Integer;
  end;

implementation

{ TDilHelper }

function TDilHelper.SetDil(aDil: String): TDil;
begin
 if (aDil = 'TR') then Result := TR else
 if (aDil = 'EN') then Result := EN else
 if (aDil = 'AR') then Result := AR else
 if (aDil = 'RU') then Result := RU;
 Self := Result;
end;

function TDilHelper.ID: Integer;
begin
 case Self of
   TR: Result := 1;
   EN: Result := 2;
   AR: Result := 3;
   RU: Result := 4;
 end;
end;

function TDilHelper.SetDil(aDilID: Integer): TDil;
begin
 case aDilID of
   1: Result := TR;
   2: Result := EN;
   3: Result := AR;
   4: Result := RU;
 end;
 Self := Result;
end;

function TDilHelper.ToString: string;
begin
 case Self of
      TR : Result := 'TR';
      EN : Result := 'EN';
      AR : Result := 'AR';
      RU : Result := 'RU';
      else Result := 'TR'; // Default değerdir...
 end;
end;
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
Cevapla
#3
Merhaba,
Puan ihtiyacım olduğundan değil, kaynak olsun diye yazıyorum.  Cool

Uses RTTI

 ShowMessage(
  TRttiEnumerationType.GetName<TOSVersion.TArchitecture>(TOSVersion.Architecture)
);

02.png


Enum tip tanımı

03.png

Sonuç: 

01.png
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#4
Klasik bir yöntem; Her enum tipini bir sabit değere eşlemek.

Örnek:

Enum Tip tanımı

type
  TTMSMQTTHataTipleri = record
   Tip: TTMSMQTTConnectionStatus;
   Ad: String;
 end;

Sabit tanımı

const
  TMSMQTTHataTipleri: array [0 .. 8] of TTMSMQTTHataTipleri =
   ((Tip: TTMSMQTTConnectionStatus.csNotConnected;
   Ad: 'Sunucu: Bağlantı sağlanamadı'),
   (Tip: TTMSMQTTConnectionStatus.csConnectionRejected_InvalidProtocolVersion;
   Ad: 'Sunucu: Protokol versiyon uyuşmazlığı hatası'),
   (Tip: TTMSMQTTConnectionStatus.csConnectionRejected_InvalidIdentifier;
   Ad: 'Sunucu: Tanımlama hatası'),
   (Tip: TTMSMQTTConnectionStatus.csConnectionRejected_ServerUnavailable;
   Ad: 'Sunucu: Sunucuya ulaşılamıyor'),
   (Tip: TTMSMQTTConnectionStatus.csConnectionRejected_InvalidCredentials;
   Ad: 'Sunucu: Kimlik Bilgileri hatası'),
   (Tip: TTMSMQTTConnectionStatus.csConnectionRejected_ClientNotAuthorized;
   Ad: 'Sunucu: Yetki hatası'),
   (Tip: TTMSMQTTConnectionStatus.csConnectionLost;
   Ad: 'Sunucu: bağlantı koptu'), (Tip: TTMSMQTTConnectionStatus.csConnecting;
   Ad: 'Sunucu: bağlanıyor'), (Tip: TTMSMQTTConnectionStatus.csReconnecting;
   Ad: 'Sunucu: Yeniden bağlantı sağlanıyor'));

Kullanımı

TMSMQTTHataTipleri[ord(AStatus)].Ad
 

AStatus: Enum değeridir.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#5
program Project1;

{$APPTYPE CONSOLE}
{$R *.res}

uses
 System.SysUtils,
 System.Generics.Defaults,
 System.Generics.Collections;

type
 Tlang = (TR, EN, TAR);

function GetNameFromEnum(ALang: Tlang): string;
var
 ADict: TDictionary<Tlang, string>;
begin
 Result := '';
 ADict := TDictionary<Tlang, string>.Create();
 try
   ADict.Add(TR, 'Türkçe');
   ADict.Add(EN, 'İngilazca');
   ADict.Add(TAR, 'Tarzanca');
   ADict.TryGetValue(ALang, Result);
 finally
   ADict.Free;
 end;
end;

begin
  Writeln(GetNameFromEnum(TR));
end.
WWW
Cevapla
#6
Aynı amaca ulaşan kaç tane kod örneği çıkacağını çok merak ediyorum Smile
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
Cevapla
#7
(18-09-2017, Saat: 11:59)Abdullah Ilgaz Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba,

Bildiğiniz üzere enum yapısı gereği string değerleri muhafaza etmiyor. Peki enum içindeki değerleri string ile eşleştirip enum değerini vererek string alabileceğimiz bir fonksiyonu nasıl yaparız? İlk çözümleyen +10 puanı alır. Kolay gelsin Smile


Dip: Sabit string array kullanmak serbesttir.

Bu konuya yazdığım 2 cevap/yorumdan toplam 32 puan almışım. Blush   10 Puana razıydım. 
Şaka bir tarafa; şüphesiz ki bu tip sorular/algoritmalar, platformumuza büyük katkılar sağlıyor. Bu vesile ile sorunuz ve sağlamış olduğunuz katkıdan dolayı teşekkür ederim.
Diğer üyelerimizin de bu akıma (soru/cevap) katılmasını bekliyorum.
Yeri gelmişken belirtmekte fayda var;  formda özel bir üyelik grubu (AlgoritmikBeyin) oluşturduk. 
AlgoritmikBeyin grubu, üyelerin bildiklerini paylaşması (veya içindeki devi uyandırma da diyebiliriz. Bazı üyelerimiz bildiği halde, bilgisini paylaşmıyor/yazmaya üşeniyor) veya bilmese bile fikir yürütmesini teşvik etmek için soru soran üyelerimizden oluşuyor. 
Sormuş oldukları soruya doğru veya en yakın cevabı veren üyelere, kendi kanaatleri doğrultusunda yüksek puanlar verebiliyorlar.
Bu grupta şimdilik 2 üyemiz ve bir Süper Moderatörümüz var;

* Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol +/- 100 Puan verebiliyor.
* Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol +/- 10 Puan verebiliyor.
* Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol +/- 10 Puan verebiliyor.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#8
Şöyle bir kullanım da yapılabilir:

type

  TMyEnum = (e1, e2,  e3, e5, e4);

const
  cEnumStr : array [TMyEnum] of string = ('Enum1', 'Enum2', 'Enum3', 'Enum5', 'Enum4');

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  e: TMyEnum;
begin
  for e := Low(TMyEnum) to High(TMyEnum) do
    ShowMessage(cEnumStr[e]);
end;

Me on the move..
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Array of Const to String (Çözüldü) uparlayan 14 1.374 19-09-2017, Saat: 11:44
Son Yorum: ismailkocacan



Konuyu Okuyanlar: 1 Ziyaretçi