ساعت کشورهای مختلف (ویژوال بیسیک)

uu99

Member
میخواهیم چند تا برچسب روی فرم قرار بدهیم و هرکدام از این برچسبها ساعت یک کشوری رو نشون بده .

دستور پس و پیش کردن ساعتها چجور نوشته میشه ؟

سوال دوم در مورد مقدار Interval هست که بهتره مقدار اون چند باشه تا ساعت دقیقتر نشون داده بشه؟


با تشکر
mrb535.gif

 

the_king

مدیرکل انجمن
پاسخ سوالتون بستگی به نوع داده ای داره که برای زمان بکار می برید :

در این کد، زمان فعلی با نوع داده Date دریافت می شود و 120 دقیقه به آن افزوده می شود :
کد:
    Dim Time As Date
    Time = Now
    Time = DateAdd("n", 120, Time)
    MsgBox Format(Time, "hh:nn:ss")

در این تابع ما زمان را به شکل ساعت و دقیقه دریافت می کنیم و به مقدار پارامتر سوم (دقیقه) آنرا افزایش می دهیم :
کد:
Private Sub AddTime(ByRef Hour As Variant, ByRef Minute As Variant, ByVal Value As Long)
    Dim Time As Long
    Time = (Hour * 60 + Minute + Value) Mod 1440
    Hour = Time \ 60
    Minute = Time Mod 60
End Sub

مقدار Interval بستگی به جزئیات نمایشی برنامه شما دارد. اگر کوچکترین جزئیات مربوط به ثانیه است، مقدار 250
یعنی چهار بار در ثانیه برای Interval کافیست.
ولی اگر جزئیات گرافیکی شما در حد دقیقه است، 1000 هم کفایت می کند، البته همیشه در رخداد Load فرم
یکبار رخداد تایمر را صدا بزنید تا برای اولین نمایش خود منتظر سپری شدن آن Interval نشود.
 

the_king

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



کد کامل برنامه به همراه فایل اجرایی ضمیمه این پست می باشد.
 

پیوست ها

  • World Clock.zip
    63.7 کیلوبایت · بازدیدها: 65
آخرین ویرایش توسط مدیر:

uu99

Member
سلام!
734ad6p.gif


خسته نباشید.

جناب علی سعید، این ساعت فوق العاده ست .

خیلی زیبا و در عین حال جادویی
100.gif


2تا ساعت آنالوگ در این برنامه هست ولی هر کاری کردم نتونستم اثری از اونها روی فرم پیدا کنم . هیچ شکلی ، خطی یا خطوطی از این ساعتها روی فرم نیست . فقط در هنگام اجرای برنامه پدیدار میشن
200.gif



دستتون درد نکنه .
7xdpxr6.gif


خیلی ممنونم که حاصل زحماتتون رو به رایگان ، همراه با سورس در اختیار کاربران سایت میگذارید.
7xcuu83.gif



وجود شما و امثال شما برای سایت نعمتی ست .
203.gif



موفق باشید
20ge1pi.gif
 
آخرین ویرایش:

uu99

Member
با عرض سلام و ادب و احترام خدمت استادان ویژوال بیسیک
7xcuu83.gif


رسیدیم به بخش ترسیم
288.gif


میخواهیم ساعت آنالوگ درست کنیم .

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


object.Line [Step] (x1, y1) [Step] - (x2, y2), [color], [B][F]



یکی اینکه چطوری باید تنظیم کنیم که با هر ثانیه عقربه ثانیه یک واحد بچرخد و برای عقربه ساعت شمار هم همینطور .



در دستور بالا اگه امکان داره یک مثال بزنید و تمامی پارامترهای اونو قرار بدین . من هر کاری کردم Step رو خطا میگیره.
2ynp5cn.gif



با تشکر فراوان
20ge1pi.gif

 

the_king

مدیرکل انجمن
در برنامه ای که من نوشته بودم وظیفه روتین PaintLine ترسیم یک عقربه بود :
کد:
Public Sub PaintLine(ByVal Percent As Double, ByVal DrawWidth As Long, ByVal LineWidth As Long, ByVal Color As OLE_COLOR)
    Dim Degree As Double, X As Long, Y As Long
    Degree = Percent * 2 * pi - pi / 2
    X = LineWidth * Cos(Degree)
    Y = LineWidth * Sin(Degree)
    FormMain.PicTemp.DrawWidth = DrawWidth
    FormMain.PicTemp.Line (CenterX, CenterY)-(X + CenterX, Y + CenterY), Color
End Sub

اول باید مشخص کنیم که عقربه در چه زاویه ای قرار داره. برای اینکار به مقدار ماکزیمم عدد عقربه احتیاج داریم،
مثلا این مقدار برای عقربه ثانیه شمار 60 است و برای عقربه ساعت شمار 12.
اول مقدار عدد عقربه را بر ماکزیمم اون تقسیم می کنیم تا یک نسبت به دست بیاد. مثلا اگه ساعت 6 است حاصل این
نسبت 0.5 خواهد بود.
اما چون عقربه ساعت بایستی به ازای هر دقیقه هم حرکت مختصری داشته باشد مقدار دقیقه تقسیم بر 720 را هم به
آن اضافه می کنیم :
کد:
[B]Percent[/B] = Hour / 12 + Minute / 720

حالا باید این نسبت را به واحد رادیان تبدیل کنیم :
کد:
Private Const pi As Double = 3.14159265358979
Degree = [B]Percent[/B] * 2 * pi - pi / 2
در اینجا Percent همان نسبتی است که حساب کرده ایم.

قدم بعدی تبدیل کردن این زاویه به مختصات x و y است :
کد:
    X = [B]LineWidth[/B] * Cos(Degree)
    Y = [B]LineWidth[/B] * Sin(Degree)
مقدار LineWidth طول عقربه را مشخص می کند.

و قبل از رسم کردن عقربه باید ضخامت آنرا هم مشخص کنیم :
کد:
FormMain.PicTemp.[B]DrawWidth[/B] = [B]DrawWidth[/B]
DrawWidth ضخامت عقربه را نشان می دهد.

اکنون می توانیم از نقطه مرکز به مختصات (CenterX , CenterY) عقربه مورد نظر را ترسیم کنیم :
کد:
FormMain.PicTemp.Line (CenterX, CenterY)-(X + CenterX, Y + CenterY), [B]Color[/B]
Color رنگ عقربه را مشخص می سازد.

اگر مختصات نقطه دوم را نسبت به نقطه اول تعیین کنیم، از کلمه کلیدی Step استفاده می شود :
کد:
FormMain.PicTemp.Line (CenterX, CenterY)-[B]Step[/B](X, Y), Color
 

uu99

Member
سلام


خیلی ممنون جناب علی سعید . حسابی شرمنده م کردین .
7xcuu83.gif




امیدوارم یه روزی بتونم محبت های شما رو جبران کنم .



20ge1pi.gif
 

جدیدترین ارسال ها

بالا