PDA

View Full Version : نیاز به یک Edit جهت دریافت تاریخ شمسی



dana74
سه شنبه 20 فروردین 1387, 12:46 عصر
سلام. یک Edit یا MaskEdit نیاز دارم تا تاریخ شمسی را به درستی و به راحتی دریافت کند. ضمنا اگر بخواهم در یک سل StringGrid تاریخ شمسی را دریافت کنم چه راهی را پیشنهاد می کنید؟ ضمنا مجانی هم باشد!
با تشکر

nouri2015
سه شنبه 20 فروردین 1387, 13:50 عصر
شما کافی است یک MaskEdit بگیرید bidimode آنرا RigthToLeft بگذارید

Amir_Safideh
سه شنبه 20 فروردین 1387, 14:06 عصر
شما کافی است یک MaskEdit بگیرید bidimode آنرا RigthToLeft بگذارید

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

یک Edit یا MaskEdit نیاز دارم تا تاریخ شمسی را به درستی و به راحتی دریافت کند من خودم چند تا فانکشن برای تبدیل تاریخ و کنترل تاریخ دارم که معمولا از اونها برای اینکار استفاده میکنم . اگر با کمک این دوستمون هنوز مشکلتون حل نشده بفرمائید تا یونیت این فانکشنها رو براتون اپلود کنم .
-----------
موفق باشید .

SYNDROME
سه شنبه 20 فروردین 1387, 16:28 عصر
ضمنا اگر بخواهم در یک سل StringGrid تاریخ شمسی را دریافت کنم چه راهی را پیشنهاد می کنید؟ ضمنا مجانی هم باشد!

می توانید از DBGrid استفاده کنید و با تنظیم خاصیت mask مربوط به aDO فرمت تاریخ شمسی را بگیرید"YYYY/MM/DD" ولی باید با توابع چک کردن تاریخ ، چک کنید ببینید درست وارد شده است یا نه.
موفق باشید

nouri2015
سه شنبه 20 فروردین 1387, 16:33 عصر
اینکه تاریخ رو از طرف کاربر دریافت کند با اینکه از این داده به عنوان تاریخ استفاده کند (همانند تاریخ میلادی) خیلی فرق میکند ؛اگر منظور دوستمان حالت دوم باشد باید به قول آقای Amir_Safideh از سورسهائی که در این forum هم هست تاریخ میلادی به شمسی و شمسی به میلادی را تبدیل کند.
موفق باشید...

dana74
چهارشنبه 21 فروردین 1387, 14:32 عصر
مشکل من تبدیل تاریخ نیست. من نیاز به یک کامپوننتی دارم تا تاریخ شمسی را دریافت کنه.

Amir_Safideh
چهارشنبه 21 فروردین 1387, 15:17 عصر
دوست عزیز این فانکشن رو توی برنامت قرار بده :

function CheckValidDate(DateStr:shortstring;DateKind:byte): shortstring;
var
Mm,
Dd,
Yy : string;
begin
case DateKind of
8:
begin
Yy:=copy(DateStr,1,2);
Mm:=copy(DateStr,4,2);
Dd:=copy(DateStr,7,2);
end;
10:
begin
Yy:=copy(DateStr,1,4);
Mm:=copy(DateStr,6,2);
Dd:=copy(DateStr,9,2);
end;
end;
if(Dd<>'0 ') and ((Dd>'31') or (Dd<'01'))
or ((Mm>'06') and (Dd>'30')) then
Dd:=' ';
if(Mm<>'0 ') and ((Mm>'12') or (Mm<'01')) then
Mm:=' ';
Result := Yy +'/' + MM + '/' + DD
end;

بعد یک MaskEdit و خاصیت EditMask اون رو برابر با
9999/99/99;1;_
قرار بده بعد هم در رویداد OnKeyPress مربوط به MaskEdit این کد رو بنویس .

procedure TForm1.MaskEdit1KeyPress(Sender: TObject; var Key: Char);
begin
MaskEdit1.Text := CheckValidDate(MaskEdit1.Text,Length(MaskEdit1.Tex t));
end;

بعد برنامه رو اجرا کن و یک تاریخ رو وارد کن . امیدوارم که کمکت کنه .
---------------
موفق باشید .

dana74
جمعه 23 فروردین 1387, 08:14 صبح
دوست عزیز این فانکشن رو توی برنامت قرار بده :

مرسی امیر خان. کد فوق خوب است اما بهتر است این کد طوری تغییر داده شود که:
اولا کاربر مجبور نباشد مثلا برای ماه فروردین دو رقم را وارد کند (با تایپ عدد 1 و بعد Enter سراغ قسمت بعد برود)
ثانیا کرزر بطور اتوماتیک به محل عدد اشتباه هدایت شود.