Sistem Bölgesel Ayarlarını Alma

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Sistem Bölgesel Ayarlarını Alma

Mesaj gönderen mussimsek »

Merhaba,

Delphide dile özgü bölgesel ayarları (regional settings) gösteren değişkenler var. ThousandSeparator, DecimalSeparator, DateSeparator... gibi. İsterseniz programınızda bunları değiştirebiliyorsunuz. Ancak bu değerleri değiştirdiğiniz zaman, Windowsta bu değişkenlerin değeri nedir lazım olabilir. GetLocaleInfo ile Windowstaki bölgesel ayarlar alınabilir. Örnek 2 fonksiyon aşağıda :

Kod: Tümünü seç

function GetLocaleThousandSeparator: string;
var
  L: Integer;
  Buffer: array[0..255] of Char;
  DefaultLCID: LCID;
begin
  DefaultLCID := GetThreadLocale;
  L := GetLocaleInfo(DefaultLCID, LOCALE_STHOUSAND, Buffer, SizeOf(Buffer));
  if L > 0 then
    SetString(Result, Buffer, L - 1)
  else
    Result := ',';
end;

function GetLocaleDecimalSeparator: string;
var
  L: Integer;
  Buffer: array[0..255] of Char;
  DefaultLCID: LCID;
begin
  DefaultLCID := GetThreadLocale;
  L := GetLocaleInfo(DefaultLCID, LOCALE_SDECIMAL, Buffer, SizeOf(Buffer));
  if L > 0 then
    SetString(Result, Buffer, L - 1)
  else
    Result := '.';
end;
Bu fonksiyonla kullanacağınız sabitler :

LOCALE_SCURRENCY, LOCALE_ICURRENCY, LOCALE_INEGCURR, LOCALE_SDECIMAL, LOCALE_ICURRDIGITS, LOCALE_STHOUSAND, LOCALE_SDATE, LOCALE_STIME ... (Devamı windows.pas'ta)

Kolay gelsin.
Kullanıcı avatarı
Merchant
Üye
Mesajlar: 102
Kayıt: 17 Eki 2006 01:51

Mesaj gönderen Merchant »

Paylaştığınız için sağolun.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Verdiğiniz bilgi ve gösterdiğiniz yol çok güzel. Ne zamandır böyle bir konuda araştırma yapmayı düşünüyordum. Bu ipuçları çok işime yaradı. Paylaşım için teşekkürler.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
drbastem
Üye
Mesajlar: 15
Kayıt: 03 Oca 2008 10:17
İletişim:

Re: Sistem Bölgesel Ayarlarını Alma

Mesaj gönderen drbastem »

Sayın Hocam Bilgiler için Çok Teşekkürler. Bayağı işime yaradı. Yanlız Windowsun defaultunda basamak gruplandırmayı . ondalık simde , virgul geliyor. biz bunu denetim masasından değiştirsekde güncellemde tekrar aynı halinde geliyor. Her ne kadar delphi başlamdan decimalseparator ifadesi ile düzeltsekte bazı hazır componetlerde işe yaramıyor. Bunun için Registry yazmak lazım. Hazır komponetler registriden alıyorlar. yada Windows. pas dan.
Örnek Olarak Bu Fonsiyon proğram başlayınca
formun onShow olayına
if ThousandSeparator='.' then begin
regNoktaVirgul;
application.terminate;
close;
End;


procedure regNoktaVirgul;
var RegDosya: TRegistry ;
begin
RegDosya := TRegistry.Create;
RegDosya.RootKey :=HKEY_CURRENT_USER;
RegDosya.OpenKey('\Control Panel\International', True);
if RegDosya.ValueExists('sDecimal') then
if RegDosya.OpenKey('\Control Panel\International', False) then
begin
RegDosya.WriteString('sDecimal','.');
RegDosya.CloseKey;
RegDosya.Free;
end;

RegDosya := TRegistry.Create;
RegDosya.RootKey :=HKEY_CURRENT_USER;
RegDosya.OpenKey('\Control Panel\International', True);
if RegDosya.ValueExists('sThousand') then
if RegDosya.OpenKey('\Control Panel\International', False) then
begin
RegDosya.WriteString('sThousand',',');
end;
RegDosya.CloseKey;
RegDosya.Free;

end;
dr_ebuzer
Üye
Mesajlar: 30
Kayıt: 29 Eki 2005 08:26

Re: Sistem Bölgesel Ayarlarını Alma

Mesaj gönderen dr_ebuzer »

selam kardeşim kusura bakma arama yaparken bölgesel diye aramadığımdan bulamadım gönderdiğin cevap için teşekkür ederim.
yalnız ben function kullanmayı pek bilmiyorum bu kodlarıda daha önce kullanmadığımdan bunu biraz açıklıyabilirmisin mantığını anlıyabilmem için
yani şöyle
mesela:
var//değişken tanımlama
begin//başla
yani bu kodlarla ne demek istiyoruz
Cevapla