PDA

نسخه کامل مشاهده نسخه کامل : نصب زبان فارسي و يونيكد اون- تبديل تاريخ ميلادي به شمسي



romixery
25-09-2007, 09:29
دوستان سلام من خوام برنامه اي بنويسم كه يونيكد فارسي و زبان فارسي روي كامپيوتر كاربر نصب كنه.توي انجمن جستجو كردم و توي يكي از تاپيكها در اين مورد سورسي گذاشته شده بود. ولي متأسفانه چون اين تاپيك قديمي بود لينكاي دانلود هيچكدوم كار نمي كردن.حالا اگه كسي از عزيزان مي تونه بگه من براي اين كه اين كار رو انجام بدم بايد چيكار كنم ممنون مي شم؟
راستي يه سوال ديگه هم داشتم كه ديگه تو تاپيك جديد قرارش نمي دم. همينجا مي پرسمش:
مي خوام تاريخ ميلادي رو به فارسي برگردونم. اونم بدون استفاده از كامپوننتهاي اضافي. توي انجمن سرچ كردم، دوستان چند تا كامپوننت معرفي كرده بودن. راستش نمي خوام خيلي در برنامم از كامپوننت نوشته شده توسط ديگران استفاده كنم. كسي مي تونه الگوريتمش رو به من بگه؟ ممنون مي شوم.موفق باشينباي

MVReza
29-09-2007, 02:19
با سلام;
اميدوارم كه اين كد بتونه كمكت كنه:

پارامترهاي ورودي تابع، سال - ماه - روز ميلادي مي‌باشد كه پس از فراخواني تابع، مقدار سال - ماه - روز ورودي تبديل به مقادير شمسي معادل مي‌شوند.
procedure ML_to_SH(var Year, Month, Day: Word);
const
count_days : array[1..12] of Byte = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var
day_year: 0..366;
i: 1..11;
MLeap: Boolean;
begin
if ((Year mod 4) = 0) and (((Year mod 100) <> 0) or ((Year mod 400) = 0)) then
MLeap:= True
else
MLeap:= False;
day_year:= 0;
for i:= 1 to month - 1 do
day_year:= day_year + count_days[i];
day_year:= day_year + day;
if MLeap and (month > 2) then
Inc(day_year);
if (day_year <= 79) then
begin
if (((Year - 1) mod 4) = 0) and ((((Year - 1) mod 100) <> 0) or (((Year - 1) mod 400) = 0)) then
day_year:= day_year + 11
else
day_year:= day_year + 10;
Year:= Year - 622;
if (day_year mod 30 = 0) then
begin
Month:= (day_year div 30) + 9;
Day:= 30;
end
else
begin
Month:= (day_year div 30) + 10;
Day:= day_year mod 30;
end;
end
else
begin
year:= year - 621;
day_year:= day_year - 79;
if (day_year <= 186) then
begin
if (day_year mod 31 = 0) then
begin
Month:= (day_year div 31);
Day:= 31;
end
else
begin
Month:= (day_year div 31) + 1;
Day:= day_year mod 31;
end;
end
else
begin
day_year:= day_year - 186;
if (day_year mod 30 = 0) then
begin
Month:= (day_year div 30) + 6;
Day:= 30;
end
else
begin
Month:= (day_year div 30) + 7;
Day:= day_year mod 30;
end;
end;
end;
end;
end.

DrXoX
29-09-2007, 03:12
سلام MVReza جان
يك پيشنهاد داشتم از اين به بعد كد ها تو بذار داخل
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
براي اين كه كدها به هم نريزه

romixery
29-09-2007, 16:56
سلام
خيلي ممنونم از كدي كه فرستادين. امتحان مي كنم و خبرتون مي دم. ولي اي كاش توي قسمت Code مي زاشتينش تا شلوغ نشه. موفق باشين
باي
:10: