PDA

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



hentjanson
پنج شنبه 16 خرداد 1387, 20:36 عصر
سلام دوستان چطور میشه در برنامم یک تاریخ شمسی داشته باشه مثلا پنجشنبه 16 1387 خرداد اینطوری بنویسه ؟
از تمام دوستان و اساتید تشکر میکنم

babak_delphi
پنج شنبه 16 خرداد 1387, 20:44 عصر
در سایت خیلی خیلی بحث شده
جستجو کن

dkhatibi
پنج شنبه 16 خرداد 1387, 21:41 عصر
dll آقای سرباز زاده هست.
کامپوننتهایی نیز مانن shdate وجو دارنئ.

m-khorsandi
پنج شنبه 16 خرداد 1387, 23:12 عصر
Solar Calendar (http://sourceforge.net/projects/solarcalendar)

babak_delphi
جمعه 17 خرداد 1387, 00:10 صبح
در بخش نکات برنامه نویسی در دلفی که در قسمت اعلان های بخش دلفی است هم من کد تبدیل تاریخ میلادی به شمسی و شمسی به میلادی رو گذاشتم

http://barnamenevis.org/forum/showthread.php?t=52234&page=6

اصغر (پآچ)
جمعه 17 خرداد 1387, 18:13 عصر
سلام دوست من

تو می تونی از این روش برای نشون دادن اون چیزی که می خوای استفاده کنی:



procedure TForm1.FormCreate(Sender: TObject);
var
m2, d2, Today, Day, DateComplete: string;
total: longint;
m1, y1, y2, d1, y, m, temp, d: word;
a, b, a1: array [1..12] of word;
begin
Today:='';
a[1]:=31; a[2]:=28; a[3]:=31; a[4]:=30; a[5]:=31; a[6]:=30;a[7]:=31;a[8]:=31;a[9]:=30;a[10]:=31;a[11]:=30;a[12]:=31;
b[1]:=31;b[2]:=29;b[3]:=31;b[4]:=30;b[5]:=31;b[6]:=30;b[7]:=31;b[8]:=31;b[9]:=30;b[10]:=31;b[11]:=30;b[12]:=31;
a1[1]:=31;a1[2]:=31;a1[3]:=31;a1[4]:=31;a1[5]:=31;a1[6]:=31;a1[7]:=30;a1[8]:=30;a1[9]:=30;a1[10]:=30;a1[11]:=30;a1[12]:=29; total:=0;
y := strtoint(formatdatetime('yy', now()));
temp := y;
m := strtoint(formatdatetime('m', now()));
d := strtoint(formatdatetime('d', now()));
if y mod 4 = 0 then
dec(total);
while y > 3 do
begin
if y mod 4=0 then
inc(total,366)
else
inc(total, 365);
dec(y);
end;
while m > 1 do
begin
if temp mod 4 = 0 then
inc(total, b[m-1])
else
inc(total, a[m-1]);
dec(m);
end;
inc(total, d);
inc(total, 9);
y1 := 1381;m1 := 10;d1 := 1;
while total > 364 do
if y1 mod 4 = 3 then
if total > 365 then
begin
dec(total, 366);
inc(y1);
end
else break
else
begin
dec(total, 365);
inc(y1);
end;
while total > 28 do
begin
if m1 = 12 then
begin
if y1 mod 4 = 3 then
if total>29 then
begin
dec(total,30);
end
else break
else
dec(total, 29);
inc(y1);
m1 := 1;
end;
if total >= a1[m1] then
begin
dec(total, a1[m1]);
inc(m1);
end
else
break;
end;
inc(d1, total);
if (m1)<10 then
M2 := '0'+IntToStr(m1)
else
M2 := IntToStr(m1);
if (d1)<10 then
d2 := '0'+IntToStr(d1)
else
d2 :=IntToStr(d1);
y2 := y1 - 1300;
Today := FormatDateTime('dddd',Now());
DateComplete := Today + ' : ' + d2 + ' / ' + m2 + ' / ' + inttostr(y1);
Day := IntToStr(y2) + '/' + m2 + '/' + d2;
Lable1.Caption := DateComplete;
end;


این کد رو دوست خوبم محسن غلامی نوشته که همین جا ازش تشکر می کنم به خاطر کد قشنگش!

موفق و موید باشید

اصغر (پآچ)
جمعه 17 خرداد 1387, 19:05 عصر
سلام من تازه کارم اینو کجا وارد کنم دوست عزیزم

سلام دوست من

اگه به کد دقت کنی خط اول نوشته : ";(Procedure TForm1.FormCreate(Sender: TObject" یعنی اینکه اینو در رویداد OnCreate فرم مربوطه باید بذاری!

موفق و موید باشی

اصغر (پآچ)
جمعه 17 خرداد 1387, 19:12 عصر
سلام من تازه کارم اینو کجا وارد کنم دوست عزیزم

در ضمن دوست من

هر کسی روزی تازه کاره این سایت برای یادگیری ایجاد شده پس هر سوالی که داری و برات پیش میاد رو بدون خجالت بپرس و نیازی نیست به خودت تلقین کنی که "من تازه کارم".

اینجا هرکسی هر کمکی که از دستش بربیاد رو در حد توانش بهت میگه پس امیدوار باش که آدمی به امید زنده است.

موفق و موید باشید

hentjanson
جمعه 17 خرداد 1387, 19:25 عصر
سلام چرا خطا میده . خطای label میگیره

delphiprog3000
جمعه 17 خرداد 1387, 20:05 عصر
سلام.
اصولا برای این جور رویها یکسری label پیشفرض تعریف میشه که باید شما بر روی فرمتان یک یا چند label که نامشون شبیه به نامی که در این رویه وجود دارد قرار دهید.
چون ساعت و تاریخ رو در خاصیت caption لیبلها به شما نمایش میده.

موفق باشید.......

hentjanson
جمعه 17 خرداد 1387, 20:08 عصر
میشه یک مثال بزنید در این رابطه که مطرح کردید تا منم بیشتر در جریان قرار بگیرم اخه توضیحاتتون خوبه ولی من هنوز متوجه نشدم

delphiprog3000
جمعه 17 خرداد 1387, 20:18 عصر
دوست عزیز از این یونیتی هم که براتون فرستادم میتونید استفاده کنید.

باید اونو به پروژتون اضافه کنید.

در فرمی که میخواهید ساعت و تاریخ نمایش داده شه .یک تایمر قرار بدید که در داخل آن نیز این کدها رو بزارید.

کد:


procedure TMain.Timer1Timer(Sender: TObject);
var yr,mn,dy:word;
m,d:string;
day :word;
begin
JDecodeDate(Date(),yr,mn,dy);
if mn<=9 then
m:='0'+inttostr(mn)
else
m:=inttostr(mn);
if dy<=9 then
d:='0'+inttostr(dy)
else
d:=inttostr(dy);
DateL.Caption:=IntToStr(yr)+'/'+m+'/'+d;

day:=DayOfWeek(now);
case day of
1:
DayL.Caption:='یکشنبه';
2:
DayL.Caption:='دوشنبه';
3:
DayL.Caption:='سه شنبه';
4:
DayL.Caption:='چهار شنبه';
5:
DayL.Caption:='پنج شنبه';
6:
DayL.Caption:='جمعه';
7:
DayL.Caption:='شنبه';
end;

TimeL.Caption:=FormatDateTime('HH:MM:SS',now);
end;
و سپس در همان فرم سه label قرار بدید با نامهای timel , dayl , datel
در ضمن خصوصیت interval تایمر رو هم به 1 تبدیل کنید.

تایمر:یک شی که در تب system وجود دارد و شکل ساعت است.کارش شمارش و اجرای دستورات در زمان معین شده.

موفق باشید.........

اصغر (پآچ)
جمعه 17 خرداد 1387, 20:28 عصر
سلام دوست من

روی فرمت یه Lable بذار و اسمش به Lable1 تغییر بده!

موفق و موید باشید

اصغر (پآچ)
جمعه 17 خرداد 1387, 20:36 عصر
دوست عزیز از این یونیتی هم که براتون فرستادم میتونید استفاده کنید.

باید اونو به پروژتون اضافه کنید.

در فرمی که میخواهید ساعت و تاریخ نمایش داده شه .یک تایمر قرار بدید که در داخل آن نیز این کدها رو بزارید.

کد:


procedure TMain.Timer1Timer(Sender: TObject);




var yr,mn,dy:word;

m,d:string;
day :word;
begin
JDecodeDate(Date(),yr,mn,dy);
if mn<=9 then
m:='0'+inttostr(mn)
else
m:=inttostr(mn);
if dy<=9 then
d:='0'+inttostr(dy)
else
d:=inttostr(dy);
DateL.Caption:=IntToStr(yr)+'/'+m+'/'+d;


day:=DayOfWeek(now);
case day of
1:
DayL.Caption:='یکشنبه';
2:
DayL.Caption:='دوشنبه';
3:
DayL.Caption:='سه شنبه';
4:
DayL.Caption:='چهار شنبه';
5:
DayL.Caption:='پنج شنبه';
6:
DayL.Caption:='جمعه';
7:
DayL.Caption:='شنبه';
end;


TimeL.Caption:=FormatDateTime('HH:MM:SS',now);
end;


و سپس در همان فرم سه label قرار بدید با نامهای timel , dayl , datel



در ضمن خصوصیت interval تایمر رو هم به 1 تبدیل کنید.



تایمر:یک شی که در تب system وجود دارد و شکل ساعت است.کارش شمارش و اجرای دستورات در زمان معین شده.



موفق باشید.........





سلام دوست من

من فکر می کنم بجای تعریف اسم روز ها در روال ها و فاکشن ها بهتر از توابع خود دلفی استفاده کنیم نه؟
این نظر منه شاید نظر بقیه دوستان چیز دیگه ای باشه!

این کد اسم روز رو به هر زبانی که در Regional and Language Optin ویندوزتون به عنوان پیش فرض تعریف شده باشه بر می گردونه و نیاز نیست که بخوایم اسم تمام روز ها رو خودمون بیایم برای سیستم تعریف کنیم.


Today := FormatDateTime('dddd',Now());


موفق و موید باشید

hentjanson
جمعه 17 خرداد 1387, 20:37 عصر
چطور به برنامه این فایل رو اضافه کنم میشه در این مورد هم توضیحاتی بدین

delphiprog3000
جمعه 17 خرداد 1387, 20:40 عصر
دوست عزیزم قبلا توضیح دادم .
شما یک پروژه در دلفی ایجاد کنید.
سپس در قسمت project>Add to project و بعد آن این یونیت رو با نام Jdate رو به برنامه اضافه کنید.
و سپس بقیه مراحل که در بالا توضیح داده شده را انجام دهید......

موفق باشید............

hentjanson
جمعه 17 خرداد 1387, 20:45 عصر
سلام من این مطالب شما رو انجام دادم ولی یک مشکل داره میشه مشاهده کنید بگید کجایه کار من مشکل داره

delphiprog3000
جمعه 17 خرداد 1387, 20:58 عصر
دوست عزیزم.
اینم نمونه کاملی که شما نیاز داری .فقط کافیه اجراش کنید..

موفق باشید..............

اصغر (پآچ)
جمعه 17 خرداد 1387, 21:12 عصر
سلام دوست من

برای حل این مشکلت همونطور که دوستمون گفت باید فایل ها رو به پروژه ات اضافه کنی و در زیر قسمت implementation عبارت ;uses jDateUtils رو اضافه کنی

موفق و موید باشی

hentjanson
جمعه 17 خرداد 1387, 21:27 عصر
سلام ممنون مشکلم حل شد همین قسمت صدا زدن uses رو متوجه نشدم از تمام اساتید تشکر می کنم .

اصغر (پآچ)
جمعه 17 خرداد 1387, 21:34 عصر
سلام دوست من

در قسمت Uses وقتی بخوای از اجزای یه یونیت دیگه که در پروژه ات هست استفاده کنی باید از کلید ترکیبی Alt+F11 استفاده کرده و نام یونیت مورد نظر رو انتخاب و دوبار روش کلیک کنی.

با این روش می تونی از تمام منابع اون یونیت در یک یوینت دیگه استفاده کنی مثلا اگه دوتا فرم داشته باشی و از فرم اول بخوای مقدار Edit فرم دوم رو تغییر بدی می تونی از کد زیر پس از استفاده از کلید ترکیبی بالا و انتخاب یونیت فرم دوم استفاده کنی


Form2.Edit1.Text := 'مقدار جدید یا مورد نظر';


موفق و موید باشی

hentjanson
جمعه 17 خرداد 1387, 21:36 عصر
مرسی مشکلم حل شد . متشکرم از همه اساتید این مبحث که به من راهنمایی دادند .

hentjanson
جمعه 17 خرداد 1387, 21:41 عصر
فقط یک مسئله ای میشه اینو کاملش تر کرد مثلا فصل رو هم بگه که فروردین هستش اردیبهشت یا خرداد ماه در این مورد اساتید چیزی میدونند

اصغر (پآچ)
جمعه 17 خرداد 1387, 21:58 عصر
فقط یک مسئله ای میشه اینو کاملش تر کرد مثلا فصل رو هم بگه که فروردین هستش اردیبهشت یا خرداد ماه در این مورد اساتید چیزی میدونند

سلام دوست من

تو سئوالت یه تناقض هست! اگه فصل رو می خوای باید بگه بهار، تابستان، پاییز و زمستان و اگه اسم ماه رو بخوای باید اونایی رو که تو گفتی بگه!

شما برای اینکه فصل رو بگه باید اول فصل ها رو توی یه آرایه ذخیره کنی بعد بیای بگی اگه عدد ما که می تونی با استفاده از این تابع
FormatDateTime('mm',Now()); بدست می آید رو بررسی کنی و بگی اگه بین 1 تا 3 است بهار رو نشون بده و به همین ترتیب و اگه بخوای اسم ماه ها رو نشون بده باید باز هم اسم ماه ها رو در یک آرایه بذاری و بگی اگه عدد ماه برابر 1 بود فروردین رو نشون بده و به همین ترتیب الی آخر.

با استفاده از این تابع
FormatDateTime('mmmm',Now()); می تونی نام ماه های تقوی میلادی رو بدست بیاری!

موفق و موید باشی

hentjanson
جمعه 17 خرداد 1387, 22:02 عصر
یک نمونه میشه اینجا برام مثال بزنید اگه وقتشو دارید تشکر از کمک های شما دوست من

m-khorsandi
شنبه 18 خرداد 1387, 11:20 صبح
سلام چرا خطا میده . خطای label میگیره

پيشنهاد ميكنم يه كتاب دلفی بخونی.

hentjanson
شنبه 18 خرداد 1387, 23:43 عصر
در مورد تععین ماه ککسی میدونه
نسبت به تاربخ فعلی مشخص کنه فروردین اردیبهشت خرداد ...........

mors.soltani
دوشنبه 28 دی 1388, 11:46 صبح
از کامپوننت شمسی دیت استفاده کن همه قابلیت هارو داره

دلفــي
سه شنبه 29 دی 1388, 15:03 عصر
در مورد تععین ماه ککسی میدونه
نسبت به تاربخ فعلی مشخص کنه فروردین اردیبهشت خرداد ...........

در اين پست مي توني به اون چيزي كه مي خواي برسي :

تابع تاريخ شمسي رو پيدا كن : http://barnamenevis.org/forum/showthread.php?t=190417