Para birimleri

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
Serhat
Üye
Mesajlar: 203
Kayıt: 27 Tem 2014 11:10

Para birimleri

Mesaj gönderen Serhat »

Merhaba;

Kaç tane kod inceledim hatırlamıyorum, çözümde bulamadım.

Örnek:
0,55 -----------> Elli beş kuruş
3,75 -----------> Üç tl yetmiş beş kuruş
14,35 --------->On dört tl otuz beş kuruş
65.500 -------->Atmış beş bin beş yüz tl
84.550,10 ---> Seksen dört bin beş yüz elli tl on kuruş.

Bu para birimlerini edite sayı girildiğinde otomatik olarak yazılmasını ve hesaplamasını nasıl yaptıra bilirim?

Kod: Tümünü seç

procedure ribuan(edit: TEdit);
var
  sRupiah: string;
  iRupiah: Currency;
begin
  sRupiah := edit.Text;
  sRupiah := StringReplace(sRupiah, ',', '', [rfReplaceAll, rfIgnoreCase]);
  sRupiah := StringReplace(sRupiah, '.', '', [rfReplaceAll, rfIgnoreCase]);
  iRupiah := StrToCurrDef(sRupiah, 0);
  edit.Text := FormatCurr('#,###', iRupiah);
  edit.SelStart := length(edit.Text);
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
  ribuan(Edit1);
end;

Kod: Tümünü seç

function MoneyConvert(edit: TEdit): String;
var
  Nilai: string;
  AngkaRupiah: Currency;
begin
  if edit.Text = '' then
    Exit;
  Nilai := edit.Text;
  Nilai := StringReplace(Nilai, ',', '', [rfReplaceAll, rfIgnoreCase]);
  Nilai := StringReplace(Nilai, '.', '', [rfReplaceAll, rfIgnoreCase]);
  AngkaRupiah := StrToCurrDef(Nilai, 0);
  edit.Text := FormatCurr('#,###', AngkaRupiah);
  edit.SelStart := length(edit.Text);
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
  MoneyConvert(Edit2);
end;
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Para birimleri

Mesaj gönderen SimaWB »

En son SimaWB tarafından 06 Tem 2017 03:13 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
There's no place like 127.0.0.1
Kullanıcı avatarı
Serhat
Üye
Mesajlar: 203
Kayıt: 27 Tem 2014 11:10

Re: Para birimleri

Mesaj gönderen Serhat »

Hocam vermiş olduğunuz link dahil bir çok kod inceledim, banka uygulamaları bu işin nasıl çözmüş anlamadım.
örnek hesabıma bakıyorum 13.601,13 TL benim bunu edite yaptırmam için ne yapma gerek? kodlarla çözemedim durumu.

kullanıcının edite gireceği rakamı bilemediğim için 1360113 veya 075 gibi sayı girdiğinde bu içi kod tarafında çözmeliyim.
En son Serhat tarafından 06 Tem 2017 02:03 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: Para birimleri

Mesaj gönderen adelphiforumz »

"SimaWB" nin önerisindeki mask olayını incele
Yok veri dışardan geliyor ne olduğu belli değil dersen benim önerim
1. elindeki veriyi ters çevir
2. ilk rakam olmayana kadar olanı al
3. elde ettiğin veriyi tekrar ters çevir ve bunu kuruş kabul et
4. kaldığın yerden verinin sonuna kadar rakamları al diğerlerini çöp kabul et
5. bu veriyide al tekrar ters çevir
6. buda sana tam say kısmını verir
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Kullanıcı avatarı
Serhat
Üye
Mesajlar: 203
Kayıt: 27 Tem 2014 11:10

Re: Para birimleri

Mesaj gönderen Serhat »

adelphiforumz yazdı:"SimaWB" nin önerisindeki mask olayını incele
Yok veri dışardan geliyor ne olduğu belli değil dersen benim önerim
1. elindeki veriyi ters çevir
2. ilk rakam olmayana kadar olanı al
3. elde ettiğin veriyi tekrar ters çevir ve bunu kuruş kabul et
4. kaldığın yerden verinin sonuna kadar rakamları al diğerlerini çöp kabul et
5. bu veriyide al tekrar ters çevir
6. buda sana tam say kısmını verir

Aynı anda yazmışız. Bu yazdıklarınızın Türkçe meali var mı? anlamadım da :|
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Para birimleri

Mesaj gönderen SimaWB »

Ben problemi yanlış anlamışım kusura bakmayın.
There's no place like 127.0.0.1
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: Para birimleri

Mesaj gönderen adelphiforumz »

"Aynı anda yazmışız. Bu yazdıklarınızın Türkçe meali var mı? anlamadım da :|"

Aslında türkçe yazmıştım fakat
Sanırım aşağıdaki gibi türkçesini istedin sanırım :)

Kod: Tümünü seç

procedure TForm2.Button1Click(Sender: TObject);
  function fnc_StrToFloat(pStr, DecSeperator : String):String;
    var
      Str, Sonuc, Tam, Ond : string ;
      Swc : Boolean;
      I : Integer;
  begin
    Sonuc := '0';
    Tam := '';
    Ond := '';
    Swc := False;
    I := 0;
    Str := ReverseString(Edit1.Text);
    While I < Length(Str) do
    Begin
        I := I + 1;
        If Str[I] In ['0'..'9'] then
        Begin
            If Swc = False then
                Ond := Ond + Copy(Str, I, 1)
            Else
                Tam := Tam + Copy(Str, I, 1)
        End
        Else
        Begin
           if Ond = '' then Continue;
           Swc := True
        End
    End;

    If Tam = '' then
        Sonuc := ReverseString(Ond)
    Else
        Sonuc := ReverseString(Tam) + DecSeperator + ReverseString(Ond);
     Result := Sonuc;
  end;
begin

  Edit2.Text := fnc_StrToFloat(Edit1.Text, '.');
end;
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Kullanıcı avatarı
Serhat
Üye
Mesajlar: 203
Kayıt: 27 Tem 2014 11:10

Re: Para birimleri

Mesaj gönderen Serhat »

:eyo: :eyo: :eyo: :eyo: :eyo: :eyo: :eyo: :eyo:

Sanırım durumu anlatamadım yada ben para birimleri ile ilgili hiç bir şey bilmiyorum?


Örnek:
edite 055-----------> 0,55 -----------> Elli beş kuruş
edite 375-----------> 3,75 -----------> Üç tl yetmiş beş kuruş
edite 1435---------->14,35 --------->On dört tl otuz beş kuruş
edite 65500--------->65.500 -------->Atmış beş bin beş yüz tl
edite 8455010-----> 84.550,10 ---> Seksen dört bin beş yüz elli tl on kuruş yazılacak bu mümkün değil mi?
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Para birimleri

Mesaj gönderen freeman35 »

bence değil,
375 -> bu üç yüz yetmiş beş "kuruş" mu? Yok üç yüz yetmiş beş "Lira" mı ? bunun ayrımını nasıl yapacaksın? ancak length <2 ise bu tl dir büyük ise son 2 hane kuruştur deyip formatlattırırsan olabilir. Şu yeni mobil yazar kasalarda ki gibi, tam sayıda olsa sonuna 2 sıfır girmeyi şart koşarsın. length kullanırkende ondalık ve binlik ayraçlarını silmek gerek.
en mantıklı yöntem currency edit kullanman.
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Para birimleri

Mesaj gönderen ertank »

Alternatif fikir olması açısından;

Tam sayı kısmı için bir edit, ondalık kısmı için ikinci bir edit, ekranda her iki edit yan yana duracak şekilde tasarlayarak kullanmakta mümkün olabilir. Ayrıca,

Kod: Tümünü seç

Edit1.NumbersOnly := True;
Edit2.NumbersOnly := True;
şeklinde bir kod kullanarak veya Object Inspector içinden bu şekilde düzenleyerek içlerine sadece rakam yazılması sağlanabilir. Bu durumda her iki Edit nesnesinin Text özelliklerinin boş olup olmadığının veya boş bırakılamamasının kontrolü gerekecektir. Zira kullanıcı örnek kod Edit alanlarına yazarken rakam yazma zorunluluğu getirip silme ile ilgili bir zorunluluk getirmez.

Rakamı sayıya çevirme ile ilgili forum içinde örnekler olduğunu hatırlıyorum.

NOT: Örnek son sürüm Delphi için verilmiştir. Delphi 7 ile çalışmayabilir.
Kullanıcı avatarı
Serhat
Üye
Mesajlar: 203
Kayıt: 27 Tem 2014 11:10

Re: Para birimleri

Mesaj gönderen Serhat »

öneriler için teşekkür ederim fakat bu bu şekilde olmamalı bir edit üzerinden bunu rahatlıkla yapmalıyım bankara bu işi nasıl çözmüş bilemiyorum hesabına bakıyor rahatlıkla hesabıma 13.601,13 TL gibi parayı görebiliyorsunuz.
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Para birimleri

Mesaj gönderen SimaWB »

Göstermek ayrı bir şey. Gösterme kısmı çok kolay. DBGrid'de falan bulunan DisplayFormat yada FormatFloat vs. fonksiyonlarla "elinizdeki veriyi" kolaylıkla istediğiniz formatta gösterebilirsiniz.

Ama sizin yapmak istediğiniz(eğer yanlış anlamadıysam), kullanıcı henüz edite veri girişi yaparken formatı ayarlamak.
Yine yanlış anlamadıysam
edite 055-----------> 0,55 -----------> Elli beş kuruş
şeklinde yazdığınız açıklama; kullanıcı edite 055 yazarken onu 0,55 olarak göstermesini istiyorsunuz.

Eğer bu tahminlerim doğruysa; editin OnKeyPress olayında biraz uğraşmak gerekecek sanırım :)
There's no place like 127.0.0.1
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Para birimleri

Mesaj gönderen SimaWB »

Görmüşsünüz muhtemelen ama yine de paylaşmak isterim.
Çok uzun zaman önce paylaşılmış bir Edit bileşeni var, belki işinize yarayabilir:
viewtopic.php?f=19&t=5397&hilit=thusoedit
There's no place like 127.0.0.1
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: Para birimleri

Mesaj gönderen adelphiforumz »

Sanırım bende seni yanlış anlıyorum
Netleştirmek adına senin isteğin
1. veriyi dediğin şekilde göstermekmi
2. veriyi girerken noktasız ve virgülsüz şekilde girip sonra hücreden çıkınca istediğin keşilde görünmesimi
3. veriyi giriş sırasında hiç bir ayıraç koyamadan her rakama bastığında görmekmi

Not : Eğer bunu yapan bir banka uygulamasının görüntüsü varsa onu paylaş bizde nedemek istediğini net anlayıp yardımcı olmaya çalışalım
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Kullanıcı avatarı
Serhat
Üye
Mesajlar: 203
Kayıt: 27 Tem 2014 11:10

Re: Para birimleri

Mesaj gönderen Serhat »

Olay şu, kullanıcı editten sayı girmeye başlayınca 123456 gibi

1. örnek sayı 15
0,15 olacak

2. örnek sayı 130
1,30 olacak

3. örnek sayı 1535
1.535 olacak

4. örnek sayı 250035
2.500,35 olacak

Ben bir şeyler yapmaya çalıştım ama olmadı bir süre sonra anlamsız durum ortaya çıkıyor

Kod: Tümünü seç

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if (Length(Edit1.Text) = 1) and (Key <> #08) then
  begin
    Edit1.Text := Edit1.Text + '.';
    Edit1.SelStart := Length(Edit1.Text);
  end;
  if (Length(Edit1.Text) = 5) and (Key <> #08) then
  begin
    Edit1.Text := Edit1.Text + ',';
    Edit1.SelStart := Length(Edit1.Text);
  end;
end;
Cevapla