View Full Version : تاریخ شمسی در ویستا UfarsiDate
SoftDevCo
سه شنبه 08 خرداد 1386, 13:23 عصر
من یکی نرم افزار هام رو دارم روی ویندوز ویستا چک می کنم تا بتونه تحت این ویندوز هم اجرا بشه.
توی این نرم افزار که یه برنامه حسابداری هست از UfarsiDate جناب سالار خلیل زاده (SalarSoft (http://barnamenevis.org/forum/member.php?u=4890)) استفاده کردم که همین جا ازشون بابت این کار و زحماتی که کشیدن تشکر می کنم.
تنها مشکلی که من در ویندوز ویستا با این نرم افزار برخورد کردم این بود که وقتی از فانکشن farStrToDate استفاده می شه :
class function TFarDate.farStrToDate(const S: string): TfarDateTime;
begin
if not farTryStrToDate(S, Result) then
raise EConvertError.Createfmt(SInvalidDate,[S]);
end;
خطای نا معتبر بودن تاریخ رو میده، و اگه خطا Handle بشه یک عدد بی ربط به تاریخ داده می شه.
لازم به ذکر هست که در ویندوز XP چنین مشکلی وجود ندارد.
این تاپیک صرفا جهت اطلاع به دیگر دوستان و همفکری ایجاد شده است.
SoftDevCo
یک شنبه 13 خرداد 1386, 19:23 عصر
دلیل به وجود آمدن مشکل این بود که فرمت تاریخ در ویندوز ویستا به صورت پیش فرض، تغییر کرده و باید کد زیر را در اول برنامه اجرا کرد تا تنظیمات مورد نظر جایگزین شود:
Procedure Regional;
Begin
Application.BiDiMode := bdRightToLeft;
Application.BiDiKeyboard := '00000429';
Application.UpdateFormatSettings := False;
CurrencyString := #209#237#199#225#253;
CurrencyFormat := 2;
NegCurrFormat := 12;
ThousandSeparator := ',';
DecimalSeparator := '/';
CurrencyDecimals := 0;
DateSeparator := '/';
ShortDateFormat := 'yyyy/mm/dd';
LongDateFormat := 'yyyy/mm/dd';
TimeSeparator := ':';
TimeAMString := '?.U';
TimePMString := 'E.U';
ShortTimeFormat := 'hh:nn';
LongTimeFormat := 'hh:nn:ss';
SysLocale.DefaultLCID := 1065; // Persian
SysLocale.PriLangID := 41; // Farsi
SysLocale.SubLangID := 1;
SysLocale.FarEast := False;
SysLocale.MiddleEast := True;
TwoDigitYearCenturyWindow := 50;
ListSeparator := ';';
End;
SalarSoft
دوشنبه 14 خرداد 1386, 08:23 صبح
این مشکلی که مطرح کرده اید به نوع فرمت ویندوز برمی گردد. توجه کنید که حتی در ویندوز های عربی و ویندوز انگلیسی این فرمت فرق می کنه. ظاهرا این مشکل در ویستا هم مجددا پیدا شده. که این رو تو http://salarsoft.somee.com/magaleh/m_farsi_date_help.htm توضیح دادم. (البته فعلا سایت خراب است و در اولین فرصت مجددا راهش میاندازم)
برای بدست آوردن فرمت تاریخ سیستم که این تابع قبول میکنه می تونید از تابع farDateToStr استفاده کنید. به طور خلاصه بهترین ورودی برای تابع farStrToDate خروجی های تابع farDateToStr است.
در مورد تغییراتی که پشنهاد کردید فعلا وقت بررسی اونها رو ندارم ولی مراقب باشید تا سازگاری اون رو باسایر ویندوز ها(عربی - انگلیسی) به هم نزنید.
SoftDevCo
دوشنبه 14 خرداد 1386, 11:38 صبح
این مشکلی که مطرح کرده اید به نوع فرمت ویندوز برمی گردد. توجه کنید که حتی در ویندوز های عربی و ویندوز انگلیسی این فرمت فرق می کنه. ظاهرا این مشکل در ویستا هم مجددا پیدا شده. که این رو تو http://salarsoft.somee.com/magaleh/m_farsi_date_help.htm توضیح دادم. (البته فعلا سایت خراب است و در اولین فرصت مجددا راهش میاندازم)
برای بدست آوردن فرمت تاریخ سیستم که این تابع قبول میکنه می تونید از تابع farDateToStr استفاده کنید. به طور خلاصه بهترین ورودی برای تابع farStrToDate خروجی های تابع farDateToStr است.
در مورد تغییراتی که پشنهاد کردید فعلا وقت بررسی اونها رو ندارم ولی مراقب باشید تا سازگاری اون رو باسایر ویندوز ها(عربی - انگلیسی) به هم نزنید.
من تا الان توی چند تا ویندوز امتحان کردم و به مشکلی بر نخودرم.
SalarSoft
دوشنبه 14 خرداد 1386, 19:22 عصر
من تا الان توی چند تا ویندوز امتحان کردم و به مشکلی بر نخودرم.
این مربوط به ویندوز های 98 انگلیسی و عربی می شد که خوشبختانه در XP حل شده بود و ظاهرا دوباره این تداخل vista پیدا شده.
در فرصت مناسب همه این موارد رو دوباره بررسی می کنم و نتیجه رو هم اعلام خواهم کرد.
SalarSoft
جمعه 15 تیر 1386, 17:36 عصر
مشکل مربوط به تابع farStrToDate که در ویندوز ویستا درست کار نمی کرد برطرف شد.
علاوه بر این دیگر در ویندوز های عربی نیز مشکلی نخواهد داشت.
این مشکل ساده تر از اونی که فکرش می کردم حل شد. البته این همه تاخیر به خاطر نصب ویستا بود که باید فرصت پیدا می کردم تا نصبش کنم.
به هر حال آخرین نسخه اصلاح شده همراه یک Demo تازه و مرتب تر رو از اینجا دریافت کنید:
http://www.softprojects.org/KB/Articles/Delphi/UFaDate.aspx?lng=fa
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.