# Native Code > برنامه نویسی در Delphi >  maskedit برای تاریخ شمسی

## SReza1

کسی maskedit برای تاریخ شمسی داره؟

----------


## Mahdi_S_T

دوست عزیز آقای فراهانی یک کامپوننت داره که شامل MaskEdit هم است اما یه کم خرج داره
www.Farsicomponents.com

البته نسخه نمایشی یه کامپوننت هم بنام Falad هم است که دارای MaskEdit تاریخ هم است اما زیاد دقیق نیست که اگه لازم بود با یه جستجو  همین سایت پیدا می کنی ( اگه نسخه اصلی آن را پیدا کردی به من هم خبر بده )

----------


## Mohammad S

آقای ربیعی هم یکی داره

----------


## مهندس

سلام

بنده Shdate رو که برای Farsicomponents.com هست رو گرفتم و 5500 تومن هم دادم...

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

----------


## SReza1

مرسی دوستان!! خودم نوشتم!! :D

----------


## Mohammad S

> مرسی دوستان!! خودم نوشتم!! :D


خوب اونو اگه مجانیه اینجا هم بذار  :wink:

----------


## مهندس

سلام

یعنی چی اونوقت که خودم نوشتم ؟ بیشتر توضیج بدید مام بدونیم.   :متفکر:

----------


## SReza1

من مشکل تبدیل تاریخ میلادی و این چیزا رو نداشتم!! mask  کردن بود!!
شما کامپوننتهای hrdate رو استفاده کنید معرکست!

----------


## info_1359

> کسی maskedit برای تاریخ شمسی داره؟


سلام از این تابع که خودم نوشتم میتونید استفاده کنید . تابع InputDateShamsi در ایونت  onkeypress فراخوانی کنید به این شکل:


procedure TForm1.maskedit1KeyPress(Sender: TObject; var Key: Char);
begin
key:=InputDateShamsi(key,maskedit1.Text,maskedit1.  SelStart);
end;

در قسمت properties   کامپوننت maskedit1  خاصیت EDITMask اونو برابر  :
EDITMask:  ####/##/##;0;
قرار بدین.

//**********
function InputDateShamsi(Key:Char;datem:string;makan:intege  r):Char;
//  EDITMask:   ####/##/##;0;
// onkeypress
var
 mah1,mah2,rouz1,rouz2,mah,k:integer;
begin
 if (key in['0'..'9']) then
 begin
  datem:=datem+key;  k:=StrToInt(key);
 end else  datem:=datem;
 if StrLen(pchar(datem)) >4 then mah1:=StrToInt(TrimRight(Copy(datem, 5, 1)));
 if StrLen(pchar(datem)) > 5 then
 begin
  mah2:=StrToInt(TrimRight(Copy(datem, 6, 1)));
  mah:=StrToInt(TrimRight(Copy(datem, 5, 2)));
 end;
 if StrLen(pchar(datem)) > 6 then  rouz1:=StrToInt(TrimRight(Copy(datem, 7, 1)));
 if StrLen(pchar(datem)) > 7 then  rouz2:=StrToInt(TrimRight(Copy(datem, 8, 1)));
 if (makan=0)and(k<>1) then key:=#0;
 if (makan=1)and(k<3) then key:=#0;
 if ((makan=5)and(k=1)and(mah2>2))or((makan=5)and(k>1)  ) then key:=#0;
 if ((makan=6)and(k=0)and(mah1=0)) then key:=#0;
 if ((makan=6)and(k>2)and(mah1=1)) then key:=#0;
 if (makan=8) then
 begin
  if k>3 then key:=#0;
  if ((k=3)and(rouz2>1)) then key:=#0;
  if ((k=3)and(rouz2>0)and (mah>6)) then key:=#0;
 end;
 if (makan=9) then
 begin
  if ((k>1)and(rouz1=3)) then key:=#0;
  if ((k>0)and(rouz1=3)and (mah>6)) then key:=#0;
 end;
 Result := key;
end;

----------

