جدیدترین نسخه از مجموعه XCalendar را می توانید از آدرس زیر دریافت کنید:
کد:http://sourceforge.net/projects/xcalendar/files/
Printable View
جدیدترین نسخه از مجموعه XCalendar را می توانید از آدرس زیر دریافت کنید:
کد:http://sourceforge.net/projects/xcalendar/files/
این هم چند کنترل انتخاب تاریخ از مجموعه TMS Planner سازگار شده با تقویم ها و رویدادهای XCalendar و با پشتیبانی از BiDiMode شامل:
TPlannerCalendar
TPlannerDatePicker
TPlannerMaskDatePicker
TDBPlannerCalendar
TDBPlannerDatePicker
TPlannerDBDatePicker
TPlannerDBMaskDatePicker
یک تصویر نمونه از TPlannerCalendar:
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
لینک دریافت مجموعه این کنترل ها به همراه XCalendar 1.1.1: (حجم 150 کیلوبایت)
کد:http://rapidshare.com/files/264440133/XCalPlanner_090806.rar
این هم یک توضیح کلی راجع به این مجموعه: (البته در فایل readme کاملترش هست)
XCalendar با الهام از کلاس Calendar موجود در دات نت اما برای دلفی نوشته شده تا بتوان از تاریخ/زمان های TDateTime دلفی در گاهشماری های گوناگون استفاده کرد. همانطور که میدانید نوع TDateTime در دلفی یک عدد اعشاری است که زمان سپری شده از یک زمان خاص را نشان میدهد با به طور دقیقتر: قسمت صحیح آن تعداد روزهای گذشته از تاریخ 30 دسامبر 1899 میلادی (مثبت یا منفی) و قسمت اعشاری آن بیانگر کسری از روز 24 ساعته است که سپری شده.
هر تقویم (گاهشماری) زمان را با قوانین خود به واحدهایی مثل سال و ماه و روز تقسیم میکند. بنابراین میتوان مقادیر TDateTime را به واحدهای هر تقویم decode کرد و تاریخ های هر تقویم را نیز میتوان به نوع TDateTime، انکود کرد.
تقویم های این مجموعه همگی از کلاس TXCalendar مشتق شده اند که متدهای آن همنام توابع موجود در SysUtils و DateUtils هستند تا کارهایی از قبیل decode کردن یا فرمت کردن تاریخ، محاسبه شماره هفته در سال، محاسبه آخرین جمعه ماه، افزودن 3 روز به یک تاریخ و ... را انجام دهند. تنها کاری که تقویم های مشتق شده باید انجام دهند این است که چند متد abstract برای encode و decode تاریخ و محاسبه سالهای کبیسه و تعداد روز در سالها و ماهها را override کنند.
مثال:
TXCalendar را از TComponent مشتق کرده ام تا بتوان تقویم ها را روی فرم قرار داد. خاصیت FormatSettings برای تنظیم نام ماه ها و DateSeparator و دیگر ثوابت مربوط به کارهای رشته ای هست. خاصیت WeekStartDay روز آغاز هفته و خاصیت WeekRule قانون شمارش هفته ها را مشخص می کند.کد:dt := GregoianCalendar1.EncodeDate(2000, 1, 1);
w := HijriCalendar1.WeekOfTheYear(dt);
ShowMessage(
PersianCalendar1.FormatDateTime('dddd d mmmm yyyy hh:nn AM/PM', Now));
فعلا تقویم های میلادی، هجری شمسی با دوره 33 ساله، هجری شمسی با محاسبات نجومی، هجری قمری با دوره 30 ساله و هجری قمری با قابلیت تطبیق با داده های مشاهده شده هلالی انجام شده اند.
برای تبدیل تاریخ از یک تقویم به تقویم دیگر باید آنرا با کامپوننت تقویم اول encode کنید و مقدار حاصل را با کامپوننت تقویم دوم decode کنید.
فیلد های دیتابیس سازگار با XCalendar هم در پنجره New Field اضافه میشوند که با ست کردن خاصیت XCalendar آنها میتوان تقویم مورد نظر برای نمایش و گرفتن مقدار را انتخاب کرد.
رویدادهای سالانه و نجومی هم از کلاس TCustomXCalendarEvents مشتق شده اند که میتوان وقوع های آنها را بین دو تاریخ با متد FindIntervalEvents بدست آورد:
رویدادهای سالانه در کامپوننت TXCalendarEvents بصورت یک Collection از رویدادها هست که با دابل کلیک روی کامپوننت میتوانید آنها را ویرایش کنید.کد:var
EOL: TXCalEventOccurenceList;
dt1, dt2: TDateTime;
i: Integer;
begin
dt1 := Date;
dt2 := dt1 + 7;
EOL := TXCalEventOccurenceList.Create;
try
XCalendarEvents1.FindIntervalEvents(dt1, dt2, EOL);
EOL.SortByDate;
for i := 0 to EOL.Count - 1 do
ShowMessage(PersianCalendar1.DateToStr(EOL[i].Date) + ' ' + EOL[i].DisplayText);
finally
EOL.Free;
end;
end;
کنترل های انتخاب تاریخ هم به سادگی با ست کردن خاصیت XCalendar به شکل تقویم مورد نظر تبدیل میشوند و با ست کردن خاصیت XCalendarEvents رویدادهای کامپوننت مورد نظر را مشخص می کنند. کنترل اصلی TPlannerCalendar است که در کامپوننت های دیگر با کلیک روی دکمه شان یک instance از آن نمایش داده میشود که خواصش از طریق خاصیت Calendar قابل دسترسی است.
چند دمو هم در مجموعه موجود هست.
با تشکر ...آقا این 150 کیلوبایت چیزی بود که تو Rapidshare آپلود کردین؟نقل قول:
لینک دریافت مجموعه این کنترل ها به همراه XCalendar 1.0.1: (حجم 150 کیلوبایت)
سلام
این هم لینک جدید:
متاسفانه در این فروم نمیشه فایل آپلود کرد.کد:http://adgteq.persiangig.com/XCalendar/XCalPlanner_080904.rar
آقا من این کامپونت رو نصب کردم ..یه 1 روزی هم کار کرد ..بعدش هم به کلی Delphi رو بهم ریخت !!!!
سلام
لطفا نسخه دلفی و مشکل به وجود آمده را دقیقتر توضیح بدید.
با سلامfield form1.hijriCalendar1 does not have a corresponding component. Remove the declaration? Yes no cancel
چرا موقع اجرا کردن برنامه های تقویم (مثل همین تقویم ) خطای زیر ظاهر می شه
[Fatal Error] Unit1.pas(7): File not found: 'xcalClass.dcu'
که اگر no رو بزنم خطای زیر می یاد
field form1.PersianCalendar1 does not have a corresponding component. Remove the declaration? Yes no cancel
و با no زدن این باز خطای دیگه ای می یاد
field form1.GregorianCalendar1 does not have a corresponding component. Remove the declaration? Yes no cancel
و روی فرم می ره و خطای زیر رو می نویسه
اگه از همون ابتدا هم yes رو بزنم و همه خطاهای بالا بازم می یاد و با yes زدن روی فرم می ره و پیغام زیر رو می ده[Fatal Error] Unit1.pas(7): File not found: 'xcalClass.dcu'
و من اصلا حالت اجرای تقویم رو نمی تونم ببینم و برنامه تقویم اصلا اجرا نمی شه
برای تقویم های دیگه هم همچین پیغام هایی می یاد
سلام لطفا جواب بدین دیگه من هنوز منتظرم
یک نفر به سوالم جواب بده دیگه خسته شدم هی اومدم و دیدم هنوز کسی جواب نداده کسی نیست ؟
من فکر می کنم که شما مسیر فایل های کامپایل شده رو به درستی برای دلفی مشخص نکردین...توی readme فایل های کامپونت به صورت کامل توضیح داده شده.نقل قول:
یک نفر به سوالم جواب بده دیگه خسته شدم هی اومدم و دیدم هنوز کسی جواب نداده کسی نیست ؟
نقل قول:
چون بصورت دستی کار نصب انجام شده باید مسیر فایل های برنامه ) را از طریق tools\enviroment options صفحه library اضافه کنیم تا برنامه درست کامپایل بشه
ورژن دلفیم 7 هست ... و یه اررور میده مبنی بر اینکه نمی تونه فایل که اسمش یادم نیست رو بخونه فکر می کنم فایل bpl7. هست!!! یا یه چیزی تو همین مایه ها!!!نقل قول:
لطفا نسخه دلفی و مشکل به وجود آمده را دقیقتر توضیح بدید.
من از دلفی 6 استفاده می کنم آخه من که اصلا به هیچ قسمت از برنامه های دانلود شده دست نمی زنم فقط فایل dpr اون رو باز می کنم و f9 رو برای اجرا می زنم
ببين دوست من به اين عمل كن!!!نقل قول:
چون بصورت دستی کار نصب انجام شده باید مسیر فایل های برنامه ) را از طریق tools\enviroment options صفحه library اضافه کنیم تا برنامه درست کامپایل بشه
با سلام
خيلي ممنون و متشكرم كه اين كامپوننت رو روي سايت گذاشتيد.ولي من يه مشكل توي تاريخ قمري ديدم اونم اين بود كه روز 24 مهرماه 87 رو كه برابر با 15 شوال مي باشد يك روز كمتر يعني 14 شوال نمايش مي دهد.
اگر مشكلي در كامپوننت وجود داره لطف كنيد اون رو اعلام كيند و يا اينكه راه حل مشكل رو ارائه بديد خيلي ممون از همه ي زحماتي كه در اين راه خرج كرديد.
درضمن اگه كسي هست كه سورس تبديل تاريخ ميلادي به قمري رو داشته باشه و در اختيار ما قرار بده يا آدرسش رو بده خيلي خيلي ممونشم و دعاش ميكنم.خودم يه سورس دارم ولي متاسفانه همون مشكل تقويم Xcalendar رو داره.
با سلام.
ولي دوست عزيز من ازش استفاده ميكنم و اين مشكل را ندارم و درست ميدهد.
ببين كمپوننتتون آپديت هست؟
سلام
شما قبل از اجرای demo های این مجموعه باید آن را در دلفی نصب کنید. طریقه نصب هم در فایل Install.txt توضیح داده شده. خلاصه اش هم اینه که باید فایل dpk مناسب نسخه دلفی خودتون رو در دلفی باز کنید و Compile و Install رو بزنید و بعدش هم مسیر فایل های سورس رو به Library Path دلفی اضافه کنید.نقل قول:
چرا موقع اجرا کردن برنامه های تقویم (مثل همین تقویم ) خطای زیر ظاهر می شه
متاسفانه نمی دانم علت مشکل پیش آمده برای شما چیست. البته خودم هم متوجه یک مشکل در مورد فیلدهای دیتابیس شده ام که هنگام بستن پروژه ای که از این فیلد ها استفاده می کند گاهی اوقات پیغام Access violation صادر می شود و دلفی را به هم می ریزد. اگر کسی علت این مشکل را می داند ممنون می شوم پاسخ بدهد.نقل قول:
ورژن دلفیم 7 هست ... و یه اررور میده مبنی بر اینکه نمی تونه فایل که اسمش یادم نیست رو بخونه فکر می کنم فایل bpl7. هست!!! یا یه چیزی تو همین مایه ها!!!
تقویم قمری مورد استفاده در ایران بر اساس مشاهده هلال ماه می باشد. البته طول پیش بینی شده ماه های قمری مصادف با هر سال شمسی برای استفاده در تقویم ها، قبل از آغاز آن سال اعلام می شود.نقل قول:
خيلي ممنون و متشكرم كه اين كامپوننت رو روي سايت گذاشتيد.ولي من يه مشكل توي تاريخ قمري ديدم اونم اين بود كه روز 24 مهرماه 87 رو كه برابر با 15 شوال مي باشد يك روز كمتر يعني 14 شوال نمايش مي دهد.
THijriCalendar موجود در این مجموعه تقویم قمری قراردادی را پیاده سازی می کند که دوره های سالهای کبیسه و عادی آن مشخص است (در دو نوع معمول که با خاصیت LeapYearsKind قابل انتخاب است) و همچنین طول ماه های آن مطابق قرارداد می باشد. (البته با استفاده از OnGetDaysInAMonth قابل تغییر است).
با استفاده از TObservedHijriCalendar می توانید داده های مشاهده شده (یا پیش بینی شده) را در تقویم لحاظ کنید. یعنی علاوه بر استفاده از OnGetDaysInAMonth برای دادن طول ماه های هر سال قمری، با استفاده از OnFindLeapYears سال های کبیسه (355 روزه) قمری را مشخص کنید. البته در یک محدوده که با MinObservedYear و MaxObservedYear مشخص می شود و سال پایه و تفاوت آغاز آن با آغاز قراردادی همان سال را با BaseYear و BaseYearAdjustment مشخص می کنید. برای توضیحات کاملتر به بخش های 1.5 و 1.6 فایل readme مراجعه کنید. دموی IranEvents هم یک مثال کامل در این مورد است.
لطفا پست سوم را بخوانید:نقل قول:
درضمن اگه كسي هست كه سورس تبديل تاريخ ميلادي به قمري رو داشته باشه و در اختيار ما قرار بده يا آدرسش رو بده خيلي خيلي ممونشم و دعاش ميكنم.
مثلا:نقل قول:
برای تبدیل تاریخ از یک تقویم به تقویم دیگر باید آنرا با کامپوننت تقویم اول encode کنید و مقدار حاصل را با کامپوننت تقویم دوم decode کنید.
که البته در اینجا برای encode کردن تاریخ میلادی از تابع موجود در دلفی استفاده کرده ام و بجای decode کردن، مستقیما متد FormatDateTime کامپوننت را بکار برده ام.کد:var
dt: TDateTime;
s: string;
begin
dt := EncodeDate(2008, 11, 6);
s := ObservedHijriCalendar1.FormatDateTime('dddd d mmmm yyyy', dt);
ShowMessage(s);
end;