# Native Code > برنامه نویسی در Delphi > کامپوننت های سایر شرکت ها، و توسعه کامپوننت >  Xcalendar – مجموعه تقویم عمومی برای دلفی

## adgteq

سلام

نسخه 1.1.1 از مجموعه XCalendar را می توانید از آدرس زیر دریافت کنید:

 http://sourceforge.net/projects/xcalendar/files/شامل:

   تقویم های  مشتق شده از کلاس پایه TXCalendar (شبیه کلاس Calendar دات نت) که متدهای آن همنام توابع موجود در SysUtils و DateUtils هستند بصورت کامپوننت:
 TGregorianCalendar
TPersianCalendar
TAstroPersianCalendar
THijriCalendar
TObservedHijriCalendar

 فیلد های تاریخ-زمان دیتابیس با امکان انتخاب تقویم

 محاسبه رویدادهای سالانه و نجومی

 به همراه تبدیل قسمتی از پروژه +AA به دلفی برای محاسبات نجومی. (http://www.naughter.com)

خوشحال می شوم که از نظرات شما بهره مند شوم

----------


## adgteq

این هم چند کنترل انتخاب تاریخ از مجموعه TMS Planner سازگار شده با تقویم ها و رویدادهای XCalendar و با پشتیبانی از BiDiMode شامل:

TPlannerCalendar
TPlannerDatePicker
TPlannerMaskDatePicker
TDBPlannerCalendar
TDBPlannerDatePicker
TPlannerDBDatePicker
TPlannerDBMaskDatePicker

یک تصویر نمونه از TPlannerCalendar:





مجموعه کامل XCalendar 1.1.1 همراه با کنترلهای TMS Planner سازگار شده با آن را به این پست اتچ کرده ام. پکیج های لازم برای نصب رو هم اضافه کرده ام (با تشکر از مهران). البته متاسفانه روی دلفی 2009 قابل نصب نیست.


این هم لینک رپید شیرشه:
http://rapidshare.com/files/264440133/XCalPlanner_090806.rarتوجه: آخرین به روز رسانی این پست پس از پست شماره 48 انجام شده است

----------


## مهران موسوی

> خوشحال می شوم که از نظرات شما بهره مند شوم


خيلي خوبه .. فقط اگه يك پكيج هم براش درست كني تا راحت تر نصب بشه فكر كنم بهتر باشه ...

----------


## adgteq

سلام

روش ساختن پکیج رو در فایل readme توضیح دادم. نمی تونستم برای همه نسخه های دلفی پکیج بسازم. امیدوارم در نصب مشکلی نداشته باشید.

----------


## دنیای دلفی

من پكيج را مي سازم ولي خطا مي ده و بعضي از فايلها را مي گه ندارم

----------


## Hsimple11

> من پكيج را مي سازم ولي خطا مي ده و بعضي از فايلها را مي گه ندارم


نسخه دلفی شما چیست؟ آیا فایل های Pas را درست دریافت کرده اید؟

----------


## دنیای دلفی

دلفي 7 بله كمبود يك سري فايل پاس را مي گيره كه اصلا توي پروژه نيستشون ميشه همينجا آپلود كنيد

----------


## adgteq

سلام

برای نصب XCalendar در دلفی 6 به بالا باید پکیج DESIGNIDE را به لیست Requires اضافه کنید.
البته در فایل Install.txt کامل تر توضیح داده ام.
فکر نمی کنم اگر این کار را بکنید فایل pas دیگری نیاز داشته باشد.

----------


## Hsimple11

بله. من هم با همین نسخه کار میکنم و مشکلی نداشتم. مرسی جناب adgteq.

----------


## Hsimple11

راستی یه سوال در مورد کنترلهای TMS ای که سازگار با این تقویم قرار داده اید. آیا متدی خاص وجود داره که باید اون رو بر حسب اینکه از چه نوع تقویمی (Persian، ...) استفاده کنیم به این کنترل ها باید اختصاص بدیم یا نه؟ اینکه نوع تقویم کنترل رو تغییر بدیم.

سوال دوم. این تقویم مشکلی با استثناء هایی مثل سال کبیسه نداره؟

----------


## adgteq

1. دو property اضافه شده: XCalendar و XCalendarEvents که می توانید آنها را به کامپوننت تقویم و/یا رویداد دلخواه که قبلا روی فرم قرار داده اید ست کنید (تقویم ها و رویدادها را به صورت کامپوننت غیر بصری نوشته ام که صد البته در زمان اجرا هم قابل ایجاد هستند)

2. در مورد تقویم یک کمی تحقیق کردم. TPersianCalendar از دوره های 33 ساله (جلالی) استفاده می کنه که دقیقترین روش دوره ای برای فاصله نگرفتن آغاز سال از زمان اعتدال فروردین هست. TAstroPersianCalendar هم از قانون نجومی مصوب 1304 استفاده می کنه: اگر زمان اعتدال فروردین قبل از ظهر شرعی باشه همان روز روز اول ساله و اگر بعد از ظهر شرعی باشه روز بعد روز اول سال میشه. البته باید طول جغرافیایی را برای محاسبه زمان ظهر به آن داد. (این دو روش در حال حاضر تفاوتی در سالهای کبیسه با هم ندارند)

----------


## ariobarzan

ضمن تشكر 
لطفا در مورد لينك با عناصر مربوط به تاريخ مثل   MonthCalendar1  با اين كمپوننت ميشه توضيح بديد اگه يك مثال هم اتچ بشه كه عالي ميشه
لينك rapidshare    هم چون توي شركت ما بسته  شده نميتونم دانلود  كنم  با توجه به حجم كمي كه داره لطفا تو همين تاپيك اتچ كنيد 
ممنون

----------


## adgteq

سلام

 این هم یک توضیح کلی راجع به این مجموعه: (البته در فایل readme کاملترش هست)

XCalendar با الهام از کلاس Calendar موجود در دات نت اما برای دلفی نوشته شده تا بتوان از تاریخ/زمان های TDateTime دلفی در گاهشماری های گوناگون استفاده کرد. همانطور که می‌دانید نوع TDateTime در دلفی یک عدد اعشاری (Double) است که زمان سپری شده از یک زمان خاص را نشان می‌دهد با به طور دقیقتر: قسمت صحیح آن تعداد روزهای گذشته از تاریخ 30 دسامبر 1899 میلادی (مثبت یا منفی) و قسمت اعشاری آن بیانگر کسری از روز 24 ساعته است که سپری شده.
هر تقویم (گاهشماری) زمان را با قوانین خود به واحدهایی مثل سال و ماه و روز تقسیم می‌کند. بنابراین می‌توان مقادیر TDateTime را به واحدهای هر تقویم decode کرد و تاریخ های هر تقویم را نیز می‌توان به نوع encode ،TDateTime کرد.
تقویم های این مجموعه همگی از کلاس TXCalendar مشتق شده اند که متدهای آن همنام توابع موجود در SysUtils و DateUtils هستند تا کارهایی از قبیل decode کردن یا فرمت کردن تاریخ، محاسبه شماره هفته در سال، محاسبه آخرین جمعه ماه، افزودن 3 روز به یک تاریخ و ... را انجام دهند. تنها کاری که تقویم های مشتق شده باید انجام دهند این است که چند متد abstract برای encode و decode تاریخ و محاسبه سالهای کبیسه و تعداد روز در سالها و ماهها را override کنند.
مثال:

  dt := GregoianCalendar1.EncodeDate(2000, 1, 1);
  w := HijriCalendar1.WeekOfTheYear(dt);
  ShowMessage(
    PersianCalendar1.FormatDateTime('dddd d mmmm yyyy hh:nn AM/PM', Now));
TXCalendar را از TComponent مشتق کرده ام تا بتوان تقویم ها را روی فرم قرار داد. خاصیت FormatSettings برای تنظیم نام ماه ها و DateSeparator و دیگر ثوابت مربوط به کارهای رشته ای هست. خاصیت WeekStartDay روز آغاز هفته و خاصیت WeekRule قانون شمارش هفته ها را مشخص می کند.
فعلا تقویم های میلادی، هجری شمسی با دوره 33 ساله، هجری شمسی با محاسبات نجومی، هجری قمری با دوره 30 ساله و هجری قمری با قابلیت تطبیق با داده های مشاهده شده هلالی انجام شده اند.
برای تبدیل تاریخ از یک تقویم به تقویم دیگر باید آنرا با کامپوننت تقویم اول encode کنید و مقدار حاصل را با کامپوننت تقویم دوم decode کنید.

فیلد های دیتابیس سازگار با XCalendar هم در پنجره New Field اضافه می‌شوند که با ست کردن خاصیت XCalendar آنها می‌توان تقویم مورد نظر برای نمایش و گرفتن مقدار را انتخاب کرد.

رویدادهای سالانه و نجومی هم از کلاس TCustomXCalendarEvents مشتق شده اند که می‌توان وقوع های آنها را بین دو تاریخ با متد FindIntervalEvents بدست آورد:

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; 
رویدادهای سالانه در کامپوننت TXCalendarEvents بصورت یک Collection از رویدادها هست که با دابل کلیک روی کامپوننت می‌توانید آنها را ویرایش کنید.

کنترل های انتخاب تاریخ هم به سادگی با ست کردن خاصیت XCalendar به شکل تقویم مورد نظر تبدیل می‌شوند و با ست کردن خاصیت XCalendarEvents رویدادهای کامپوننت مورد نظر را مشخص می کنند. کنترل اصلی TPlannerCalendar است که در کامپوننت های دیگر با کلیک روی دکمه شان یک instance از آن نمایش داده می‌شود که خواصش از طریق خاصیت Calendar قابل دسترسی است.

چند دمو هم در مجموعه موجود هست.

التماس دعا

----------


## seyed_farid

با سلام
لطفاً روش ويرايش اتفاقات و ثبت آن را هم توضيح دهيد.

----------


## adgteq

سلام

البته این هم در فایل readme هست (بخش 3.1). کامپوننت TXCalendarEvents برای محاسبه وقوع رویدادهای سالانه کلی هست. خاصیت Events یک Collection از TXCalEventItem ها هست که هر کدام یک رویداد سالانه جداگانه را بوسیله خواص خود توصیف می‌کنند. معمولا باید پنج خاصیت XCalendar و Month و Day و Title و IsVacation ست شوند. اما در حالت کلی خواصی از TXCalEventItem ها که باید ست شوند بصورت زیر است:
1. XCalendar: تقویمی که وقوع این رویداد بر حسب آن محاسبه می‌شود. که باید به یک کامپوننت تقویم اشاره کند.
2. RuleType: نوع قانون برای محاسبه وقوع این رویداد. انواع زیر قابل انتخاب هستند:rtExactDay: یک روز مشخص از یک ماه مشخص در هر سال
rtNthDayOfWeekInMonth: قوانینی مانند سومین دوشنبه فوریه یا آخرین جمعه ماه رمضان
rtNthDayOfWeekAfterADay: قوانینی مانند دومین دوشنبه قبل از 25 می
rtNearestDayOfWeek: قوانینی مانند نزدیک ترین دوشنبه به 12 جولای
rtCustomRule: قانون دلخواه که در OnCustomRule کامپوننت TXCalendarEvents مربوطه تعریف می‌شود3. خواص مربوط به نوع قانون:برای rtExactDay: خواص Month, Day
برای rtNthDayOfWeekInMonth: خواص Nth, DayOfWeek, Month توجه: اعداد منفی برای Nth به معنی شمارش از انتهای ماه به عقب هستند مثلا -1 به معنی "آخرین" می‌باشد.برای rtNthDayOfWeekAfterADay: خواص Nth, DayOfWeek, Month, Day توجه: اعداد منفی برای Nth به معنی جستجو برای N امین روز هفته قبل از روز مشخص شده هستند.برای rtNearestDayOfWeek: خواص DayOfWeek, Month, Day
برای rtCustomRule: رویداد OnCustomRule کامپوننت TXCalendarEvents را فراموش نکنید4. (اختیاری) Corrections: می‌توانید از این خاصیت استفاده کنید اگر تعدادی روز مشخص باید به تاریخ وقوع محاسبه شده افزوده شود یا اگر تاریخ وقوع نباید روزهای خاصی از هفته باشد.
5. Title: عنوان رویداد
6. FormatTitle (Boolean): اگر Title حاوی کاراکتر های فرمت تاریخ است که باید با توجه به تاریخ وقوع فرمت شوند این خاصیت را True کنید.
7. IsVacation (Boolean): اگر این رویداد یک روز تعطیل را مشخص می‌کند این خاصیت را True کنید.

برای save/load رویدادها در فایل یا stream با فرمت XML متدهای زیر در TXCalendarEvents وجود دارند:

    procedure SaveToStream(Stream: TStream);
    procedure LoadFromStream(Stream: TStream);
    procedure SaveToFile(const FileName: string);
    procedure LoadFromFile(const FileName: string);
لطفا توجه کنید که اگر می‌خواهید از این متدها استفاده کنید تمام کامپوننت های تقویم استفاده شده در رویدادها باید Owner یکسانی داشته باشند که در خاصیت XCalendarsOwner کامپوننت TXCalendarEvents مشخص کرده اید.
البته چون TXCalendarEvents یک کامپوننت است، می‌توانید آنرا با استفاده از متدهای TStream/TWriter/TReader دلفی نیز save/load کنید.

----------


## Delphi_Tips

با سلام
با ديدن تقويم شما واقعا خوشحال شدم كه بعد از مدتها براي دلفي يك تقويم كامل ساخته شده ولي الان كمي نااميد و خسته هستم چون از ديشب دارم روي كامپوننت شما كار ميكنم تا باگهاشو برطرف كنم :(

يك باگ خيلي بد داره ! با روز 31 ماه اگوست مشكل داره نميدونم مشكل از كجاست به نظرم از روش استانداردي براي تبديلات استفاده نكردين

تاريخ سيستمتون رو روي 31 اگوست 2008 ست كنين بعد تو دلفي سعي كنين يك datapicker روي فرم بذارين تا نتيجه رو ببينين

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

مچكرم.

----------


## seyed_farid

سلام
ما هم منتظریم تا پاسخ بگیریم که این باگ خفن از کجا ناشی میشه و تصحیح بشه. :متعجب: 
ضمناً تعطيليهاي مهرماه امسال هم تو اين تقويم خيلي باحاله (زياد شده). :متفکر: 
اما واقعاً كار بي مثلي انجام شده و بايد درست شه :تشویق:  :تشویق:  :تشویق:

----------


## adgteq

سلام

ببخشید که یک مدت نبودم.





> با سلام
> با ديدن تقويم شما واقعا خوشحال شدم كه بعد از مدتها براي دلفي يك تقويم كامل ساخته شده ولي الان كمي نااميد و خسته هستم چون از ديشب دارم روي كامپوننت شما كار ميكنم تا باگهاشو برطرف كنم :(
> 
> يك باگ خيلي بد داره ! با روز 31 ماه اگوست مشكل داره نميدونم مشكل از كجاست به نظرم از روش استانداردي براي تبديلات استفاده نكردين
> 
> تاريخ سيستمتون رو روي 31 اگوست 2008 ست كنين بعد تو دلفي سعي كنين يك datapicker روي فرم بذارين تا نتيجه رو ببينين
> 
> خيلي خوشحال ميشم اين باگ مهم رو برطرف كنين. فكر ميكنم با روز آخر بعضي از ماه هاي ديگه هم مشكل داشته باشه.
> 
> مچكرم.



باگ برطرف شد. لینک دریافت را به روز کردم.
متشکرم که این اشکال را پیدا کردید. البته این اشکال ارتباطی به کامپوننت های تقویم نداشت و در اثر عجله هنگام copy/paste کدهای کنترل های TMS Planner بوجود آمده بود. یک خط در متد TXCalPlannerCalendar.ChangeMonth جا افتاده بود که اضافه شد. باید این نکته را هم بگویم که کد کنترل های انتخاب تاریخ TMS Planner خیلی خوب نوشته نشده اند و من هم هنگام تغییر دادن آنها خیلی دقت نکرده ام. اما XCalendar را با دقت بیشتری نوشته ام. علت انتخاب کنترل های TMS Planner هم این بود که با وجود کدنویسی بد، از ظاهر و امکانات خوبی برخوردار بودند.
با عبارت "کامپوننت شما" هم در اشاره به کامپوننت های TMS Planner موافق نیستم چون اصل کار مربوط به برنامه نویسان شرکت TMS Software هست و من فقط (بدون رعایت حقوق مولفین) مقداری تغییرات در آنها داده ام.
راستی خیلی شرمنده ام از اینکه باعث نا امیدی و خستگی شما شدم.






> سلام
> ما هم منتظریم تا پاسخ بگیریم که این باگ خفن از کجا ناشی میشه و تصحیح بشه.
> ضمناً تعطيليهاي مهرماه امسال هم تو اين تقويم خيلي باحاله (زياد شده).
> اما واقعاً كار بي مثلي انجام شده و بايد درست شه



البته متوجه نشدم که مشکلی هم دارد یا نه. احتمالا شما در دموی IranEvents یک کنترل انتخاب تاریخ اضافه کرده اید و آنرا به IranAggregateEvents متصل کرده اید (که البته بهترین کار است). اگر می خواهید فقط روزهای تعطیل را داشته باشید می توانید از دکمه Save all vacations در این دمو استفاده کنید و فایل ایجاد شده را در یک کامپوننت TXCalendarEvents لود کنید.

----------


## seyed_farid

با سلام
اين برنامه رو ببينيد. اشكالش تو تعطيلات مهرماه چيه؟ :افسرده:

----------


## adgteq

مشکل را دیدم. به احتمال زیاد مشکل در TXCalPlannerCalendar است که کدی که من برای نمایش رویدادهای XCalendar نوشته ام با ست کردن بعضی از خاصیت ها به اشکال برمی خورد. چون خودم که یکی دیگه روی فرم گذاشتم مشکل نداشت. متاسفانه الان وقت پیدا کردن مشکل رو ندارم. اگر توانستید حلش کنید خوشحال می شوم که اطلاع بدید.

در ضمن کدی که برای انتخاب اتفاقات نوشته اید اشکال دارد. احتمالا در نسخه بعد یک خاصیت Enabled برای آیتم های TXCalendarAggregateEvents اضافه می کنم.

باز هم ممنون


تصحیح: کد درست است. معذرت خواهی می کنم

----------


## pad_kay

سلام
با تشکر از کامپونت زیبا و جالب شما
شاید عده ای از دوستان کامپونت tms  را نصب کرده باشند من با اجازه آقا/خانم adgteq تغییراتی در سورس دادم که در هنگام نصب error ندهد
باز هم از زحمات ایشان کمال تشکر را دارم

----------


## rainstorm

با سلام
ضمن تشکر از adgteq به خاطر این کامپوننت زیبا  :تشویق:  و pad_kay به علت مچ کردن آن با TMS Pack  :تشویق:  دو پیشنهاد دارم:
اول اینکه اگر امکانش وجود داره (که البته به نظر کار چندان سختی نمیرسه) PlannerCalendarGroup هم به مجموعه افزوده شود.
دوم اینکه DatePicker ها را به صورت DateTimePicker خود دلفی که داری تاریخ پیش فرض و چک صحیح بودن تاریخ وارد شده و قابلیت های دیگر از جمله افزایش یا کاهش با دکمه های Up و Down و ... ولی با قوانین تاریخ شمسی به آن اضافه شود که داخل ComboBox خالی نباشد؛
راهکار Mask چندان جالب به نظر نمیرسد، ضمن اینکه اجازه وارد کردن تاریخ نادرست را به کاربر میدهد
 من یه برنامه نوشتم که این قوانین رو کنترل میکنه
مثلا اگه ماه 7 باشه تو روز اجازه نمیده کاربر عدد 31 رو وارد کنه
یا وقتی روز رو وارد میکنی به طور خودکار وارد ماه میشود و وقتی ماه رو وارد میکنی وارد قسمت سال میشود، دقیقا همانند DateTimePicker دلفی  :لبخند: 
اگه لازم شد اطلاع بدین تا هم سورسشو بدم هم کلیه توضیحات پیرامون قابلیتهاش
فقط توضیح دیگه اینکه روز، ماه، سال تو سه تا Edit جدا قرار دادم، چون نمیدونستم چه طوری میشه اینه سه تا رو توی یه کامپوننت پیاده و بین هر قسمت / بذارم
 :لبخند:

----------


## pad_kay

> مشکل را دیدم. به احتمال زیاد مشکل در TXCalPlannerCalendar است که کدی که من برای نمایش رویدادهای XCalendar نوشته ام با ست کردن بعضی از خاصیت ها به اشکال برمی خورد. چون خودم که یکی دیگه روی فرم گذاشتم مشکل نداشت. متاسفانه الان وقت پیدا کردن مشکل رو ندارم. اگر توانستید حلش کنید خوشحال می شوم که اطلاع بدید.


من با بررسی های که انجام دادم متوجه شدم زمانی این خطا پیش می آید که
1-  همزان 1 روز خاص دارای  رویداد در شمسی یا قمری و یا میلادی به طور همزمان باشد  بعنوان مثال اتفاقی که برای ماه مهر می افتد این است که روز 5 در قمری و شمسی دارای رویداد می باشد در قمری تعطیل است 
2-اولین روز مشترک باشد
3 - در یکی از آنها تعطیل باشد
اگر امکان دارد در مورد نحوه خواندن و ست کردن TXCalendarEvents در TXCalPlannerCalendar  توضیحاتی بیان فرمائید تا بتوانم این اشکال را رفع کنم لازم به ذکر است این اشکال در اسفندماه سال 1387 نیز اتفاق می افتد




> احتمالا در نسخه بعد یک خاصیت Enabled برای آیتم های TXCalendarAggregateEvents اضافه می کنم.
> 
> باز هم ممنون


من این خصوصیت را اضافه کردم و فایل با اجازه شما پیوست می کنم
لازم به ذکر است که من تنها ینوتی که در آن تغییرات اعمال شده است را ارسال نموده ام

----------


## vcldeveloper

من از یک چیز سر در نمیارم، این بنده خدا که پروژه را در SourceForge ثبت کرده، هر کدامتان می تونید راحت سورس را از آنجا بگیرید، تغییراتتان را اعمال کنید، و با یک هماهنگی کوچیک با ایشون، تغییراتتان را در Repository اعمال کنید تا همه استفاده کنند. پس چرا هر کدوم میاید یک پست میزنید و تغییراتتان در پست بصورت ضمیمه ارائه می کنید؟!!
اگر از Version Control ارائه شده استفاده کنید، هم کنترل تغییرات سورس راحتتر خواهد بود، هم کاربر بیچاره ایی که می خواد دانلود کنه، از یک جا دانلود میکنه، نه اینکه یک تاپیک چند صفحه ایی را زیر رو رو کنه و تغییرات افراد مختلف را - که سورسشان هم با هم هماهنگ نیست را - روی سورس اصلی اعمال کنه!

----------


## pad_kay

> من از یک چیز سر در نمیارم، این بنده خدا که پروژه را در SourceForge ثبت کرده، هر کدامتان می تونید راحت سورس را از آنجا بگیرید، تغییراتتان را اعمال کنید، و با یک هماهنگی کوچیک با ایشون، تغییراتتان را در Repository اعمال کنید تا همه استفاده کنند. پس چرا هر کدوم میاید یک پست میزنید و تغییراتتان در پست بصورت ضمیمه ارائه می کنید؟!!


آقای علی کشاورز در مورد سخنان شما فکر کردم و به این نتیجه رسیدم که :
اصولا ایجاد و طرح سوال برای چی است ؟
اصولا ایجاد سایتهای به زبان مادری به چه منظور می باشد؟




> اگر از Version Control ارائه شده استفاده کنید، هم کنترل تغییرات سورس راحتتر خواهد بود، هم کاربر بیچاره ایی که می خواد دانلود کنه، از یک جا دانلود میکنه، نه اینکه یک تاپیک چند صفحه ایی را زیر رو رو کنه و تغییرات افراد مختلف را - که سورسشان هم با هم هماهنگ نیست را - روی سورس اصلی اعمال کنه!


آیا بهتر نیست برای این منظور راه حل بهتری در نظر یگیرد
باتشکر

----------


## vcldeveloper

> آقای علی کشاورز در مورد سخنان شما فکر کردم و به این نتیجه رسیدم که :
> اصولا ایجاد و طرح سوال برای چی است ؟
> اصولا ایجاد سایتهای به زبان مادری به چه منظور می باشد؟


شما برنامه را با زبان مادری می نویسید، یا با زبان دلفی؟! برای استفاده از Repository سایت SourceForge نیازی به دانستن زبان بیگانه، یا خواندن مطالب سایت بیگانه نیست، آدرس Repository پروژه مورد نظرتون را تایپ می کنید، آخرین نسخه سورس کد را بهتون میده. برای Upload کردن هم TortoiseSVN نصب می کنید، و با یک راست کلیک روی فایل سورس و کلیک روی SVN Commit سورس را به Repository ارسال می کنید.
اینطوری مدیر پروژه میدونه چه کسی، چه زمانی، چه تغییری در سورس داده. هر زمان هم که مشکلی پیش آمد، میتونه سورس را به حالت قبل برگردانه.
ما در سایت برنامه نویس مثل سایت SourceForge نرم افزار Version Control نصب شده روی سرور، برای نرم افزارهای ارائه شده توسط کاربران نداریم، که بخوایم به شما ارائه کنیم.
این سایت محل بحث هست، برای راحتی دانلود کنندگان، و فردی که مسئول پروژه هست، وقتی پروژه در SourceForge ثبت شده، بهترین کار آپدیت همون سورس کد از طریق SVN هست، نه کپی کد آپدیت شده در پست های تاپیک.




> آیا بهتر نیست برای این منظور راه حل بهتری در نظر یگیرد


یعنی یک چیز جدیدی جایگزین Version Control اختراع کنیم؟! شما الان با سورس کدهاتون در پروژه چکار می کنید؟ همینطوری روی هارد ذخیره می کنید و هر وقت هم تغییری خواستید انجام بدید، تغییر را روی فایل قبلی اعمال می کنید؟ اگر هم پروژه گروهی بود، هر کسی فایلی که کار کرده را برای دیگران میفرسته و دیگران توی سیستمشان Copy\Paste می کنند؟! یا میرید یک نرم افزار Version Control روی سیستمتون نصب می کنید؟
برای اطلاعات بیشتر:
http://en.wikipedia.org/wiki/Version_Control

در ضمن، دوستان بیش از این بحث تاپیک را منحرف نکنید.

----------


## adgteq

سلام

لینک دریافت به روز شد.





> شاید عده ای از دوستان کامپونت tms را نصب کرده باشند من با اجازه آقا/خانم adgteq تغییراتی در سورس دادم که در هنگام نصب error ندهد


حقیقتش من هم در نسخه 080825 کنترل های انتخاب تاریخ برای جلوگیری از این مشکل نام یونیت ها و کنترل های نصب شده را عوض کردم اما به دلیل کمبود وقت نتوانستم تست کنم و الان متوجه شدم که مشکل همنام بودن چند تا از کلاس ها باقی مانده بوده که در نسخه آپدیت شده رفع شد.





> اگر امکان دارد در مورد نحوه خواندن و ست کردن TXCalendarEvents در TXCalPlannerCalendar توضیحاتی بیان فرمائید


کد مربوط به های لایت کردن رویدادها را در متد TXCalPlannerCalendar.PaintProc اضافه کرده ام. تابع CheckXCalEvent اضافه شده است که سه ارجاع به آن وجود دارد برای روزهای ماه قبل و روزهای ماه بعد و روزهای ماه فعلی. کد مربوط به افزودن Hint هم در انتهای متد TXCalPlannerCalendar.MouseMove قرار دارد. فیلد FEOL (از نوع TXCalEventOccurenceList) شامل رویداد های روز های نمایش داده شده هست که با تغییر ماه به روز رسانی می شود.





> من این خصوصیت را اضافه کردم و فایل با اجازه شما پیوست می کنم


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





> اول اینکه اگر امکانش وجود داره (که البته به نظر کار چندان سختی نمیرسه) PlannerCalendarGroup هم به مجموعه افزوده شود.


متاسفانه فعلا وقتش رو ندارم. باید اعتراف کنم که کنترل های TMS Planner را با عجله برای نشان دادن کارهایی که میشه با چیزی مثل XCalendar انجام داد منتشر کردم و بعضی از قسمت هاش رو هم حذف کردم.




> دوم اینکه DatePicker ها را به صورت DateTimePicker خود دلفی که داری تاریخ پیش فرض و چک صحیح بودن تاریخ وارد شده و قابلیت های دیگر از جمله افزایش یا کاهش با دکمه های Up و Down و ... ولی با قوانین تاریخ شمسی به آن اضافه شود که داخل ComboBox خالی نباشد؛


چون DateTimePicker دلفی یک wrapper برای یک کنترل ویندوز هست سورسش در دستم نیست. ولی فکر می کنم مثلا با استفاده از OnKeyDown و ... کنترل های انتخاب تاریخ TMS Planner و استفاده از متد های IncDay و IncMonth و IncYear تقویم مربوطه بتوانید افزایش و کاهش تاریخ را پیاده سازی کنید. البته قطعا اگر این جور امکانات در خود کنترل ها قرار داده شود بهتر است.




> راهکار Mask چندان جالب به نظر نمیرسد، ضمن اینکه اجازه وارد کردن تاریخ نادرست را به کاربر میدهد


احتمالا در نسخه اصلی کنترل ها هم همین مشکل وجود داشته باشد.





> من از یک چیز سر در نمیارم، این بنده خدا که پروژه را در SourceForge ثبت کرده، هر کدامتان می تونید راحت سورس را از آنجا بگیرید، تغییراتتان را اعمال کنید، و با یک هماهنگی کوچیک با ایشون، تغییراتتان را در Repository اعمال کنید تا همه استفاده کنند. پس چرا هر کدوم میاید یک پست میزنید و تغییراتتان در پست بصورت ضمیمه ارائه می کنید؟!!
> اگر از Version Control ارائه شده استفاده کنید، هم کنترل تغییرات سورس راحتتر خواهد بود، هم کاربر بیچاره ایی که می خواد دانلود کنه، از یک جا دانلود میکنه، نه اینکه یک تاپیک چند صفحه ایی را زیر رو رو کنه و تغییرات افراد مختلف را - که سورسشان هم با هم هماهنگ نیست را - روی سورس اصلی اعمال کنه!


البته در SourceForge کنترل های سازگار شده با XCalendar را قرار نداده ام که بیشتر تغییرات انجام شده روی آنها بوده است. خودم هم تابه حال از Version Control و Repository استفاده نکرده ام و از نظر من البته با کسب اجازه از جناب علی کشاورز شاید همین طوری هم خیلی بد نباشه و ساده تر هست. نتیجه کار رو هم در همان پست اصلی به روز می کنیم.

----------


## adgteq

سلام

مشکل نمایش رویدادها در کنترلهای انتخاب تاریخ برطرف شد. (پست 19) می توانید نسخه به روز شده را از پست دوم دریافت کنید.


باید یک معذرت خواهی هم از seyed_farid بکنم چون کدی که برای انتخاب اتفاقات نوشته بودند درست بود. (پست 20)

----------


## seyed_farid

> باید یک معذرت خواهی هم از seyed_farid بکنم چون کدی که برای انتخاب اتفاقات نوشته بودند درست بود. (پست 20)


خواهش میکنم. :قلب: 
واقعاً دستتون درد نکنه . کامپوننتتون محشره :تشویق:  :تشویق:  :تشویق:

----------


## seyed_farid

ضمناً يك مورد كوچك ديگه هم اينكه وقتي از روي كليد ماه به سال ميريم Hint درست كار نميكنه. اونهم فكر كنم چون چسبيده بهم هستند اين مشكل پيش مياد.

اگر بتونيد سه تقويم را همزمان تو هم نشون بديد، مثل تقويمهاي چاپي خيلي باحال ميشه.

----------


## rainstorm

> اگر بتونيد سه تقويم را همزمان تو هم نشون بديد، مثل تقويمهاي چاپي خيلي باحال ميشه.


اگه اينطوري بشه كه عالي ميشه
فكر نميكنم بيشتر از نيم ساعت كار داشته باشه
خواهشنا هر كدوم از دوستان كه اين كار رو بلد هستن انجام بدن و ورژن جديد رو براي بقيه آپلود كنن

----------


## vcldeveloper

> فكر نميكنم بيشتر از نيم ساعت كار داشته باشه


سورسش که آماده دانلود هست، اگر فقط نیم ساعت کار داره، شما شروع کنید. اگر هم نمیدونید چطور باید این کار انجام بشه، چطور حدس زدید که فقط نیم ساعت کار داره؟!!

----------


## adgteq

سلام




> ضمناً يك مورد كوچك ديگه هم اينكه وقتي از روي كليد ماه به سال ميريم Hint درست كار نميكنه. اونهم فكر كنم چون چسبيده بهم هستند اين مشكل پيش مياد.


اشکال برطرف شد. می توانید نسخه به روز شده را از پست دوم دریافت کنید. (فقط یونیت xcalPlannerCal.pas تغییر کرده است)





> اگر بتونيد سه تقويم را همزمان تو هم نشون بديد، مثل تقويمهاي چاپي خيلي باحال ميشه.


به نظر من کدنویسی این کار باید با سلیقه برنامه نویسی که به آن احتیاج داره انجام بشه. مثلا دموی IranEvents موجود در XCalendar همین کار رو انجام میده البته نه به شکل تقویم های چاپی. باید مقدار TDateTime هر روز قابل نمایش را توسط سه تقویم دیکود (یا فرمت) کرد. نتیجه رو هم میشه به طور دلخواه روی فرم نمایش داد یا در ابزار گزارش گیری استفاده کرد.



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

----------


## seyed_farid

دوست عزيز 
من ميخوام با استفاده از ايونتها جدولي و فرمي بسازم و ايونتها رو توش ويرايش كنم و قابليت حذف هم داشته باشه.
ميتونيد منو راهنمائي كنيد؟

----------


## tik_tak

با سلام
*تقویمتون خیلی عالیه ممنون **
یه سوال داشتم
من میخوام تاریخ  همون روز رو  تو ماسک ادیتهایی که بالایه صفحه های برنامه م هست  رو نشون بده
یعنی با چه دستوری مثلا اینجوری :

maskedit1.text:=?

مرسی

----------


## tik_tak

کسی نمیدونه با چه دستوری *تاریخ روز جاری* یا روزی رو که دراون قرار داریم رو تو ادیت یا ماسک ادیت قرار بدیم؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

----------


## seyed_farid

اول تقويمتو مشخص كن.(شمسي، قمري، ميلادي).
بعدش هم؛
XCalPlannerCalendar1.Date := Now ; 
maskedit1.Text := (XCalPlannerCalendar1.DatesAsText);

----------


## tik_tak

با سلاممن یه مشکلی داشتم اونم اینه که :من وقتی تو فرم 2 تا XCalPlannerMaskDatePicker و یه دونه PersianCalendar1وبعد میام خاصیت XCalender مربوط به این 2 تا XCalPlannerMaskDatePicker رو برابر ، PersianCalendar1 قرار میدم تا اینجا که هیچ مشکلی نیست تقویم تو این کمبوباکسا نشون داده میشه
 ولی یه خطا::::::::::
اونم اینه که مثلا شما بیاید رو XCalPlannerMaskDatePicker اولی کلیک کنید بعد بیاید رو XCalPlannerMaskDatePicker دومی کلیک کنید اینجاست که این خطا میاد :
*PROJECT*
* PROJECT1.EXE RAISED EXCEPTION CLASS ECONVERTERROR WITH MESSAGE '''IS NOT A VALID DAT'.PROCESS STOPPED .USE STEP OR RUN TO CONTINUE.*

----------


## tik_tak

> با سلام
> من یه مشکلی داشتم اونم اینه که :من وقتی تو فرم 2 تا XCalPlannerMaskDatePicker و یه دونه PersianCalendar1وبعد میام خاصیت XCalender مربوط به این 2 تا XCalPlannerMaskDatePicker رو برابر ، PersianCalendar1 قرار میدم تا اینجا که هیچ مشکلی نیست تقویم تو این کمبوباکسا نشون داده میشه
> ولی یه خطا::::::::::
> اونم اینه که مثلا شما بیاید رو XCalPlannerMaskDatePicker اولی کلیک کنید بعد بیاید رو XCalPlannerMaskDatePicker دومی کلیک کنید اینجاست که این خطا میاد :
> *PROJECT*
> *PROJECT1.EXE RAISED EXCEPTION CLASS ECONVERTERROR WITH MESSAGE '''IS NOT A VALID DAT'.PROCESS STOPPED .USE STEP OR RUN TO CONTINUE.*


در رابطه یا این مشکله به نظر خودم تنها راهش اینه که *مااجازه ندیم* کاربر تو محیط کمبوباکس یعنی اونجایی که تاریخ نمایش داده میشه و نوشته میشه کلیلک کنه و فقط کاربر با اون مثلث کنار کمبوباکس فقط بتوونه کار کنه و تاریخشو انتخاب کنه 
چه جوری میتونم این کارو انجام بدم ؟؟؟؟؟؟
و
آیا
راه دیگه ای هست ؟؟؟؟؟؟
ممنون میشم یکی سریع جوابمو بده :ناراحت: 
مرسی

----------


## adgteq

سلام




> من ميخوام با استفاده از ايونتها جدولي و فرمي بسازم و ايونتها رو توش ويرايش كنم و قابليت حذف هم داشته باشه.


فرض کنیم روی فرم یک ListBox برای نمایش لیست رویدادهای سالانه (lbEvents) یک Edit برای ورود عنوان رویداد (edtTitle) یک CheckBox برای انتخاب تعطیل بودن یا نبودن (cbVacation) یک ComboBox برای انتخاب نوع تقویمی که رویداد بر اساس آن محاسبه می شود (cboCalendar) و کنترل های دیگر برای پارامتر های لازم دیگر داشته باشیم. کد لازم برای دکمه های Add و Delete و Update می تواند شبیه کد زیر باشد:

procedure TForm1.btnAddClick(Sender: TObject);
begin
  with XCalendarEvents1.Events.Add do
  begin
    Title := edtTitle.Text;
    IsVacation := cbVacation.Checked;

    case cboCalendar.ItemIndex of
      0: XCalendar := PersianCalendar1;
      1: XCalendar := HijriCalendar1;
      2: XCalendar := GregorianCalendar1;
    end;

    case rgRuleType.ItemIndex of
      0: // Exact day
      begin
        Month := StrToInt(edtMonth.Text);
        Day := StrToInt(edtDay.Text);
      end;
      1: // Nth Day-of-week in month
      begin
        Nth := ...
        DayOfWeek := ...
        Month := ...
      end;
      ...
    end;

    ...

  end;
end;

procedure TForm1.btnDeleteClick(Sender: TObject);
begin
  XCalendarEvents1.Events.Delete(lbEvents.ItemIndex)  ;
end;

procedure TForm1.btnUpdateClick(Sender: TObject);
begin
  with XCalendarEvents1.Events[lbEvents.ItemIndex] do
  begin
    Title := edtTitle.Text;
    IsVacation := cbVacation.Checked;

    ... // Just like the code for btnAddClick
    
  end;
end;
البته باید یک مقدار کد هم برای به روز رسانی کنترلها نوشت.





> من میخوام تاریخ همون روز رو تو ماسک ادیتهایی که بالایه صفحه های برنامه م هست رو نشون بده


همانطور که می دانید مقدار TDateTime روز جاری را در دلفی می توان با تابع Date بدست آورد (یا اگر همراه با زمان جاری می خواهید با تابع Now). با استفاده از XCalendar هم که تمام امکاناتی که در دلفی برای تقویم میلادی موجود است بطور عمومی برای تقویمهای مختلف پیاده سازی شده قابل دسترسی هست. (پست سیزدهم را ببینید) مثلا می توانید از متد DateToStr استفاده کنید:

maskedit1.text := PersianCalendar1.DateToStr(Date);
 در ضمن برای محاسبات تقویمی هیچ نیازی به استفاده از کنترل های انتخاب تاریخ نیست. آن کنترل ها خود از امکانات کامپوننت های تقویم استفاده می کنند.






> مثلا شما بیاید رو XCalPlannerMaskDatePicker اولی کلیک کنید بعد بیاید رو XCalPlannerMaskDatePicker دومی کلیک کنید اینجاست که این خطا میاد


این خطا فقط هنگام debug برنامه تحت دلفی نمایش داده می شود و فکر می کنم در نسخه اصلی کنترل ها هم این مشکل وجود داشته. با غیر فعال کردن Stop on Delphi Exceptions (یا Notify on language exceptions) در Debugger Options می شود از نمایش این پیغام جلوگیری کرد.

----------


## tik_tak

> *با غیر فعال کردن Stop on Delphi Exceptions (یا Notify on language exceptions) در Debugger Options*


میشه بگید اینی که گفتید کجاست ؟ یه مقدار توضیح بدید ممنونم میشم
با تشکر

----------


## adgteq

در تنظیمات دلفی می توانید این گزینه را پیدا کنید. مثلا در دلفی 7 در منوی Tools->Debugger Options تب Language Exceptions با غیر فعال کردن گزینه Stop on Delphi Exceptions اگر هنگام اجرای برنامه تحت دلفی خطایی پیش بیاید دلفی اجرای برنامه را قطع نمی کند. اما در صورت فعال بودن این گزینه، دلفی با بروز هر exception حتی اگر با try...except هم handle شده باشد (مثل مشکل مورد بحث) اجرای برنامه را قطع می کند.

----------


## vb_nima

آقای adgteq خیلی ممنون از زحماتتون. 
من یک مشکلی پیدا کردم وقتی از بعضی فرمام خارج میشم یک همچین پیغام خطایی داده میشه.

Projecet daroukhane.exe raised exception class EAccessViolation with message 'Access violation at address 00405934 in module 'daroukhane.exe'. Read of address 000008FC'. Proceess stopped. Use Step or Run to continue
و پس از Ok کردن به این قسمت از کد xcalDB پرش میکنه و به inherited اشاره میشه.:


destructor TXcalDateTimeField.Destroy;
begin
  if Assigned(FXCalendar) then
    FXCalendar.RemoveNotify(XCalendarSettingsChanged);

  inherited;
end;
لطفا راهنماییم کنید چه کار کنم که این خطا داده نشه؟
ممنونم.

----------


## vb_nima

لطفا کمک کنید. هیچکدوم از دوستان این مشکل که من گفتم براشون پیش نیومده؟ اینم یادم رفته بود بگم نسخه دلفیم 7 .

----------


## adgteq

سلام

نسخه 1.1.0 با پشتیبانی از دلفی 2009 (و رشته های یونیکد) و رفع مشکل پیش آمده برای vb_nima عزیز رو میتونید از لینک موجود در پست اول دانلود کنید. بابت تاخیر پیش آمده عذرخواهی میکنم.
توجه: کنترلهای انتخاب تاریخ در این مجموعه موجود نیست.

----------


## devilsh2003

با عرض سلام و خسته نباشید خدمت دوستان عزیز...
من با یه مشکل نسبتا اساسی برخورد کردم. اونم اینکه تقویم قمری مشکل داره. مثلا 30 صفر توی سال 88 نداریم . و این نمونه ها برای اعلام تعطیلات مشکل درست می کنه .

----------


## saleh_fartash

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

----------


## adgteq

سلام




> من با یه مشکل نسبتا اساسی برخورد کردم. اونم اینکه تقویم قمری مشکل داره. مثلا 30 صفر توی سال 88 نداریم . و این نمونه ها برای اعلام تعطیلات مشکل درست می کنه .


همانطور که می دانید طول ماههای قمری بر اساس مشاهده هلال ماه بدست می آید. در XCalendar برای تنظیم طول ماههای تقویم قمری، باید از رویداد OnGetDaysInAMonth کامپوننت تقویم استفاده کنید و پارامتر NDays را بر حسب سال و ماه مقداردهی کنید. در غیر این صورت طولهای قراردادی ماهها در نظر گرفته می شود. اگر می خواهید سالهای کبیسه قمری را نیز مشخص کنید باید از کامپوننت TObservedHijriCalendar و رویداد OnFindLeapYears آن استفاده کنید. در غیر این صورت سالهای کبیسه قراردادی با دوره 30 ساله در نظر گرفته خواهد شد. در دموی IranEvents این کار انجام شده.




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


کنترل PlannerCalendar یک خاصیت Events دارد که یک Collection هست و می توانید لیست تاریخ های مورد نظرتان را در آن ایجاد کنید. مثلا کد زیر یک تاریخ نمونه را اضافه می کند:

  with XCalPlannerCalendar1.Events.Add do
  begin
    Date := PersianCalendar1.EncodeDate(1388, 5, 2);
    Hint := 'The Hint';
    Shape := evsNone;
    FontColor := clFuchsia;
  end;
برای تشخیص کلیک هم می توانید از رویداد OnDayChange استفاده کنید:

procedure TForm1.XCalPlannerCalendar1DayChange(Sender: TObject; origDate, newDate: TDateTime);
begin
  if newDate = PersianCalendar1.EncodeDate(1388, 5, 2) then
    ShowMessage('The Message');
end;

----------


## devilsh2003

از جواب شما ممنون ولی اگر مطلع باشید تقویم قمری یکی از دقیق ترین هاست و نوع محاسبه آن ربطی به دیدن ماه توی آسمان نداره (البته به غیر از ایران و قوانین خاص خودش)........ و من متوجه شدم نحوه محاسبه تقویم های چاپ شده ایرانی که مشکل داره ..

----------


## adgteq

سلام

من هم از توجه شما ممنونم. اما تا جایی که من اطلاع دارم تقویم قمری مورد استفاده در کلیه کشورهای اسلامی بر مبنای رؤیت هلال ماه استوار است و ایجاد اختلاف به دلیل تفاوت فتاوی علما در مواردی مانند جایز بودن رؤیت با چشم مسلح، قابل قبول بودن محاسبات نجومی که رؤیت‌پذیری یا عدم رؤیت‌پذیری را در صورت صاف بودن هوا پیش بینی می کنند، امکان ارجاع به رؤیت هلال در مناطق دیگر و ... می باشد.
در مورد ایران هم حدودا از سال 80 استخراج تقویم کشور بر عهده مرکز تقویم مؤسسه ژئوفیزیک دانشگاه تهران گذاشته شده است که پیش از پایان خرداد هر سال تقویم سال آینده را تنظیم می کند. احتمالا طول ماههای قمری با مقایسه مشخصه های نجومی ماه در آغاز هر ماه با رکوردهای رؤیت هلال گذشته، در نقاط مختلف کشور استخراج می شود.
در هر صورت با توجه به نکات گفته شده و همچنین تغییرات بعدی طول ماهها بخصوص ماه رمضان و ماههای قبل و بعد از آن، ضرورت وجود روشی برای تنظیم تقویم اجتناب ناپذیر به نظر می رسد.

----------


## ehsan_ei

سلام دوست عزیز:
من یه تازه کارم و در این پروژه ای که دارم مینویسم باید کاربر تاریخ شمسی رو وارد کنه و قبل از ذخیره توی دیتا بیس(SQL) به میلادی تبدیل بشه و برعکس، وقتی کاربر میخواد اطلاعات داخل dbرو ببینه باید قمری ثبدیل به شمسی بشه. من طبق فایل install این کامپوننت شما رو نصب کردم اما نمیدونم برای این منظور که گفتم چه جوری ازش استفاده کنم!! :خیلی عصبانی:  اگه ممکنه برام توضیح بدین. :خجالت: 
با تشکر. :بوس:

----------


## ehsan_ei

دوستان:
توی این سایت این همه برنامه نویس خبره هست! یعنی واقعا کسی نیست که به داد من برسه :متعجب: !!!!!!!!!!!
خیلی حیاتییه  :گریه: 
شمارو خدا کمک کنین :خیلی عصبانی:

----------


## alamdar_761

> مجموعه کامل XCalendar 1.1.1 همراه با کنترلهای TMS Planner سازگار شده با  آن را به این پست اتچ کرده ام. پکیج های لازم برای نصب رو هم اضافه کرده ام  (با تشکر از مهران). البته متاسفانه روی دلفی 2009 قابل نصب نیست.


اگر امکان داره این کامپوننت را همراه با کنترلهای TMS Planner سازگار شده برای دلفی 2010 بگزارید یا راحلی را نشان دهید که این کامپوننت را با Tms planner برای دلفی 2010 استفاده کنم

یا علی

----------


## alamdar_761

یعنی توی این سایت با این هم کاربر کسی نیست به داد این تاپیک برسه

----------


## vcldeveloper

> یعنی توی این سایت با این هم کاربر کسی نیست به داد این تاپیک برسه


کسی نیست که وقت آزاد داشته باشه، و برای شما آن کامپوننت را برای استفاده از TMS Planner در دلفی 2010 به روز کنه.

شما خودتون می تونید دست به کار بشید. کاربر مربوطه زحمت کشید و آن را تا اینجا نوشت، و به طور آزاد در اختیار دیگران قرار داد. شما اگر بهش نیاز دارید، می تونید خودتان آن را به روز کنید، و آن را به طور آزاد با سایر کاربران به اشتراک بزارید.

----------


## alamdar_761

> کسی نیست که وقت آزاد داشته باشه، و برای شما آن کامپوننت را برای استفاده از TMS Planner در دلفی 2010 به روز کنه.
> 
> شما خودتون می تونید دست به کار بشید. کاربر مربوطه زحمت کشید و آن را تا اینجا نوشت، و به طور آزاد در اختیار دیگران قرار داد. شما اگر بهش نیاز دارید، می تونید خودتان آن را به روز کنید، و آن را به طور آزاد با سایر کاربران به اشتراک بزارید.


واقعا ممنون از جوابتون!
خب بازم شکر یکی جوابمونو داد از بلاتکلیفی در اومدیم
امیدوارم حداقل یک راهنمایی کوچیک برای آپدیت کامپوننت کنید

----------


## golbafan

بيا باباجان اينم سورس تغيير يافتش...

----------


## مائده 100

> بيا باباجان اينم سورس تغيير يافتش...


با سلام اينكه با 2010 سازگار نيست كسي مي تونه با 2010 سازگارش كنه مرسي به داد ما تازه كارا هم برسيد

----------


## مائده 100

با سلام من اين كامپونت رو تو دلفي 7 نتونستم نصب كنم يعني موقع كامپايل ارور ميدهprocedure TListHintWindow.CreateParams(var Params: TCreateParams);
خواستم يك پكيج تو 2010 هم  درست كنم كه باز ارور كامپيال ميده اگه ميتونه منو راهنمايي كنه ممنون مي شم

----------


## مائده 100

> با سلام من اين كامپونت رو تو دلفي 7 نتونستم نصب كنم يعني موقع كامپايل ارور ميدهprocedure TListHintWindow.CreateParams(var Params: TCreateParams);
> خواستم يك پكيج تو 2010 هم درست كنم كه باز ارور كامپيال ميده اگه ميتونه منو راهنمايي كنه ممنون مي شم


 سلام كسي نيست راهنمائي كنه :ناراحت:  :متفکر:

----------


## MOJTABAATEFEH

با دابل کلیک روی کامپوننت نمیشه رویداد ها رو تغییر داد باید چطور عمل کرد؟

با تشکر

----------


## golbafan

من کام÷وننت رو برای d2007 تغییر دادم و سورس هم گذاشتم

اگر روزی قرار شد از d2010 و غیره استفاده کنم بازم تغییرش میدم

ولی تا اون موقع خودتون دست بکار بشین

روش تغییر دادنش همینطوره که من تغییر دادم

----------


## Modernidea

> بيا باباجان اينم سورس تغيير يافتش...


یک لطفی میکنید یک توضیح کوچیک بدید که چطوری باید تغییر سورس داد؟

----------


## ahmadbh

با سلام
من تازه كارم و ميخوام كه يك مقدار عددي را به يك تاريخ اضافه يا كم كنم
مثلا 7 روز به تاريخ اضافه كنم يا 35 روز كم كنم
لطفا اگر سورسي براي من بگذاريد ممنون ميشوم با دلفي 7
با تشكر

----------


## MOJTABAATEFEH

سلام
دوستان عزیز نسخه سازگار با دلفی 2010 وجود داره؟

با تشکر

----------


## MOJTABAATEFEH

از دوستانی که با این کامپوننت کار کردن کسی از اینکه برای دلفی 2010 هم بروز شده اطلاعی داره؟
یا درصورت امکان راجع بروزرسانی کامپوننت ها و خصوصا الان این کامپوننت توضیحی بده؟

با تشکر

----------


## adelmobasheri

سلام
لطفا برای نسخه delphi XE2 هم ارائه بدید.
حین compile در XE2 پیغامهای خطایی از جمله :

 [DCC Error] xcalAdvEdit.pas(139): E2065 Unsatisfied forward or external declaration: 'TListHintWindow.WMNCButtonDown' 

را می دهد.

----------


## MOJTABAATEFEH

توی 2010 هم همین پیغام خطا رو میده
دوست عزیزی که زحمت استارت این کار رو کشیدن لطفا در خصوص این تغییرات هم توضیحی بفرمایند یا هر کدام از دوستان که اطلاعی دارند خصوصا مدیر بخش

با تشکر

----------


## MOJTABAATEFEH

دوستان عزیز برای دریافت نسخه هماهنگ با 2010 به صفحه زیر بروید
https://barnamenevis.org/showthread.p...69#post1355069

----------


## seyed_farid

با سلام
این کومپوننت روز اول سال قمری جاری 1433 را مشکل داره و تاریخ رو یک روز بیشتر نشون میده. :ناراحت: 
تا آخرین روز سال 1432 خوبه ولی سال جدید رو مشکل داره. چطور میشه حلش کرد :تشویق: 
در حقیقت یکشنبه باید اول محرم باشد. در ماه ذیحجه درست است اما در محرم (تصویر پائین) اشتباه است.

----------


## hadisalahi2

آره داداش
من هم همین مشکل رو باهاش دارم
امیدوارم یک نفر که در این زمینه آشنایی داره ، در مورد رفع این ایراد راهنمایی کنه

----------


## golbafan

از hijricalendar استفاده کنید و مقدار hijriadjustment رو تغییر بدین

Untitled.jpg

----------


## hadisalahi2

چه تغییری باید بدم ؟
مثلا اگه صفر هستش من بدم 1؟

----------


## hamedjim

سلام.
کسی می‌دونه چطور باید کاری کرد در یک XCalPlannerCalendar که ویژگی XCalendar اون به یک PersianCalendar نسبت داده شده، مناسبت‌های قمری رو هم به او اضافه کرد؟

مثلا همون‌طور که در عکس زیر می بینید، روزهایی که مناسبت شمسی دارند، بولد شدند و در بین اونها روزهایی که تعطیل رسمی هستند، قرمز رنگ میشند. حالا من نیاز دارم مناسبت‌های قمری هم به همین شکل در بیان. یعنی 20 مرداد (25 شوال) که شهادت هست و یک روز تعطیل، باید قرمز رنگ بشه. 

Cal.jpg

البته لازم به ذکره من از کدی آقای گلبافان در نمونه برنامه‌شون گذاشته بودند، مناسبت‌ها رو فراخوانی می‌کنم و همون‌طور که می‌بینید، این روز به عنوان یک وکیشن (روز تعطیل) تعیین شده:


```
<Event Month="10" Day="25" XCalendar="HijriCalendar" Title="شهادت حضرت امام جعفر صادق عليه السلام، 148 هـ ق" IsVacation="1"/>
```

----------


## hamedjim

> کسی می‌دونه چطور باید کاری کرد در یک XCalPlannerCalendar که ویژگی XCalendar اون به یک PersianCalendar نسبت داده شده، مناسبت‌های قمری رو هم به او اضافه کرد؟


این مشکل رو با اختصاص یک XCalendarEvents که با فایل زیر لود شده حل کردم. فایل xml زیر ترکیب تمام رویدادهای شمسی و میلادی و قمری با در نظر گرفتن روزهای تعطیل هست:

Events.rar

----------

