Yorumları: 2.164
Konuları: 261
Kayıt Tarihi: 09-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 4.674 Uzman
Merhabalar,
Bir müşterimin tüm bilgisayarlarında tarih ile ilgili bir takım sorunlar yaşıyorum,
Bilgisayarın tarih formatını dd.mm.yyyy şeklinde ayarlıyorum,
Database'den aldığım tarih bilgisini,
Bu durumun tam tersi de olabiliyor. Projenin genelinde o bilgisayardaki formatlamadan etkilenmeden nasıl çalışırım, decimalsperator belirtir gibi bir seçenek var mı tarih için ?
Yorumları: 850
Konuları: 149
Kayıt Tarihi: 07-12-2017
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 3.181 Uzman
29-01-2018, Saat: 18:52
(Son Düzenleme: 29-01-2018, Saat: 18:53, Düzenleyen: adelphiforumz.)
(29-01-2018, Saat: 18:13)yhackup Adlı Kullanıcıdan Alıntı: Merhabalar,
Bir müşterimin tüm bilgisayarlarında tarih ile ilgili bir takım sorunlar yaşıyorum,
Bilgisayarın tarih formatını dd.mm.yyyy şeklinde ayarlıyorum,
Database'den aldığım tarih bilgisini,
Bu durumun tam tersi de olabiliyor. Projenin genelinde o bilgisayardaki formatlamadan etkilenmeden nasıl çalışırım, decimalsperator belirtir gibi bir seçenek var mı tarih için ?
SQL Tarafında
SET DATEFORMAT YMD
Select * from .......
Delphi tarında aşağıdaki gibi bir yapı kullanabilirsin
procedure prc_SistemAyarlariniDuzenle;
var
Locale : LongInt;
PResult : Pointer;
dwData : Dword;
begin
Try
FormatSettings.CurrencyFormat := 3;
FormatSettings.NegCurrFormat := 8;
FormatSettings.ThousandSeparator := '.';
FormatSettings.DecimalSeparator := ',';
FormatSettings.CurrencyDecimals := 2;
FormatSettings.DateSeparator := '/';
FormatSettings.ShortDateFormat := 'dd/MM/yyyy';
FormatSettings.TimeSeparator:= ':';
FormatSettings.ShortTimeFormat := 'hh:mm';
Locale := 1055;
SetLocaleInfo(Locale, LOCALE_SSHORTDATE, PChar(FormatSettings.ShortDateFormat));
SetLocaleInfo(Locale, LOCALE_SDECIMAL, PChar(','+chr(0)));
SetLocaleInfo(Locale, LOCALE_STHOUSAND, PChar('.'+chr(0)));
SetLocaleInfo(Locale, LOCALE_SMONDECIMALSEP, PChar(','+chr(0)));
SetLocaleInfo(Locale, LOCALE_SMONTHOUSANDSEP, PChar('.'+chr(0)));
SetLocaleInfo(Locale, LOCALE_ICURRENCY, PChar('3'+chr(0)));
SetLocaleInfo(Locale, LOCALE_INEGCURR, PChar('8'+chr(0)));}
SendMessageCallback(HWND_BROADCAST,WM_WININICHANGE,0,0,@PResult,dwData);
except on e : exception do
;
{
on E: Exception do
begin
Raise(E);
end;
}
End;
end;
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz.
Yorumları: 2.164
Konuları: 261
Kayıt Tarihi: 09-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 4.674 Uzman
Teşekkürler,
Projede çok fazla SQL kullanımı var hepsine ayar çekmem yıllarımı alır
FormatSettings Xe2'de yokmu ? Orada doğrudan DecimalSeparator yazıyordum ama Seatle'sa sizin yazdığınız gibi FormatSettings ile erişilebiliyor bir çok seçeneğe
Yorumları: 1.311
Konuları: 112
Kayıt Tarihi: 01-07-2017
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 7.023 Üstad
Aynı sorun bir AHBS programında da mevcut idi ama adamlar rahat direkt yapıştırmışlar hata mesajını kullanıcıdan değişmesini istiyorlar
Yorumları: 515
Konuları: 89
Kayıt Tarihi: 28-12-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 2.182 Programcı
30-01-2018, Saat: 09:09
(Son Düzenleme: 30-01-2018, Saat: 11:13, Düzenleyen: SimaWB.)
(30-01-2018, Saat: 08:47)cinarbil Adlı Kullanıcıdan Alıntı: (29-01-2018, Saat: 21:23)yhackup Adlı Kullanıcıdan Alıntı: Teşekkürler,
Projede çok fazla SQL kullanımı var hepsine ayar çekmem yıllarımı alır 
FormatSettings Xe2'de yokmu ? Orada doğrudan DecimalSeparator yazıyordum ama Seatle'sa sizin yazdığınız gibi FormatSettings ile erişilebiliyor bir çok seçeneğe
Xe2 de çalışır mı denemedim.
Ben aşağıdaki fonksiyonu kullanıyorum.
procedure Bolgesel_Ayar;
var
r: tregistry;
begin
r := tregistry.Create;
try
r.RootKey := HKEY_CURRENT_USER;
if r.OpenKey('Control Panel\International', true) then
begin
r.WriteString('sDate', '.');
r.WriteString('sShortDate', 'dd.MM.yyyy');
r.WriteString('sDecimal', ','); // sayı
r.WriteString('sThousand', '.'); // sayı
r.WriteString('sMonThousandSep', '.'); // para birimi
r.WriteString('sMonDecimalSep', ','); // para birimi
r.closekey;
end;
finally
r.Free;
end;
end;
programın ana formunun oncreate olayında kullanıyorum. yukarıdakileri notlarımdan kes yapıştır yaptım yanlış anlaşılmasın
diye çalışan şekli
bolgesel_ayar; // fonksiyonu çağır ve tarih, ondalık ayarlarını yap.
// windows versiyon veya yetki ayarlarında sorun olur yapamaz ise aşağıda kodlarla
// kontrol edilerek uyarı veriliyor delphi tarafından değiştiriliyor.
[ars=delphi] if (formatsettings.ThousandSeparator <> '.') then begin
Application.MessageBox('Bin ayracı '+'.'+' olmalı. Değiştiriliyor','Uyarı',MB_OK + MB_ICONWARNING);
formatsettings.ThousandSeparator := '.';
end;
if (formatsettings.DecimalSeparator <> ',') then begin
Application.MessageBox('Ondalık ayracı '+','+' olmalı. Değiştiriliyor','Uyarı',MB_OK + MB_ICONWARNING);
formatsettings.DecimalSeparator := ',';
end;
if (formatsettings.DateSeparator <> '.') then begin
Application.MessageBox('Tarih ayracı '+'.'+' olmalı. Değiştiriliyor','Uyarı',MB_OK + MB_ICONWARNING);
formatsettings.DateSeparator := '.';
end;
// Formatsetting le ilgili diğer ayarlar
formatsettings.ShortDateFormat := 'dd.mm.yyyy';
formatsettings.LongDateFormat := 'dd.mm.yyyy dddd';
formatsettings.ShortTimeFormat := 'HH:mm';
formatsettings.LongTimeFormat := 'HH:mm : s s'; // burayı bitişik yazınca üzüntülü ifade ekliyor o nedenle s s ler arası boşluk ekledim
formatsettings.TimeSeparator := ':';
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Yorumları: 2.164
Konuları: 261
Kayıt Tarihi: 09-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 4.674 Uzman
Uygulamanın geneline hitap etmiyor formatsettigs, Örneğin datetime alanlarında ki formatı da değiştirirmem gerekiyor.
Bu kod uygulamanın tamamına etki ediyor, fakat bilgisayarın ayarlarını da değiştiriyor. Sadece benim uygulama düzeyimde değiştiremezmiyim.
SetLocaleInfo(Locale, LOCALE_SSHORTDATE, PChar(FormatSettings.ShortDateFormat));
SetLocaleInfo(Locale, LOCALE_SDECIMAL, PChar(','+chr(0)));
SetLocaleInfo(Locale, LOCALE_STHOUSAND, PChar('.'+chr(0)));
SetLocaleInfo(Locale, LOCALE_SMONDECIMALSEP, PChar(','+chr(0)));
SetLocaleInfo(Locale, LOCALE_SMONTHOUSANDSEP, PChar('.'+chr(0)));
SetLocaleInfo(Locale, LOCALE_ICURRENCY, PChar('3'+chr(0)));
SetLocaleInfo(Locale, LOCALE_INEGCURR, PChar('8'+chr(0)));}
Yorumları: 850
Konuları: 149
Kayıt Tarihi: 07-12-2017
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 3.181 Uzman
30-01-2018, Saat: 11:05
(Son Düzenleme: 30-01-2018, Saat: 11:06, Düzenleyen: adelphiforumz.)
(30-01-2018, Saat: 09:48)yhackup Adlı Kullanıcıdan Alıntı: Uygulamanın geneline hitap etmiyor formatsettigs, Örneğin datetime alanlarında ki formatı da değiştirirmem gerekiyor.
Bu kod uygulamanın tamamına etki ediyor, fakat bilgisayarın ayarlarını da değiştiriyor. Sadece benim uygulama düzeyimde değiştiremezmiyim.
SetLocaleInfo(Locale, LOCALE_SSHORTDATE, PChar(FormatSettings.ShortDateFormat));
SetLocaleInfo(Locale, LOCALE_SDECIMAL, PChar(','+chr(0)));
SetLocaleInfo(Locale, LOCALE_STHOUSAND, PChar('.'+chr(0)));
SetLocaleInfo(Locale, LOCALE_SMONDECIMALSEP, PChar(','+chr(0)));
SetLocaleInfo(Locale, LOCALE_SMONTHOUSANDSEP, PChar('.'+chr(0)));
SetLocaleInfo(Locale, LOCALE_ICURRENCY, PChar('3'+chr(0)));
SetLocaleInfo(Locale, LOCALE_INEGCURR, PChar('8'+chr(0)));}
Aşağıdaki yapıyı projein ilk açılışına ekle
bu işlemler tüm formlarında aktif hale gelir
yada ortak bir procedure yapıp bir önceki kullanımını tüm formların create kısmına eklemen gerekir
karar senin
initialization
Try
FormatSettings.CurrencyFormat := 3;
FormatSettings.NegCurrFormat := 8;
FormatSettings.ThousandSeparator := '.';
FormatSettings.DecimalSeparator := ',';
FormatSettings.CurrencyDecimals := 2;
FormatSettings.DateSeparator := '.';
FormatSettings.ShortDateFormat := 'MM.dd.yyyy';
FormatSettings.TimeSeparator := ':';
FormatSettings.ShortTimeFormat := 'hh:mm';
Finally
End;
end.
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz.
|