Yorumları: 2.017
Konuları: 246
Kayıt Tarihi: 09-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 4.370 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ı: 820
Konuları: 135
Kayıt Tarihi: 07-12-2017
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 3.030 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.017
Konuları: 246
Kayıt Tarihi: 09-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 4.370 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.313
Konuları: 111
Kayıt Tarihi: 01-07-2017
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 6.983 Ü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ı: 483
Konuları: 80
Kayıt Tarihi: 28-12-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 2.019 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.017
Konuları: 246
Kayıt Tarihi: 09-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 4.370 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ı: 820
Konuları: 135
Kayıt Tarihi: 07-12-2017
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 3.030 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.
|