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

## yaas135

با سلام
کسی کامپوننت تقویم فارسی سراغ داره که به شکل زیر کار کنه، یا یه چیز تو این مایه ها:

ممنونم و منتظر
یا علی

----------


## babak869

به آرس زیر مراجعه نماید
http://www.FarsiComponents.com

----------


## cybercoder

SHDATE Solutions طراحی شده توسط آقای امیر رحیمی فراهانی با امکانات فوق العاده عالی و تقریبا بدون هیچ باگی و قیمت ارزان
 به این آدرس مراجعه کنید http://www.farsicomponents.com

در ضمن قبل از مطرح کردن سوال در فروم جستجو کنید.

موفق باشید

----------


## B_YAGHOBI

رایگان - فول سورس

----------


## davoodmz

با سلام
shdate - فارسی کامپونتس عالی است .فقط سوال اینجاست که با گزارشها چطور کار می‌کند.
باتشکر

----------


## cybercoder

> shdate - فارسی کامپونتس عالی است .فقط سوال اینجاست که با گزارشها چطور کار می‌کند.


به راحتی
 من در Fast Report خیلی راحت ازش استفاده می کنم.
در کجاش مشکل داری؟

----------


## nima_jafari

مرسی از component خوب است

----------


## yaas135

آقا به شدت دستتون درد نکنه. ایشا الله کربلا بری

----------


## ali_divsalar

آقای یعقوبی 
سلام
به نظر می آد یه فایل res کم باشه. چون ظاهرا قابل استفاده نیست

----------


## yaas135

بله یه چیزی کم داره!!!
چون اینستال نمی شه.

----------


## babak869

بله یکی از فایل های ریسورس در مجموعه نیست.لطفا اونو اصلاح و کامل نمایید
با تشکر

----------


## saeed_d

سلام
موقع کامپایل کردن پکیج سوال میکنه که فایل res رو بسازه؟ پس از پاسخ مثبت یه فایل با نام calender.res ساخته میشه. اسم اونو به calendr.res تغییر دهید و دوباره کامپایل کنید. بار دوم نصب میشه.

----------


## cybercoder

مسیر کامپوننت shdate را در قسمت path در environment به لیست مسیر ها اضافه کنید یا کل فایل ها را به مسیر delphi\lib یا elphi\bin کپی کنید.

موفق باشید.

----------


## yaas135

> سلام
> موقع کامپایل کردن پکیج سوال میکنه که فایل res رو بسازه؟ پس از پاسخ مثبت یه فایل با نام calender.res ساخته میشه. اسم اونو به calendr.res تغییر دهید و دوباره کامپایل کنید. بار دوم نصب میشه.


از من اصلا نمی پرسه که برم خودم بسازم! که من بتونم ریسورس رو ری نیم کنم!




> مسیر کامپوننت shdate را در قسمت path در environment به لیست مسیر ها اضافه کنید یا کل فایل ها را به مسیر delphi\lib یا elphi\bin کپی کنید.


این کار برای چی باید انجام بشه؟

----------


## B_YAGHOBI

داخل فایل Calender.dpk  خط {$R *.res} را پاک کنید.

----------


## yaas135

تو دیگه حتما ان شاالله کربلا بری/ دمت گرم/ یا علی

----------


## cybercoder

> این کار برای چی باید انجام بشه؟


خیلی ساده بگم تا دلفی بدونه که فایل های مربوط به Shdate کجا هستند.

موفق باشید

----------


## yaas135

> خیلی ساده بگم تا دلفی بدونه که فایل های مربوط به Shdate کجا هستند.
> 
> موفق باشید


ممنونم از توضیحتون

----------


## sardar_ahmadi

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

----------


## ali_divsalar

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

----------


## babak869

جناب یعقوبی عزیز
این عکسی که شما از کامپوننتتون گذاشتید با چهره کامپوننت بعد از نصب تفاوت داره. آیا این برنامه بعدا تغییری کرده؟

----------


## B_YAGHOBI

نه دوست من 
من این کامپوننت را روی یک فرم گزاشتم با کلیدهایی که دیدید با این توابه

//------------------------------------------------------------------------------
Procedure TFrmCalendar.BBNextMonClick(Sender: TObject);
Begin
  Clndr.NextMonth;
End ;

//------------------------------------------------------------------------------
Procedure TFrmCalendar.BBPrevMonClick(Sender: TObject);
Begin
  Clndr.PrevMonth;
End ;

//------------------------------------------------------------------------------
Procedure TFrmCalendar.BBNextYearClick(Sender: TObject);
Begin
  Clndr.NextYear;
End ;

//------------------------------------------------------------------------------
Procedure TFrmCalendar.BBPrevYearClick(Sender: TObject);
Begin
  Clndr.PrevYear;
End ;

//------------------------------------------------------------------------------
Procedure TFrmCalendar.ClndrChange(Sender: TObject);
Begin
 LDate.Caption:=M2Sh(Clndr.CalendarDate);
End ;

//------------------------------------------------------------------------------
Procedure TFrmCalendar.ClndrDblClick(Sender: TObject);
Begin
  ModalResult := mrOk ;
End ;

----------


## babak869

درسته ممنونم.من فکر کردم که اون کلیدها هم جز کامپوننت هستش و با گذاشتن اون روی فرم اون دگمه ها هم میاد!!!
ممنون

----------


## ali_divsalar

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

----------


## B_YAGHOBI

یک فرم طراحی کنید کامپوننت و تمام کلیدهای لازم را روی آن قرار دهید. مثل شکل

حالا یک فانکشن تعریف کنید مثلا به اسم ShowCal که این فانکش تاریخ را برمیگرداند.

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

زد و تاریخ را دریافت خواهید کرد.

----------


## davoodmz

با سلام 
هیچ شکی نیست که بهترین کامپونت فارسی در ایران است و انشاء ا... این مشکل هم رفع شود که 
با report builder مشکل دارده و اینکه در این گزارش ساز به صورت میلادی تاریخ نشان داده می شود 
لطفاً راهنمایی کنید چه کار کنم
با تشکر
داود

----------


## B_YAGHOBI

دوست عزیز شما میتوانید در ReportBuilder فانکشنهای خود را رجیستر کنید و استفاده کنید

من یک یونیت برای خودم نوشتم که یک سری فانکشنها را رجیستر کردم

شما این یونیت نمیتوانید استفاده کنید چون یک سری از یونیتهای دیگری لازم دارد.

شما فقط نوع تعریف کردن فانکشنها و طریقه رجیستر کردن آنها را میتوانید از آن بردارید :


unit rap_Func;

interface

uses
  Classes,sysutils, Forms, raFunc, ppRTTI, db, OSDB, ppUtils, Variants;

type

  { TmyDevelopersFunction }
  TLibFunctions = class (TraSystemFunction)
  public
    class function Category: string; override;
  end;

  { TmyGetDelphiComponentFunction }
  TGetComponent = class (TLibFunctions)
  public
    procedure ExecuteFunction(aParams: TraParamList); override;
    class function GetSignature: string; override;
  end;

  TGetSysParam = class (TLibFunctions)
  public
    procedure ExecuteFunction(aParams: TraParamList); override;
    class function GetSignature: string; override;
  end;

  TcfValues = class (TLibFunctions)
  public
    procedure ExecuteFunction(aParams: TraParamList); override;
    class function GetSignature: string; override;
//    class function HasParams: Boolean; override;
  end;

  TDValues = class (TLibFunctions)
  public
    procedure ExecuteFunction(aParams: TraParamList); override;
    class function GetSignature: string; override;
  end;

  TcfPutComaBetNumber = class (TLibFunctions)
  public
    procedure ExecuteFunction(aParams: TraParamList); override;
    class function GetSignature: string; override;
  end;

  TcfCalculateNumber = class (TLibFunctions)
  public
    procedure ExecuteFunction(aParams: TraParamList); override;
    class function GetSignature: string; override;
  end;

  TDgt2Farsi = class (TLibFunctions)
  public
    procedure ExecuteFunction(aParams: TraParamList); override;
    class function GetSignature: string; override;
  end;


  TCallMtd = class (TLibFunctions)
  public
    procedure ExecuteFunction(aParams: TraParamList); override;
    class function GetSignature: string; override;
  end;

{  TDeleteItem = class (TLibFunctions)
  public
    procedure ExecuteFunction(aParams: TraParamList); override;
    class function GetSignature: string; override;
  end;}


  TFarsiDate = class (TLibFunctions)
  public
    procedure ExecuteFunction(aParams: TraParamList); override;
    class function GetSignature: string; override;
  end;

  TChr = class (TLibFunctions)
  public
    procedure ExecuteFunction(aParams: TraParamList); override;
    class function GetSignature: string; override;
  end;
  TSh2M = class (TLibFunctions)
  public
    procedure ExecuteFunction(aParams: TraParamList); override;
    class function GetSignature: string; override;
  end;
  TM2Sh = class (TLibFunctions)
  public
    procedure ExecuteFunction(aParams: TraParamList); override;
    class function GetSignature: string; override;
  end;

  TMnt2Hour = class (TLibFunctions)
  public
    procedure ExecuteFunction(aParams: TraParamList); override;
    class function GetSignature: string; override;
  end;

implementation
uses MthdIntf,Sml,ppclass,FConv,Graphics,App_Prms,GlobF  unc,DateFunc,Farsi,Str_Func;
{------------------------------------------------------------------------------}
{ TmyDevelopersFunction.Category}
class function TLibFunctions.Category: string;
begin
  Result := 'LibFunctions';
end;{ class function Category() }

{------------------------------------------------------------------------------}
{ TmyGetDelphiComponentFunction.ExecuteFunction}
procedure TGetComponent.ExecuteFunction(aParams: TraParamList);
var
  lsString: string;
  lResult: TComponent;
begin
  GetParamValue(0, lsString);
  lResult := Application.MainForm.FindComponent(lsString);
  SetParamValue(1, lResult);
end;{ procedure ExecuteFunction() }

{------------------------------------------------------------------------------}
{ TmyGetDelphiComponentFunction.GetSignature}
class function TGetComponent.GetSignature: string;
begin
  Result := 'function GetComponent(const aComponentName: String): TComponent;';
end;{ class function GetSignature() }
{------------------------------------------------------------------------------}
{ TmyGetDelphiComponentFunction.ExecuteFunction}
procedure TGetSysParam.ExecuteFunction(aParams: TraParamList);
var
  ParamName: string;
  lResult: string;
begin
  GetParamValue(0, ParamName);
  lResult := GetSysParam(ParamName);
  SetParamValue(1, lResult);
end;{ procedure ExecuteFunction() }

{------------------------------------------------------------------------------}
{ TmyGetDelphiComponentFunction.GetSignature}
class function TGetSysParam.GetSignature: string;
begin
  Result := 'function cfGetSysParam(ParamName: String): string;';
end;{ class function GetSignature() }
{------------------------------------------------------------------------------}
procedure TCallMtd.ExecuteFunction(aParams: TraParamList);
var
  Param: variant;
  MtdName:string;
  Obj:TObject;
  _Result: variant;
begin
 GetParamValue(0, Obj);
 GetParamValue(1, MtdName);
 MtdName:=Uppercase(MtdName);
 GetParamValue(2, Param);
 _Result:=CallMethod(obj,MtdName,Param,unassigned,u  nassigned,unassigned,unassigned);
 SetParamValue(3, _Result);
end;
{------------------------------------------------------------------------------}
class function TCallMtd.GetSignature: string;
begin
  Result := 'function CallMtd(Obj:TObject;MethodName:string;Parameter:va  riant): variant;';
end;
{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
procedure TcfValues.ExecuteFunction(aParams: TraParamList);
var
  _Result: String;
  Index : Integer;
begin
  GetParamValue(0,Index);
  _Result:=Values[Index];
  SetParamValue(1, _Result);
end;{ procedure ExecuteFunction() }

{------------------------------------------------------------------------------}
{ TcfValues.GetSignature}
class function TcfValues.GetSignature: string;
begin
  result := 'Function cfValues(Index:Integer) : String;';
end;{ class function GetSignature() }
{------------------------------------------------------------------------------}
procedure TDValues.ExecuteFunction(aParams: TraParamList);
var
  _Result: String;
  Index : Integer;
begin
  GetParamValue(0,Index);
  _Result := '';
  if Index < DValues.Count then
    _Result:=DValues[Index];
  SetParamValue(1, _Result);
end;{ procedure ExecuteFunction() }

{------------------------------------------------------------------------------}
{ TcfValues.GetSignature}
class function TDValues.GetSignature: string;
begin
  result := 'Function DValues(Index:Integer) : String;';
end;{ class function GetSignature() }
{------------------------------------------------------------------------------}
procedure TcfPutComaBetNumber.ExecuteFunction(aParams: TraParamList);
var
  _Result,TmpStr: String;
begin

  GetParamValue(0,TmpStr);
  _Result:= PutComaBetNumber(TmpStr);
  SetParamValue(1, _Result);
end;{ procedure ExecuteFunction() }

{------------------------------------------------------------------------------}
{ TcfValues.GetSignature}
class function TcfPutComaBetNumber.GetSignature: string;
begin
  result := 'Function cfPutComaBetNumber(TmpStr:String) : String;';
end;{ class function GetSignature() }

{------------------------------------------------------------------------------}
procedure TcfCalculateNumber.ExecuteFunction(aParams: TraParamList);
var
  Datep,DateCur:String;
  _Result:Integer;
begin
  GetParamValue(0,Datep);
  GetParamValue(1,DateCur);
  _Result:= CalculateNumber(Datep,DateCur);
  SetParamValue(2,_Result);
end;{ procedure ExecuteFunction() }
{------------------------------------------------------------------------------}
{ TcfValues.GetSignature}
class function TcfCalculateNumber.GetSignature: string;
begin
  result :='Function cfCalculateNumber(Datep,DateCur:string):Integer;';

end;{ class function GetSignature() }
{------------------------------------------------------------------------------}
procedure TDgt2Farsi.ExecuteFunction(aParams: TraParamList);
var
  Number:double;
  _Result:string;
begin
  GetParamValue(0,Number);
  ConvertNumberToChar(number,_Result);
  SetParamValue(1,_Result);
end;{ procedure ExecuteFunction() }

{------------------------------------------------------------------------------}
{ TcfValues.GetSignature}
class function TDgt2Farsi.GetSignature: string;
begin
  result:='Function Dgt2Farsi(Number:Double):string;';
end;{ class function GetSignature() }
{------------------------------------------------------------------------------}
procedure TFarsiDate.ExecuteFunction(aParams: TraParamList);
var
 _Result:string;
begin
  _Result:=GetServerDate;
  SetParamValue(0,_Result);
end;{ procedure ExecuteFunction() }
{------------------------------------------------------------------------------}
{ TcfValues.GetSignature}
class function TFarsiDate.GetSignature: string;
begin
  result :='Function FarsiDate:String;';
end;{ class function GetSignature() }
{------------------------------------------------------------------------------}
procedure TChr.ExecuteFunction(aParams: TraParamList);
var
  AsciiCode:integer;
  _Result:char;
begin
  GetParamValue(0,AsciiCode);
  _Result:=chr(AsciiCode);
  SetParamValue(1,_Result);
end;{ procedure ExecuteFunction() }
{------------------------------------------------------------------------------}
{ TcfValues.GetSignature}
class function TChr.GetSignature: string;
begin
  result :='Function chr(AsciiCode:integer):char;';
end;{ class function GetSignature() }
{------------------------------------------------------------------------------}
procedure TSh2M.ExecuteFunction(aParams: TraParamList);
var
  sh,m:t_date;
begin
  GetParamValue(0,sh.y);
  GetParamValue(1,sh.m);
  GetParamValue(2,sh.d);
  shtom(sh,m);
  SetParamValue(3,m.y);
  SetParamValue(4,m.m);
  SetParamValue(5,m.d);
end;{ procedure ExecuteFunction() }
{------------------------------------------------------------------------------}
{ TcfValues.GetSignature}
class function TSh2M.GetSignature: string;
begin
  result :='Procedure Sh2M(sh_y,sh_m,sh_d:integer;var m_y,m_m,m_d:integer);';
end;{ class function GetSignature() }
{------------------------------------------------------------------------------}
procedure TM2Sh.ExecuteFunction(aParams: TraParamList);
var
  sh,m:t_date;
begin
  GetParamValue(0,m.y);
  GetParamValue(1,m.m);
  GetParamValue(2,m.d);
  mtosh(m,sh);
  SetParamValue(3,sh.y);
  SetParamValue(4,sh.m);
  SetParamValue(5,sh.d);
end;{ procedure ExecuteFunction() }
{------------------------------------------------------------------------------}
{ TcfValues.GetSignature}
class function TM2Sh.GetSignature: string;
begin
  result :='Procedure M2Sh(m_y,m_m,m_d:integer;var sh_y,sh_m,sh_d:integer);';
end;{ class function GetSignature() }
{------------------------------------------------------------------------------}

{ TMnt2Hour }

procedure TMnt2Hour.ExecuteFunction(aParams: TraParamList);
var
  Minute:Integer;
  _Result:string;
begin
  GetParamValue(0,Minute);
  _Result:=Mnt2Hour(Minute);
  SetParamValue(1,_Result);
end;{ procedure ExecuteFunction() }

{------------------------------------------------------------------------------}
{ TcfValues.GetSignature}
class function TMnt2Hour.GetSignature: string;
begin
  result:='Function Mnt2Hour(Minute:Integer):string;';
end;{ class function GetSignature() }
{------------------------------------------------------------------------------}

Initialization
  raRegisterFunction('GetComponent', TGetComponent);
  raRegisterFunction('cfGetSysParam', TGetSysParam);
  raRegisterFunction('CallMtd', TCallMtd);
  raRegisterFunction('cfValues', TcfValues);
  raRegisterFunction('DValues', TDValues);
  raRegisterFunction('cfPutComaBetNumber', TcfPutComaBetNumber);
  raRegisterFunction('cfCalculateNumber', TcfCalculateNumber);
  raRegisterFunction('FarsiDate', TFarsiDate);
  raRegisterFunction('chr', TChr);
  raRegisterFunction('Dgt2Farsi', TDgt2Farsi);
  raRegisterFunction('Sh2M', TSh2M);
  raRegisterFunction('M2Sh', TM2Sh);
  raRegisterFunction('Mnt2Hour', TMnt2Hour);
end.

کدهای خودتون رو بین تگهای Code و /code قرار دهید(ذوالقدر)

----------


## davoodmz

با سلام
آقای یعقوبی عزیز
لطفاً خلاصه تر بفرمائید این همه کد برای نشان دادن فارسی در گزارش سازی مانند Builder 
اگر لطف کنید و خلاصه کد( فقط برای استفاده تاریخ شمسی در گزارش ساز بیلدر ) را بنویسید یا راهنمایی کنید ممنون می شم
لازم به ذکر است که در grid  ها  خیلی خوب جواب می دهد ومشکل ندارد و من مکاتبه ای که با آقای فراهانی نویسنده محترم داشتم ایشان اذعان داشتن که از فیلد محاسباتی استفاده کنیم که این هم  فکر نکنم راه درستی باشد حال شما توضیح کامل دهید درباره یونیتی که گذاشتین.
باتشکر
داود

----------


## B_YAGHOBI

یونیت زیر را برداشته و آن را در برنامه خود فقط Uses کنید.

برنامه را اجرا کرده و Designer گزارش ساز را بیاورید (در حالت Design Time کار نخواهد کرد)

به عکس زیر نیز توجه کنید

----------


## B_YAGHOBI

یونیت را بردارید :

----------


## ali_divsalar

> یک فرم طراحی کنید کامپوننت و تمام کلیدهای لازم را روی آن قرار دهید. مثل شکل
> 
> حالا یک فانکشن تعریف کنید مثلا به اسم ShowCal که این فانکش تاریخ را برمیگرداند.
> 
> این فرم یک فرم عمومی برای شما خواهد بود و شما هر کجا لارم است اینفانکش را صدا خواهید
> 
> زد و تاریخ را دریافت خواهید کرد.


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

----------


## B_YAGHOBI

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

Function ShowCalendar(Var SelectDate : String):TModalResult;

----------


## davoodmz

با سلام
آقای یعقوبی عزیز
من یونیت شما را برداشتم و در برنامه کپی کردم و در برنامه use کردم
حال اینکه در گزارش ساز (من report builder 10 ) کار میکنم در کجا و چگونه به قسمت cal اضافه شود.
باتشکر
عکس پیوست را ملاحضه کردم ولی نفهمیدم چطور در قسمت language  چگونه mylabfunction را بسازم.

داود

----------


## B_YAGHOBI

این mylabfunction  بصورت اتوماتیک اضافه میشود 
اگر یونیت فوق را در برنامه خود Uses کنید.

----------


## ali_divsalar

> شما فانکشن خود را بصورت زیر بنویسید :
> 
> Function ShowCalendar(Var SelectDate : String):TModalResult;


من داخل این تابع پیشنهادی شما ، فرم حاوی component شما رو show کردم . بعدش چکار کنم؟
می تونید کمی بیشتر توضیح بدید؟

----------


## B_YAGHOBI

دوست عزیز در مورد تقویم یک مثال برات گذاشتم :

----------


## davoodmz

با سلام
لطفاً روش use را بیان نمائید .شاید من اشتباهی use انجام می دهم
ضمناً نام یونیت با نامی که در عکس پیوست به گزارش ساز اضافه شده است یکی نیست.
با تشکر
داود

----------


## B_YAGHOBI

دوست عزیز این برنامه را بردارید 
یک مثال درباره اضافه کردن کلاس به کلاسهای ReportBuilder میباشد.

----------


## cipher_ir

با سلام میخاستم بدونم این کامپوننت تو دلفی 2006 هم کار میکنه ؟
چطوری نصب میشه ؟

----------


## nasr

چطور میشه گفت که برو به تاریخ مثلا 25 مهرماه 1386 ؟

----------


## nasr

> چطور میشه گفت که برو به تاریخ مثلا 25 مهرماه 1386 ؟


کسی نمی دونه؟

----------

