ورود

View Full Version : مبتدی: تاریخ شمسی در اینتراوب



ariopax
شنبه 08 شهریور 1393, 01:47 صبح
ازدوستان کسی هست در مورد استفاده از تاریخ شمسی تواینتراوب کمکی کنه ؟

ariopax
پنج شنبه 13 شهریور 1393, 20:57 عصر
دراینتراوب یک مثال نمونه است که با استفاده از JQuery یک تقویم را باز
کرده که میلادی است .من مشابه تغییر یافته فارسی آن را از سایت
http://hasheminezhad.com/datepicker دانلود کردم وتغییرات دادم اما اجرا
نشد.کمکی از دست کسی بر می آید
البته تنظیمات آن بدین صورت است.
1- يک فايل که درنمونه - نام آن بدين صورت است .


jquery-ui-1.10.0.custom.min.js
2- يک فايل ديگر که دربرنامه استفاده شده است .
jquery-ui-1.10.0.custom.min.css
3- يک خصوصيت است بنام CSS که جزوخصوصيات Edit ائي است که درآن کليک
ميکني وتقويم بازميشود که در اين پروژه آن را با cal تنظيم کرده است .
4- تکه کدي که دربرنامه تنظيم شده است بدين صورت است
;';()IWJQueryWidget1.OnReady.Text := '$(''.cal'').datepicker


حال اگر بنده بخواهم از تقويم فارسی استفاده کنم .تنظيمات يک تا چهار را
به چه چيزهائي بايد تنظيم کنم.چند مورد را با استفاده از تشخيص خودم مثلا
يک -تغيير ندادم.
دو-بنام فايلي که نام آن jquery.ui.datepicker-cc-fa.jsتغيير دادم .
سه - را به #datepicker1 تغيير دادم
چهار-رابه;';()IWJQueryWidget1.OnReady.Text := '$(''.'#datepicker1').datepicker
تغيير دادم .فعلا که جوابي نگرفتم .
لطفا اگه کسی میتونه کمک کنه .تشکر

دلفــي
سه شنبه 01 مهر 1393, 17:33 عصر
در فرم UserSessionUnit توابع مربوط به تاريخ شمسي را قرار بده و در داخل فرمها ازش استفاده كن ، يه نمونه كه خودم نوشتم و از اون استفاده ميكنم رو پايين قرار ميدم :



unit UserSessionUnit;
interface


uses
IWUserSessionBase, SysUtils, Classesn;


type
TIWUserSession = class(TIWUserSessionBase)
private
{ Private declarations }
public
{ Public declarations }
Function MiladiToHejri(GregorianDate : String;DateType : Integer) : String;
end;


implementation


uses
ServerController;


{$R *.dfm}


Function TIWUserSession.MiladiToHejri(GregorianDate : String;DateType : Integer) : String;
var
jmm, jdd , Haa : string;
g_days_in_month, j_days_in_month : array[0..11] of Integer;
HijriMonths : array[1..12] of String;
g_day_no, j_day_no, jy, jm, gy, gm : Longint;
j_np, i, jd, GD , Ha : Integer;
flag : Boolean;
begin
flag := true;
g_days_in_month[0] := 31;
g_days_in_month[1] := 28;
g_days_in_month[2] := 31;
g_days_in_month[3] := 30;
g_days_in_month[4] := 31;
g_days_in_month[5] := 30;
g_days_in_month[6] := 31;
g_days_in_month[7] := 31;
g_days_in_month[8] := 30;
g_days_in_month[9] := 31;
g_days_in_month[10] := 30;
g_days_in_month[11] := 31;
j_days_in_month[0] := 31;
j_days_in_month[1] := 31;
j_days_in_month[2] := 31;
j_days_in_month[3] := 31;
j_days_in_month[4] := 31;
j_days_in_month[5] := 31;
j_days_in_month[6] := 30;
j_days_in_month[7] := 30;
j_days_in_month[8] := 30;
j_days_in_month[9] := 30;
j_days_in_month[10] := 30;
j_days_in_month[11] := 29;


If Trim(GregorianDate) = '' Then Exit;
FormatSettings.ShortDateFormat := 'yyyy/mm/dd';
Ha := DayOfWeek(StrToDateTime(GregorianDate));


if Ha = 7 then
Haa := 'شنبه' else
if Ha = 1 then
Haa := 'يكشنبه' else
if Ha = 2 then
Haa := 'دوشنبه' else
if Ha = 3 then
Haa := 'سه شنبه' else
if Ha = 4 then
Haa := 'چهار شنبه' else
if Ha = 5 then
Haa := 'پنجشنبه' else
if Ha = 6 then
Haa := 'جمعه';


gy := (StrToInt(GregorianDate[1]+GregorianDate[2]+GregorianDate[3]+GregorianDate[4]) - 1600) ;
gm := (StrToInt(GregorianDate[6]+GregorianDate[7]) - 1) ;
GD := (StrToInt(GregorianDate[9]+GregorianDate[10]) - 1) ;


g_day_no := 365 * gy + (gy + 3) div 4 - (gy + 99) div 100 + ( gy + 399) div 400;
i := 0;
While i < gm do
begin
g_day_no := g_day_no + g_days_in_month[i];
i := i + 1;
end;


If (gm > 1) And (((gy Mod 4 = 0) And (gy Mod 100 <> 0)) Or (gy Mod 400 = 0)) Then
g_day_no := g_day_no + 1;


g_day_no := g_day_no + GD;
j_day_no := g_day_no - 79;
j_np := j_day_no div 12053;
j_day_no := j_day_no Mod 12053;
jy := 979 + 33 * j_np + 4 * (j_day_no div 1461);
j_day_no := j_day_no Mod 1461;


If (j_day_no >= 366) Then
begin
jy := jy + ((j_day_no - 1) div 365);
j_day_no := (j_day_no - 1) Mod 365;
End;
i := 0;
While (j_day_no >= j_days_in_month[i]) and flag do
begin
j_day_no := j_day_no - j_days_in_month[i];
i := i + 1;
If i > 12 Then
begin
i := 11;
j_day_no := 29;
flag := False;
End;
end;
jm := i + 1;
jd := j_day_no + 1;
jmm := IntToStr(jm);
jdd := IntToStr(jd);
If (Length(jmm) = 1) then
jmm := '0' + jmm
else
jmm := jmm;
if (Length(jdd) = 1) then
jdd := '0' + jdd
else
jdd := jdd;


HijriMonths[1] := 'فروردين';
HijriMonths[2] := 'ارديبهشت';
HijriMonths[3] := 'خرداد';
HijriMonths[4] := 'تير';
HijriMonths[5] := 'مرداد';
HijriMonths[6] := 'شهريور';
HijriMonths[7] := 'مهر';
HijriMonths[8] := 'آبان';
HijriMonths[9] := 'آذر';
HijriMonths[10] := 'دي';
HijriMonths[11] := 'بهمن';
HijriMonths[12] := 'اسفند';
if jmm = '13' then
begin
jmm := '12';
jdd := '30';
end;
Case DateType of
0:
MiladiToHejri := Haa+' '+jdd + '/' + jmm + '/' + IntToStr(jy);
1:
MiladiToHejri := IntToStr(jy)+Haa+jdd;
End;
End;


end.


نحوه فراخواني :



IWEdit1.Text := UserSession.MiladiToHejri(DateToStr(Date),0);
IWEdit1.Text := UserSession.MiladiToHejri(DateToStr(Date),1);


نتايج (براي تاريخ فرضي) :

1393/07/01
13930701

یوسف زالی
سه شنبه 01 مهر 1393, 22:40 عصر
می تونید از یونیتی که در امضای بنده اومده هم استفاده کنید.

mrm0101
سه شنبه 01 مهر 1393, 22:55 عصر
با سلام
دوستان عزیز توجه بکنید که در بحث ایتراوب تاریخ شمسی بخواهید استفاده بکنید باید تاریخ سرور رو بگیرید . با این مبدل ها فقط تاریخ کلاینت ها به شمسی تبدیل می شود و اگر کاربری تاریخ سیستمش تنظیم نباشد تاریخ اشتباه نمایش یا در دیتابیس ثبت می شود.
ما برای حل این مشکل تاریخ سرور را در اس کیو ال سرور سرور دریافت و با تابع در همان اس کیو ال تبدیل را انجام می دهیم . کلاینت ها تاریخ را از دیتابیس دریافت می کنند.

یوسف زالی
چهارشنبه 02 مهر 1393, 00:22 صبح
روش معمول و سریع این کار در شرکت های بزرگ اینه که تقویم رو بصورت ذخیره شده در پایگاه داده دارند. این تقویم رو هم با همون یونیت های کلاینت ساید تبدیل می کنند.
برای در آوردن تاریخ و تبدیلات آن فقط کافیه یک join بزنند. همین!

دلفــي
چهارشنبه 02 مهر 1393, 09:32 صبح
با سلام
دوستان عزیز توجه بکنید که در بحث ایتراوب تاریخ شمسی بخواهید استفاده بکنید باید تاریخ سرور رو بگیرید . با این مبدل ها فقط تاریخ کلاینت ها به شمسی تبدیل می شود و اگر کاربری تاریخ سیستمش تنظیم نباشد تاریخ اشتباه نمایش یا در دیتابیس ثبت می شود.
ما برای حل این مشکل تاریخ سرور را در اس کیو ال سرور سرور دریافت و با تابع در همان اس کیو ال تبدیل را انجام می دهیم . کلاینت ها تاریخ را از دیتابیس دریافت می کنند.

روشي كه بنده عرض كردم تاريخ سرور رو بر مي گردونه نه تاريخ كلاينت و الان دارم در برنامه اي كه نوشتم ازش استفاده مي كنم . شما هر كدي كه اجرا مي كنيد در سمت سرور اجرا ميشه و نتيجه آن به كلاينت ها ارسال ميشه مگر اينكه از كدهاي جاوا در سمت كلاينت استفاده كنيد كه در كدهاي بالا چنين موردي وجود ندارد .

mrm0101
چهارشنبه 02 مهر 1393, 15:23 عصر
روی یکی از کلاینت ها تاریخ رو عوض بکنید و نتیجه رو ببینید. در صورتی بخواهید از تاریخ سرور استفاده بکنید باید از indy استفاده بکنید . وقتی ورودی تابع تاریخ است تاریخ سیستمی رو برمی گردونه که در حال اجرای برنامه است . تاریخ کلاینت

دلفــي
چهارشنبه 02 مهر 1393, 17:17 عصر
روی یکی از کلاینت ها تاریخ رو عوض بکنید و نتیجه رو ببینید. در صورتی بخواهید از تاریخ سرور استفاده بکنید باید از indy استفاده بکنید . وقتی ورودی تابع تاریخ است تاریخ سیستمی رو برمی گردونه که در حال اجرای برنامه است . تاریخ کلاینت

خواهشا در مورد اينتراوب و ISAPI مطالعه ي بيشتري داشته باشيد ، من عرض كردم خدمتتون كه دارم از اين روش استفاده مي كنم و تاريخ سرور رو بر مي گردونه نه كلاينت ها رو
صفحات ايجاد شده با اينتراوب همانند صفحات Html به صورت مستقيم از روي سرور بر روي
كامپيوتر كاربر لود نمي شوند و پس از درخواست كاربر از وب سرور اين كار به دو صورت انجام
مي گيرد :
1 – توسط IntraWeb Server
2 – توسط IIS و با استفاده از رابط برنامه کاربردي (ISAPI (Internet Server Application Programming Interface كه از فايل هاي DLL براي ارتباط استفاده مي كند .

در هر دو اين موارد درخواست كاربر در روي سرور دريافت شده و متناسب با درخواست وي صفحات مورد نياز ايجاد شده و به كامپيوتر كلاينت ارسال مي شوند يعني كدهاي نوشته شده بر روي سرور اجرا مي شوند نه كلاينت ، براي اجراي كدها در سمت كلاينت بايد از AJAX كه یک فناوری مربوط به JavaScript هست استفاده شود .

جهت آشنايي بيشتر با نحوه كار اينتراوب اين فايل رو دانلود كنيد : http://www.4shared.com/account/file/pyP89UvQ/Intraweb_Farsi.html

ariopax
چهارشنبه 02 مهر 1393, 17:22 عصر
باتشکر از دوستان
تقویم رو چطوری میشه به شمسی تبدیل کرد؟

دلفــي
چهارشنبه 02 مهر 1393, 17:28 عصر
باتشکر از دوستان
تقویم رو چطوری میشه به شمسی تبدیل کرد؟

همين تابعي كه بنده قرار دادم تاريخ ميلادي رو ار سرور مي گيره و به تاريخ شمسي تبديل مي كنه

ariopax
چهارشنبه 02 مهر 1393, 18:27 عصر
همين تابعي كه بنده قرار دادم تاريخ ميلادي رو ار سرور مي گيره و به تاريخ شمسي تبديل مي كنه

دوست عزیزم منظورم کامپوننت تقویم اینتراوب (یا TMS) هستش .بنده کامپوننتهای TMS رو دارم ودریونیتی که تقویم ساخته میشه تغییرات دادم .نام اونو عوض کردم و در یه برنامه نمونه یونیتی که تغییر نام دادم رو Addمیکنم ودر Private یه نوع ازاون ایجاد میکنم ودر قسمت Create فرم هم از اون Create میکنم .اما هنگام اجرا Access Violation میده .چطور این تقویم رو میشه شمسی کرد؟

باتشکر