delphi4arab منتديات دلفي للعرب
التحكم في الإعدادات الإقليمية Regional Settings - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي التقنية (https://delphi4arab.net/forum/forumdisplay.php?fid=6)
+--- قسم : دلفي والتعامل مع النظام و الذاكرة (https://delphi4arab.net/forum/forumdisplay.php?fid=20)
+--- الموضوع : التحكم في الإعدادات الإقليمية Regional Settings (/showthread.php?tid=656)



التحكم في الإعدادات الإقليمية Regional Settings - kachwahed - 03-03-2009

بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله

الإشكال:
يسأل الكثيرون عن كيفية ضبط بعض الإعدادات الإقليمية خاصة تلك المتعلقة بعرض البيانات في برامج قواعد البيانات، كالعملة النقدية ورمز الفاصلة و ...

الحل:
هناك حلول كثيرة وأسهلها...
الطريقة الأولى: ضبك الإعدادات المتعلقة بالبرنامج، وأعتقد أنه الحل المثالي في هذه الحالة.
بضبط الإعدادات بشكل افتراضي وضبط قيمة UpdateFormatSettings على False في كود المشروع الرئيسي، مع إضافة الوحدة SysUtils في الحقل Uses، يصبح كود وحدة المشروع من الشكل:
PHP كود :
program Project1;

uses
  Forms
, SysUtils,
  
Unit1 in 'Unit1.pas' {Form1};

{
$R *.res}

begin
  Application
.Initialize;
(*
  
//للتحقق من تثبيت BDE ويتطلب تعريف الوحدة BDE
  
if dbiInit(nil) <> DBIERR_NONE then begin
  
//استعمال Exception يتطلب تعريف الوحدة SysUtils
    
raise Exception.Create('Borland DataBase Engine is not installed.');
    
Application.Terminate;
  
end;
*)
  
//تعطيل عملية تحديث الإعدادات الإقليمية
  
Application.UpdateFormatSettings := False;
  
//Modifier le format monétaire (requis l'unité SysUtils)
  
DecimalSeparator := ','; //رمز الفاصلة
  
CurrencyString := 'Dinar';//رمز العملة
  
CurrencyFormat := 3;
  
CurrencyDecimals := 2;
  
ThousandSeparator := ' ';
(*
  
//فاصل التاريخ
  
DateSeparator := '/';
  
ShortDateFormat := 'dd/MM/yyyy';
*)
  
Application.CreateForm(TForm1, Form1);
  
Application.Run;
end. 

أما إذا أردت تغيير الإعدادات الإقليمية لدى مستعمل البرنامج فالوضع يختلف...

الطريقة الثانية: باستعمال الدالة SetLocaleInfoالمعرفة في الوحدة Windows من kernel32 يمكن التوغل في Local Settings وتمرير أحد القيم المتعلقة بـ TFormatSettings.
لمزيد من المعلومات ألق نظرة على شرح مفصل للدالة:
SetLocaleInfo
ولمعرفة الإعدادات الإقليمية الحالية نستعمل الدالة GetLocaleInfo مع تخزين النتيجة في متغير من النوع TFormatSettings
معلومات حول الدالة: GetLocaleInfo

أعددت مثال صغير أو بريمج يبين باستعمال الدالتين كيفية قراءة وتعديل بعض الإعدادات الإقليمية الشهيرة، اقصرت في هذا المثال على المتغيرات: CurrencyString ، ShortDateFormat، ShortTimeFormat، DecimalSeparator، ويمكن تعديل متغيرات أخرى.

[صورة: getsetregset.png]

يقوم البرنامج في أول إنشائه بإضافة الإعدادات الحالية في TComboBox، وعند كل تنشيط لإطار النموذج يسترجع الإعدادات الحالية، والأزرار تغير الإعدادات.

ملاحظات:
- تغيير إعدادات إقليمية حالة استثنائية، تستخدم في حالات خاصة، والأولى اللجوء الطريقة الأولى.
- من غير اللائق تغيير أي قيمة في الويندوز من غير تنبيه مسبق لمستعمل البرنامج.
- لا يزال مشكل Unicode يظهر عند قراءة رموز غير مدعمة (الكود كان على Delphi 7)
كود المثال في المرفقات...

كاقتراحات إضافية للمثال يمكن إضافة خيار حفظ الإعدادات الحالية في ملف INI، معاينة شكل البيانات قبل وبعد تعديلها و...و...و... واقتراحاتكم وملاحظاتكم في الانتظار Big Grin




التحكم في الإعدادات الإقليمية Regional Settings - hanipino - 03-03-2009

بٰآرك اللهُ فيك . الفكرة التي تراودني الان هي اِعادة صنعه بالاعتماد على الرسورس . Smile


التحكم في الإعدادات الإقليمية Regional Settings - kachwahed - 03-03-2009

hanipino كتب :بٰآرك اللهُ فيك . الفكرة التي تراودني الان هي اِعادة صنعه بالاعتماد على الرسورس . Smile

وفيك بركة، تفضل أخي أرنا مهاراتك :d


RE: التحكم في الإعدادات الإقليمية Regional Settings - bassem_43 - 19-10-2015

السلام عليكم
عند تطبيق الدرس مع دالفي7 نجح الامر عادي
اما باستعمال delphi XE5 او احد النسخ الحديثة تظهر رسالة الخطا تخبرنا ان المتغير DecimalSeparator او بقية المتغيرات غير معرف فما الحل ؟
[dcc32 Erreur] VirementCPP.dpr(29): E2003 Identificateur non déclaré : 'DecimalSeparator'
و بارك الله فيكم


RE: التحكم في الإعدادات الإقليمية Regional Settings - bassem_43 - 20-10-2015

السلام عليكم
حاولت التعديل بهده الطريقة لكن لبم ينجح الامر بقية الاعدادات على حالها
PHP كود :
var
FS: TFormatSettings ;
begin
  Application
.Initialize;
 
 Application.MainFormOnTaskbar := True;
 
 TStyleManager.TrySetStyle('Ruby Graphite');
 
 Application.UpdateFormatSettings := False;
 
  FS.DecimalSeparator := '.'; //رمز الفاصلة
 
 FS.CurrencyString := 'Dinar';//رمز العملة
 
 FS.CurrencyFormat := 3;
 
 FS.CurrencyDecimals := 2;
 
 FS.ThousandSeparator := ' ';
 
 Application.CreateForm(TForm1, Form1);
  
  Application
.CreateForm(TAboutBox, AboutBox);
 
 Application.Run;
end. 



RE: التحكم في الإعدادات الإقليمية Regional Settings - kachwahed - 29-10-2015

وعليكم السلام ورحمة الله،
هذا يعمل معي:

كود :
 ShortDateFormat := 'dd.mm.yyyy';  ShowMessage(DateToStr(Date));


في XE v15.0.3890


RE: التحكم في الإعدادات الإقليمية Regional Settings - bassem_43 - 31-10-2015

(29-10-2015, 11:46 PM)kachwahed كتب : وعليكم السلام ورحمة الله،
هذا يعمل معي:

كود :
 ShortDateFormat := 'dd.mm.yyyy';  ShowMessage(DateToStr(Date));


في XE v15.0.3890
شكرا على المتابعة استاد kachwahed
و مادا عن العملة هل من حل ؟
//Modifier le format monétaire (requis l'unité SysUtils)
DecimalSeparator := ','; //رمز الفاصلة
CurrencyString := 'Dinar';//رمز العملة
CurrencyFormat := 3;
CurrencyDecimals := 2;
ThousandSeparator := ' '


RE: التحكم في الإعدادات الإقليمية Regional Settings - kachwahed - 02-11-2015

في إصدارات دلفي الحديث تم تجميع الإعدادات الإقليمية في المتغير FormatSettings بشكل Static:

كود :
 FormatSettings.ShortDateFormat := 'dd.mm.yyyy';  FormatSettings.DecimalSeparator := '.';  FormatSettings.CurrencyString := 'Dinars';

مثال:

كود :
procedure TForm1.Button1Click(Sender: TObject); var  D: Double;  C: Currency; begin  D := 12000.25;  C := D;  ShowMessage(DateToStr(Date));  ShowMessage(FloatToStr(D) );  ShowMessage(CurrToStrF(C, ffCurrency, 0) ); end;

طبعا لا تنسى إضافة الوحدة SysUtils.

بالتوفيق.


RE: التحكم في الإعدادات الإقليمية Regional Settings - bassem_43 - 04-11-2015

بارك الله فيك استاد kachwahed نجح الامر