Desimal point ayarı (çözüldü)

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
varyemez
Üye
Mesajlar: 262
Kayıt: 01 Oca 2009 11:00
Konum: Bursa
İletişim:

Desimal point ayarı (çözüldü)

Mesaj gönderen varyemez »

win xp de bölge ve dil seçeneklerinde desimal point virgül e ayarlı diyelim.
programımızda noktayı kullanabilmek için

DecimalSeparator := '.' yazıyorum..

dbedit veya dbgrid alanlarında float değerleri editlerken buralara nokta yazamıyorum. yani nokta tuşu çalışmıyor virgül çalışıyor ancak tabii sonra hata mesajı veriyor. Ancak sistemden virgül değil de nokta yaparsam desimal pointi o zaman sorun yok. Diyeceksiniz virgül kullan öyle kalsın ama bu değerler xml olarak gideceğinden mutlaka nokta olmak zorunda.

kısaca sorum şu , sistem ayarlarıyla oynamadan program içinden nasıl hallederim bunu..
En son varyemez tarafından 12 Nis 2011 12:16 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Desimal point ayarı

Mesaj gönderen sabanakman »

Decimal:='.' satırı sanırım biraz geç çalışıyor. Bu kodu projede diğer bileşenlerin bulunduğu unitler çalışmadan önce devreye girmesi için ilk çalışan unit'in initialization bloğuna yazarsanız sorun düzelecektir. Mesela ana formda en altta olabilir.

Kod: Tümünü seç

initialization
  DecimalSeparator := '.';
end.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
varyemez
Üye
Mesajlar: 262
Kayıt: 01 Oca 2009 11:00
Konum: Bursa
İletişim:

Re: Desimal point ayarı

Mesaj gönderen varyemez »

Formcreate olayına koydum zaten.
ayrıca değerler display olurken normal nokta şeklinde çıkıyor. sadece editlemeye kalkınca nokta diye bir karakter yok sanki... var bir bit yeniği ama , bakalım
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Re: Desimal point ayarı

Mesaj gönderen White Rose »

sabanakdam'ın yazdığı gibi yapın.
formun oncreate olayına değil initialization bloğuna yazın.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Desimal point ayarı

Mesaj gönderen sabanakman »

varyemez yazdı:Formcreate olayına koydum zaten.
ayrıca değerler display olurken normal nokta şeklinde çıkıyor. sadece editlemeye kalkınca nokta diye bir karakter yok sanki... var bir bit yeniği ama , bakalım
Örneği denedim, onCreate olayında sizin yaşadığınız sorun çıktı ortaya ama örnek verdiğim kodda ki gibi yapınca hiç sorun olmadan nokta karakteri ile ondalıklı sayı girişi yapılabiliyor.
sabanakman yazdı:....diğer bileşenlerin bulunduğu unitler çalışmadan önce devreye girmesi için ilk çalışan unit'in initialization bloğuna yazarsanız sorun düzelecektir. Mesela ana formda en altta olabilir.

Kod: Tümünü seç

initialization
  DecimalSeparator := '.';
end.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
quadr
Üye
Mesajlar: 69
Kayıt: 21 Haz 2003 10:12
İletişim:

Re: Desimal point ayarı

Mesaj gönderen quadr »

format setting i sistemden okumaması için false yap.unitlere sysutils i ekle.sonra istediğin formata ayarla.

Kod: Tümünü seç

begin
  Application.Initialize;
  Application.UpdateFormatSettings := False;
  ThousandSeparator := ',';
  DecimalSeparator  := '.';
  DateSeparator     := '.';
  TimeSeparator     := ':';
  ShortDateFormat   := 'dd.mm.yyyy';
  ShortTimeFormat   := 'hh:mm';
  LongTimeFormat    := 'hh:mm';

  Application.CreateForm(TfrmMain, frmMain);
  Application.Run;
end.

Ayakkabıyı sefaletten
Çok sonraları tanıdım
Öyle ufuklarda mı olurmuş Allah'ım
Giyer giyer koşardım
Toprağın dostluğundan
Oyuncaklar yaptım çamurdan
Tenimin rengini aldım topraktan
Sen bakma esmerliğim sonradan...

http://www.tcct.us
varyemez
Üye
Mesajlar: 262
Kayıt: 01 Oca 2009 11:00
Konum: Bursa
İletişim:

Re: Desimal point ayarı (çözüldü)

Mesaj gönderen varyemez »

Valla ne diyeyim , çocuklar gibi sevindim . @quadr ın dediği gibi initialization a koydum , canavar gibi çalışıyor. Hepinize çok teşekkürler.
Soran dağları aşmış
Sormayan doğru yoldan şaşmış..
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

Re: Desimal point ayarı (çözüldü)

Mesaj gönderen baloglurecep »

arkadaşlar selamlar... şaban hocam projemde aynı sorun vardı bende dediğiniz üzere Initialize bloğunda decimal sparator ü ve date sparatörü değiştiriyorum. parasal işlem yaparken eğer işletim sistemindeki ayarlara bağlı olarak decimal nokta ise (biz virgül kullanıyoruz) bir kaç işlemden sonra hata veriyor. hata verilen parasal özellikleiyle vermeyenler arasında bağlantı da yok. Bunun başka bir çözümü olablr mi?
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Desimal point ayarı (çözüldü)

Mesaj gönderen aslangeri »

s.a.
hata verdiği değerler bini aşmış olan değerler olablirmi. sadece decimalseperator yeterli olmayabilir. thousandseperator ü de set etmeyi deneyin.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

Re: Desimal point ayarı (çözüldü)

Mesaj gönderen baloglurecep »

Benim projeyi hazırlarken işletim sistemindeki default ayar decimal : , thasund: . date: . dete format : dd.mm.yyyy şeklinde promin ana sayfasının enlatına

Kod: Tümünü seç


  initialization
  DateSeparator := '.';
  DecimalSeparator:=',';
  ThousandSeparator := '.';
  ShortDateFormat := 'dd.mm.yyyy';

kodlarını ekliyorum. bazı pclerde decimal nokta thasund virgül oluyor date ayracı ise / oluyor. bunları bu şekilde sabitliyorum. sadece parasal alanlarda sıkıtı yapıyor tarihler istediğim gibi çalışıyor. ekrandaki bileşenler istediğim gibi ancak kaydet komutu verince parasal alanlarda tam paralarda sorun olmazken kuruşlu paralar hata veriyor.(hata çıkmıyor kilitlenyor cevap vermez hale geliyor)
Bunu nasıl çözeilirim.

15,00 ......................normal kaydediliyor
15,25 .......................kuruşlu verilerde kilitlenme yapıyor
Cevapla