Yorumları: 953
Konuları: 124
Kayıt Tarihi: 06-07-2017
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 6.383 Üstad
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
Dip: Sabit string array kullanmak serbesttir.
Yorumları: 910
Konuları: 69
Kayıt Tarihi: 30-06-2017
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 8.494 Üstad
(18-09-2017, Saat: 11:59)Abdullah Ilgaz Adlı Kullanıcıdan Alıntı: 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 
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;
YouTube Delphi Tips
"Mantıklı adam kendini dünyaya uyarlar; mantıksız adam ise dünyayı kendine uydurmakta inat eder. Bu nedenle, tüm ilerleme o inatçı adama bağlıdır." - George Bernard Shaw
Yorumları: 4.249
Konuları: 381
Kayıt Tarihi: 07-07-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 17.135 Üstad
Merhaba,
Puan ihtiyacım olduğundan değil, kaynak olsun diye yazıyorum.
Uses RTTI
ShowMessage(
TRttiEnumerationType.GetName<TOSVersion.TArchitecture>(TOSVersion.Architecture)
);
Enum tip tanımı
Sonuç:
DelphiCan'dır!
Yorumları: 4.249
Konuları: 381
Kayıt Tarihi: 07-07-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 17.135 Üstad
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.
DelphiCan'dır!
Yorumları: 253
Konuları: 16
Kayıt Tarihi: 26-09-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 3.279 Uzman
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.
Yorumları: 910
Konuları: 69
Kayıt Tarihi: 30-06-2017
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 8.494 Üstad
Aynı amaca ulaşan kaç tane kod örneği çıkacağını çok merak ediyorum
YouTube Delphi Tips
"Mantıklı adam kendini dünyaya uyarlar; mantıksız adam ise dünyayı kendine uydurmakta inat eder. Bu nedenle, tüm ilerleme o inatçı adama bağlıdır." - George Bernard Shaw
Yorumları: 4.249
Konuları: 381
Kayıt Tarihi: 07-07-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 17.135 Üstad
18-09-2017, Saat: 14:29
(Son Düzenleme: 18-09-2017, Saat: 14:30, Düzenleyen: Fesih ARSLAN.)
(18-09-2017, Saat: 11:59)Abdullah Ilgaz Adlı Kullanıcıdan Alıntı: 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 
Dip: Sabit string array kullanmak serbesttir.
Bu konuya yazdığım 2 cevap/yorumdan toplam 32 puan almışım.  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;
* Tuğrul HELVACI +/- 100 Puan verebiliyor.
* Abdullah Ilgaz +/- 10 Puan verebiliyor.
* ismailkocacan +/- 10 Puan verebiliyor.
DelphiCan'dır!
Yorumları: 15
Konuları: 0
Kayıt Tarihi: 03-09-2017
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 299 Acemi
Şö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..
Yorumları: 910
Konuları: 69
Kayıt Tarihi: 30-06-2017
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 8.494 Üstad
07-07-2020, Saat: 22:14
(Son Düzenleme: 03-11-2020, Saat: 10:54, Düzenleyen: uparlayan.)
TypInfo kullanmak isteyenler için;
type
TFalan = (Falan, Filan, Inter, Milan);
implementation
uses
System.TypInfo;
procedure Test;
var
x: TFalan;
begin
for x := Low(TFalan) to High(TFalan) do ShowMessage( GetEnumName(TypeInfo(TFalan), Ord(x)) );
end;
YouTube Delphi Tips
"Mantıklı adam kendini dünyaya uyarlar; mantıksız adam ise dünyayı kendine uydurmakta inat eder. Bu nedenle, tüm ilerleme o inatçı adama bağlıdır." - George Bernard Shaw
Yorumları: 1.504
Konuları: 83
Kayıt Tarihi: 05-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 12.318 Üstad
Falan, Filan, İnter, Milan :-D
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
|