PDA

View Full Version : تاريخ شمسي خودكار



mobina.amiry
سه شنبه 29 دی 1388, 12:28 عصر
سلام
من مثلا 5 تا تكس باكس دارم ميخوام توي تكس باكس چهارم هميشه خودكار تاريخ شمسي توي تكس باكس چهارمم باشه اگه كسي ميدونه راهنمايي كنه يا اگه كدشا داره ممنون ميشم كمكم كنه

polisoftco
سه شنبه 29 دی 1388, 12:41 عصر
خب تو Form_Load بنویس
مثلا :


Text4.Text=To_Hejri(Date)

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

برای خودکار کردنش هم توی ماژول یک متغیر بنام Today درست کن، بعدش هرجا خواستی تکستت تاریخ داشته باشه، فقط بنویس :

Text4.Text=Today
که در این صورت تاریخ امروز رو میزنه تو تکستت.

mobina.amiry
سه شنبه 29 دی 1388, 15:17 عصر
سلام ممون از راهنمايتون
فقط اين قسمت براي خودكارشدنش را نميدونم چيكار كنم اگه ميشه بگيد كه متغير todyرا چطور درست كنم





برای خودکار کردنش هم توی ماژول یک متغیر بنام Today درست کن، بعدش هرجا خواستی تکستت تاریخ داشته باشه، فقط بنویس :

Text4.Text=Today
که در این صورت تاریخ امروز رو میزنه تو تکستت.

unit001
سه شنبه 29 دی 1388, 20:22 عصر
سلام

شما می توانید کد زیر را در یک ماژول قرار بدید:


Public Function Emrooz ()
Emrooz = To_Hejri(Date)
end Function

و هر بار که خواستید تاریخ امروز را به دست بیاورید فقط کافیست کد:

Text4.Text = Emrooz
را وارد کنید.

mobina.amiry
سه شنبه 29 دی 1388, 22:42 عصر
سلام
يه سوال ديگه داشتم الان من توي تكس چهارمم تاريخ امروز را مينوسه حالا ميخوام توي تكس پنجمم تاريخ امروز را با 14روز ديگه جمع كنه و در تكس پنجم نمايش بده بايد چيكار كنم؟؟؟(يعني تاريخ 2هفته ديگه)

mobina.amiry
چهارشنبه 30 دی 1388, 15:49 عصر
سلام چي شد كسي بلد نيست چطور تاريخ جاري سيستم را با 14روز ديگه جمع كرد ودر تكس پنجم نمايش داد اگه ميدونيد راهنمايي كنيد

M.T.P
چهارشنبه 30 دی 1388, 16:30 عصر
با سلام
با تابع Mid سال و ماه و روز رو جدا کنید و بریزید تو 3 تا متغیر
روزتون رو + 14 کنید و مجدد تاریخ رو چاپ کنید
نکته:
ماه رو چک کن اگه تو 6 ماه اول بودیم شرط بذار اگه روز 18 یا بشتر از 18 بود ، حاصل جمع روز رو منهای 31 کن باقیمانده رو بعنوان روز و یک واحد به ماه اضافه کن ، اگه تو 6 ماه دوم سال بودیم همین مراحل بالا منتها با شرط روز 17 یا بیشتر از 17

polisoftco
چهارشنبه 30 دی 1388, 18:46 عصر
برای جداسازی روز و ماه و سال :



strDate = txtDate.Text
R1 = Val(Right$(strDate, 2))
M1 = Mid$(strDate, 6, 2)
S1 = Val(Mid$(strDate, 1, 4))

mobina.amiry
جمعه 02 بهمن 1388, 12:18 عصر
سلام
اگه ميشه با كد نويسي توضيح بديد من متوجه نشدم كه بايد چيكار كنم

polisoftco
جمعه 02 بهمن 1388, 17:15 عصر
ببینید :
تابع Right$ از طرف راست یک رشته، به اندازه تعدادی که گفتیم رو میگیره مثلا :



Right$(String As String, Length As Long) As String

String As String = رشته موردنظر هستش که در اینجا برابر تکست باکس تاریخه.
Length As Long = طول موردنظره که در اینجا 2 هستش، یعنی به اندازه 2 کاراکتر رو میگیره.
مثال :


R1 = Val(Right$(txtDate, 2))

که در اینجا txtDate برابر است با مقدار TextBox تاریخ شما.
و R1 متغیری که مقدار روز رو نگه میداره.
پس درکل این تابع به انداره دو کاراکتر از سمت راست رشته (txtDate) رو داخل متغیر R1 ذخیره میکنه، اگر تاریخ مون 02/11/1388باشه مقدار 02 (روز) رو داخل متغیر ذخیره میکنه.
تابع Left$ و Mid$ هم شبیه Right$ هستن، به توضیحات زیر دقت کنین.



برای گرفتن یک مقدار از وسط یک رشته:
Mid$(String As String, Start As Long, [Length]) As String
برای گرفتن یک مقدار از سمت چپ یک رشته:
Left$(String As String, Length As Long) As String

HjSoft
جمعه 02 بهمن 1388, 20:15 عصر
سلام ، من همه این راه ها رو امتحان کردم ، تمام این موضوعاتی که شما می خواید در اکتیو ایکس که آقای MBT گذاشتند می تونید پیدا کنید اعم از جمع تفریق ، و هر چی در مورد تاریخ توی سایت هست ، بگردید پیداش می کنید

polisoftco
جمعه 02 بهمن 1388, 22:30 عصر
تو این فایل هرچی بخای هسته، تو قسمت پایین سمت چپ ، مقدار پرش رو بزن 14، به تاریخ موردنظرت 14 روز اضافه میکنه.
موفق باشین.
http://barnamenevis.org/forum/attachment.php?attachmentid=43040&stc=1&d=1264144914

mobina.amiry
شنبه 03 بهمن 1388, 10:22 صبح
تو این فایل هرچی بخای هسته، تو قسمت پایین سمت چپ ، مقدار پرش رو بزن 14، به تاریخ موردنظرت 14 روز اضافه میکنه.
موفق باشین.


سلام
ممنون از پاسختون
ولي وقتي كه اين برنامه را اجرا ميكنم اجرا نميشود و پيغام خطا ميدهد كه پيغام خطا را اينجا ميگذارم ببينيد مشكل كجا است اگه تونستيد راهنمايي كنيد
ميتونيد از آدرس زيرعكس پبغام خطا را ببينيد
http://www.uplod.ir/download.php?file=242554

parselearn
شنبه 03 بهمن 1388, 12:00 عصر
با توجه به اينكه اين يك DLL هست
بايد از پنجره Referance اينو به برنامتون اضافه كنيد
اول رجيستر
سپس رفرنس

polisoftco
یک شنبه 04 بهمن 1388, 12:13 عصر
بعد از اینکه رجیسترش کردی برو توی منوی Projects بعدش گزینه References سپس Browse و سپس DLLتو بیار داخل برنامه.

موفق باشین
درود و بدرود

mobina.amiry
یک شنبه 04 بهمن 1388, 19:44 عصر
سلام
ممنون ازراهنمايتون برنامه را تونستم اجرا كنم من هم يه چيز مثل همين قسمت افزايش و كاهش ميخوام كه توي تكس باكس اولم تاريخ جاري سيستم را نشان بده و توي يه تكس ديگه مقداري را كه ميخوام به مقداري تاريخ جاريم اضافه بشه و وقتي كه روي دكمه كليك كرديم توي تكس باكس سوم هم تاريخ اضافه شده را نمايش بده. من خودم هر كاري كردم با استفاده از اين برنامه هم نتونستم اين كد را در برنامه ديگري اجرا كنم اگه كسي ميتونه راهنمايي كنه ؟؟

polisoftco
یک شنبه 04 بهمن 1388, 22:02 عصر
یک Command بزار رو فرمت :

txtJump = تکست باکسی که مقدار پرش رو درخودش ذخیره میکنه. (مثلا 14)
txtIncDec = تکست باکسی که تاریخ جاری سیستم (تاریخی که باید بهش اضافه بشه) رو نگه میداره.




If InStr(1, txtIncDec.Text, "?") > 0 Then Exit Sub
If IsNumeric(txtJump.Text) = False Then txtJump.Text = "1"
If Val(txtJump.Text) = 1 Then
txtIncDec.Text = MESHAMSI.IncreaseDate(txtIncDec.Text)
Else
txtIncDec.Text = MESHAMSI.IncreaseDate_Custom(txtIncDec.Text, Val(txtJump.Text))
End If


خط اول برای مقایسه
خط دوم چک میکنه که آیا مقدار پرش وارد شده عدد هسته یا نه اگه عدد نبود مقدارش رو یک میذاره.
خط بعدی چک میکنه که آیا مقدار پرش یک هست یا نه اگه یک بود تاریخ رو به اندازه یک روز افزایش میده، اگه مقدارش غیر از یک بود تاریخ رو به اندازه مقدار پرش ورودی افزایش میده.

یک Command دیگه بزار برای کاهش :



If IsNumeric(txtJump.Text) = False Then txtJump.Text = "1"
If Val(txtJump.Text) = 1 Then
txtIncDec.Text = MESHAMSI.DecreaseDate(txtIncDec.Text)
Else
txtIncDec.Text = MESHAMSI.DecreaseDate_Custom(txtIncDec.Text, Val(txtJump.Text))
End If


خط اول برای چک کردن که آیا مقدار ورودی عدد هسته یا خیر اگه عدد نبود مقدارش رو برابر یک قرار میده.
خط دوم به بعدش او قسمت بالایی توضیح داده شد.


سوالی بود درخدمتیم.

موفق باشین
درود و بدرود

mobina.amiry
یک شنبه 04 بهمن 1388, 22:39 عصر
سلام
ممنون از راهنماي هاي واقعا مفيدتون
يه سوال اينهاي كه روي فرم گذاشتيد تكس باكس نيستند
اگه تكس باكس نيستند چه فرقي دارند با تكس باكس؟؟

polisoftco
دوشنبه 05 بهمن 1388, 00:54 صبح
نه اونا MaskEdit هستند یعنی، اطلاعات ورودیشو میتونی محدود کنین.
اگر ##/##/## رو به عنوان ماسک بنویسین، کاربر تنها میتونه 6 عدد وارد کنه و اون ممیزها هم بطور پیشفرض وجود دارن.

mobina.amiry
دوشنبه 05 بهمن 1388, 21:21 عصر
سلام
حالا من ميخوام يه كار ديگه انجام بدم ميخوام مقدار اين txtIncDec را بعد از انجام عمليات اضافه كردن بريزم توي تكس باكس پنجم(يا هر تكس باكس ديگه اي) چطور ميتونم اين كا را انجام بدم؟:متفکر:

Hosna.Soft_old
سه شنبه 06 بهمن 1388, 08:38 صبح
text5 = txtIncDec
!!!

موفق باشید

mobina.amiry
سه شنبه 06 بهمن 1388, 10:11 صبح
سلام
اين برنامه مثل اينكه فقط براي يك روز طراحي شده بود
الان من امروز كه اين برنامه را ميخواهم اجرا كنم اين پيغام خطا را ميدهد
در ضمن من هيچ كدي به برنامه اضافه نكرده ام چگونه اين مشكل را حل كنم

پيغام خطا
http://www.uplod.ir/download.php?file=299622

polisoftco
سه شنبه 06 بهمن 1388, 14:07 عصر
باسلام
برای ارسال متن یک تکست به تکست دیگر :


Text5.Text = Trim(txtIncDec)

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

موفق باشین

mobina.amiry
سه شنبه 06 بهمن 1388, 14:33 عصر
سلام

در ضمن من دوباره همين برنامه اي كه خود شما زحمت كشيديد مربوط به افزايش و كاهش را دوباره دانلود كردم ولي باز هم همين پيغام خطا را ميدهد من هيچ كدي را تغيير ندادم و هيچ چيز هم اضافه نكردم براي رفع مشكل چي كار كنم
اين پيغام خطا است كه ميتونيد دانلودش كنيد توي سايت اينجا قرار دادم

polisoftco
سه شنبه 06 بهمن 1388, 16:34 عصر
سلام
دقت کنین تمام کدهای برنامه رو اینجا مینویسم، و شمام عین همین رو درست کنین، همچنین ببینین DLLی که توی ضمیمه اول بود رو حتما توی برنامه فراخوانی کنین از طریق منوی Projects و زیر منوی References سپس برنامه رو اجرا کن.
یک TextBox = به نام txtJump
دوتا Command = بنام ComAdd و ComSub
یک MaskEdBox = بنام MaskEdBox1

توی قسمت General این کد رو بنویس :


Dim MESHAMSI As New ShamsiDate

توی قسمت ComSub این کد رو بنویس ( برای کاهش مقدار) :



If IsNumeric(txtJump.Text) = False Then txtJump.Text = "1"
If Val(txtJump.Text) = 1 Then
MaskEdBox1.Text = MESHAMSI.DecreaseDate(MaskEdBox1.Text)
Else
MaskEdBox1.Text = MESHAMSI.DecreaseDate_Custom(MaskEdBox1.Text, Val(txtJump.Text))
End If



توی قسمت ComAdd این کد رو بنویس ( برای افزایش مقدار) :



If InStr(1, MaskEdBox1.Text, "?") > 0 Then Exit Sub
If IsNumeric(txtJump.Text) = False Then txtJump.Text = "1"
If Val(txtJump.Text) = 1 Then
MaskEdBox1.Text = MESHAMSI.IncreaseDate(MaskEdBox1.Text)
Else
MaskEdBox1.Text = MESHAMSI.IncreaseDate_Custom(MaskEdBox1.Text, Val(txtJump.Text))
End If


تو قسمت Form_Load برنامه هم این رو بنویس :



Dim Emrooz As String
Emrooz = MESHAMSI.Today
MaskEdBox1.Text = Emrooz


بازم میگم دقت کنین که حتما DLL رو به برنامه معرفی کنین.

راستی شما این کد رو برای چی و چه قسمتی از برنامه تون میخایین، کمی توضیح بدین تا شاید بتونم طبق مورد نظر شما واسه برنامتون بنویسم و شمام عین همین کد رو بزارین تو برنامه اصلیتون.


موفق باشین.

mobina.amiry
سه شنبه 06 بهمن 1388, 17:24 عصر
سلام
ممنون از راهنمايتون من اون dllرا به برنامه معرفي نكرده بودم .
من اين كد را براي قسمت امانت كتابخانه ميخواهم كه در قسمت تاريخ اخذ تاريخ جاري سيستم را نمايش دهد كه در اين مورد مشكلي ندارم ودر قسمت تاريخ برگشت تاريخ 2هفته بعد را نمايش دهد(كه من اين قسمت را مشكل دارم ) كه در عكسي كه از قسمت امانت گرفته ام و ان را ضميمه كرده ام نيز اين دو قسمت را مشخص كرده ام.

در اين باره هم كه گفته بودم تاريخ جاري سيستم را بعد از اضافه كردن عدد مورد نظر در تكس باكس پنجم نمايش دهد نيز اين كدي كه شما گذاشتيد فقط در تكس باكس پنجم هم همان تاريخ جاري را مينويسد وتاريخ جديد را كه عدد مورد نظر ما به آن اضافه شده است را نشان نمي دهد.
اين كدي است كه شما گذاشتيد:
برای ارسال متن یک تکست به تکست دیگر :
کد:

Text5.Text = Trim(txtIncDec)


بازم ممنون از كمكتون
اگه تونستيد پاسخ سوالم را بديد

polisoftco
سه شنبه 06 بهمن 1388, 18:37 عصر
اون کد برای مواقعی بود که شما تاریخ 14 روز بعد رو توی تکست باکس داشته باشین.!

خب شما ابتدا DLL رو معرفی کنین سپس تاریخ جاری را در قسمت مربوطه بنویسین، تا اینجا مشکلی نیست

حالا :



MaskEdBox2.Text = MESHAMSI.IncreaseDate_Custom(MaskEdBox1.Text, "14")


این کد رو قسمت مربوطه (مثلا Form_Load) بنویس، دقت کنین که MaskEdBox1 تکستی هست که تاریخ اخذ (جاری) رو نشون میده و MaskEdBox2 نیز تکستی که تاریخ برگشت رو نشون میده.

تذکر : اگر MaskEdBox1 خالی باشه MaskEdBox2 نیز خالی خواهد بود.

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

mobina.amiry
سه شنبه 06 بهمن 1388, 23:21 عصر
سلام
ممنون مشكلم حل شد خيلي خيلي ممون
فقط اگه ميشه يه توضيح در مورد اين dll بديد كه اين چه كاربردي داره كه تا وقتيكه من اين را به برنامه معرفي نكنم برنامه اجرا نميشود واصلا اين dllرا چطور ايجاد مي كنند.
اگه ميشه در مورد اون خط كدي را كه خودتون هم نوشتيد جهت اطلاع خودم يه توضيح مختصر بديد.

توجه: توي پست اول كه به سوالم پاسخ داديد يه ماژول گذاشته بوديد كه گفته بوديد براي تاریخ و تبدیل عدد به حروف و چندتا چیز ديگه است كه من الان ديگه با توجه به اين dllديگه نيازيبه اون براي تاريخ جاري سيستم ندارم .من توي برنامه ام با استفاده از اون ماژول توي صفحه اصلي تاريخ را اين طوري مينوشت:
سه شنبه 6 بهمن 1388حالا ميخوام بدونم كه اگه اون كدهاي اون ماژول را حذف كنم نيز با استفاده از اين dll ميتونم تاريخ رابه همان صورت بنويسم اگه ميشه نوشت اگه شما ميدونيد راهنمايي كنيد
ببخشيد از اينكه سوالاتم اينقدر متععدد است
ممنون

polisoftco
سه شنبه 06 بهمن 1388, 23:55 عصر
سلام
DLL ها در واقع یک نوع کتابخانه دیجیتالی هستن، در این DLLی که شما استفاده میکنین کلی کد و برنامه نوشته شده یعنی اون ماژولی که من دادم و همچنین امکاناتی که تو این DLL هست مثل کاهش و افزایش تاریخ و غیره ای که شما استفاده میکنین توی این DLL نوشته شدن و بصورت یک فایل درآوردن، خب حالا اگه شما این DLL رو معرفی نکنین درواقع اون کدهای اصلی رو ندارین، پس نمیتونین از امکاناتش استفاده کنین.


MaskEdBox2.Text = MESHAMSI.IncreaseDate_Custom(MaskEdBox1.Text, "14")

MaskEdBox1 تاریخ اخذ (جاری) رو ذخیره میکنه
MaskEdBox2 تاریخ برگشت رو ذخیره میکنه
MESHAMSI این قسمت DLLی هسته که ابتدای برنامه معرفی کردیم.
اگر MESHAMSI.IncreaseDate اینجوری بنویسیم خب تاریخ به اندازه یک روز میره جلو
اگر MESHAMSI.IncreaseDate_Custom اینجوری باشه که خب از اسمش معلومه یعنی سفارشی میره جلو.

= MESHAMSI.IncreaseDate_Custom(MaskEdBox1.Text, "14")
اینجا الان ما میخاهیم MaskEdBox1رو به اندازه 14 روز ببریم جلو پس بعد از IncreaseDate_Custom تکستی که باید تاریخش تغییر پیدا کنه رو مینویسیم بعد از "," نیز مقداری که باید اضافه بشه رو مینویسیم.

آره دیگه به اون ماژول نیازی نیست، توی عکس این DLL هم مشخصه هرجوری بخای میتونی بنویسی، برای نوشتن بصورت حروفی :

توی Form_Load بنویس :

MaskEdBox1 تاریخ جاری
Text1 تاریخ حروفی


Dim Result As String
Call MESHAMSI.Convert_Date2Letter(MaskEdBox1.Text, Result)
Text1.Text = Result


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