نوشته شده توسط
SReza1
کسی 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;