چگونه یک ساعت آنالوگ را در فرم اکسس نمایش دهیم ؟
سلام به یکی دیگه از اموزش های سافت پلاس خوش اومدید . امروز می خواهیم با هم در مورد این صحبت کنیم که چه جوری می تونیم یک ساعت آنالوگ در فرم اکسس نمایش دهیم.
با فرم ها در اکسس که آشنایی دارید خوب می دونید که یک فرم معمولا شامل اشیای مختلفی است . دکمه ها ، تکس باکس ها ، لیست باکس ها ، برچسب ها و خیلی از اشیای دیگه .
خیلی از این اشیا رو به راحتی یک یا دو کلیک می تونید بر روی فرم های خود قرار دهید . مطمئنم که شما برای قرار دادن یک دکمه بر روی فرم خود مشکلی ندارید یا برای قرار دادن یک تکس باکس هم همینطور .
چون از قبل همه این اشیایی که از اونها اسم بردیم توسط اکسس آماده شده و برای استفاده من و شما در دسترس ما قرار دارند . تنها کاری که ما باید بکنیم انتخاب کردن نوع شی مورد نظر و قرار دادن اون بر روی فرم است .
اما اگر از شما بخواهم که کاری کنید که فرم شما امکان نمایش زمان رو برای کاربر فراهم بکنه چی کار می کنید ؟ بگذارید ساده تر بگویم اگر از شما بخواهم که یک ساعت را بر روی فرم خود قرار دهید چه کار می کنید ؟ .
آیا مثل یک تکس باکس یا لیست باکس به سراغ آیتمی به نام ساعت می روید و اون رو بر روی فرم خود قرار می دهید و همه چیز تمام می شود ؟ ای کاش اینطوری بود . یعنی ای کاش ما یک شئی داشتیم به اسم ساعت و اینجوری همه چیز ساده و راحت می شد .
اما خبر بد اینه که همچین شئی در اکسس وجود نداره . پس ما نمی تونیم ساعت مورد نظرمون رو بطور زنده بر روی فرم خودمون نمایش بدیم ؟.
خوب خبر خوب اینه که چرا . خیلی راحت و با طی کردن چند تا مرحله ساده شما قادر خواهید بود که زمان رو بطور دقیق و زنده برای کاربرتون و بر روی فرم مورد نظرتون نمایش بدید .
اما چه جوری ؟ این چه جوری بودن هموم چیزیه که می خواهیم توی آموزش امروزمون مفصل راجع به اون با هم صحبت کنیم .
من علیرضا شهرآئینی هستم . مدیر وبسایت سافت پلاس . اگر تا انتهای این مطلب من رو همراهی کنید با هم یاد می گیریم که :
-چه جوری یک ساعت رو بر روی فرم خودمون چاپ کنیم .
– چه جوری یک ساعت رو بصورت دیجیتال بر روی فرممون نمایش بدیم .
– چه جوری یک ساعت رو بصورت آنالوگ بر روی فرم خودمون نمایش بدیم .
و در انتها این شما هستید که وقتی این مطلب رو مطالعه کردید به سادگی و بنا به سلیقه خودتون انتخاب کنید که از کدوم یک از این سه حالت استفاده کنید .
پس با من همراه شوید .
نحوه چاپ و نمایش ساعت و زمان بر روی یک فرم در اکسس
اول از ساده ترین حالت ممکن شروع می کنیم .
در این حالت می توانیم کاری کنیم که اکسس بطور خودکار آخرین اطلاعات مربوط به زمان و یا تاریخ را از ویندوز دریافت کرده و آن را بر روی فرم خود به کاربر نمایش دهیم .
اما چه جوری می شود این کار رو کرد ؟
خب اکسس برای این کار یک سری از توابع را از قبل آماده کرده است که به راحتی می توانید آنها را فراخوانی کرده و در فرم های خود از آنها استفاده کنید .
مثلا به قطعه کد زیر نگاه کنید .
1 2 3 4 5 | . ()date = . |
اگر این تابع را در داخل یک تکس باکس قرار دهید چیزی که به شما نمایش می دهد یک تاریخ است . این تاریخ مربوط به تاریخ جاری سیستمی است که برنامه شما در حال اجرا بر روی آن است .
یا اینکه به کد زیر نگاه کنید .
1 2 3 4 | . ()now= . |
این کد همان چیزی است که ما به آن احتیاج داریم . استفاده از این کد و قرار دادن آن در داخل یک تکس باکس باعث می شود که برنامه ساعت مربوط به سیستم را خوانده و آن را بر روی فرم ما نمایش دهد .
خب پس اینجا ما توانستیم ساعت حال حاضر را از روی سیستم خود خوانده و آن را در قالب یک تکس باکس بر روی فرم خود نمایش دهیم .اما این کار یک ایراد دارد .
ایراد آن هم این است که این ساعت ، ثابت است و با پیشرفت ثانیه ها و دقیقه ها هیچ تغییری در ساختار آن ایجاد نمی شود .
هر چند که نمایش ساعت در این فرمت هم می تواند خیلی از جاها برای ما کارآمد و کارساز باشد اما این چیزی نیست که بخواهیم به آن اکتفا کنیم .
ما می خواهیم کاری کنیم که برنامه ساعت مربوط به سیستم را بطور زنده بر روی فرم ما نمایش دهد .
خوب برای این کار ما دو تا راهکار داریم و یا بهتر است بگویم که برای نمایش زنده ساعت بر روی فرم خود می توانیم از دو حالت استفاده کنیم .
حالت اول این است که یک ساعت را در فرمت دیجیتال بر روی فرم خود قرار دهیم . حالت دوم این است که بیاییم همین ساعت را در قالب یک ساعت آنالوگ به نمایش بگذاریم
منظور من از ساعت آنالوگ ساعتی است که دارای عقربه شمار برای ساعت دقیقه و ثانیه باشد .
حالا برویم ببینیم که چطور می توانیم هر کدام از این ساعت ها را ایجاد کنیم .
نمایش ساعت زنده بر روی فرم اکسس بصورت دیجیتال
وقتی که صحبت از ساعت دیجیتال بر روی فرم می کنیم منظورمان ساعتی است که در آن عقربه های شمارشگر بصورت دیجیتالی هستند .
اما چه جوری می شود همچین ساعتی را بر روی فرم خود قرار دهیم . ؟
خب این موضوع مطلب جداگانه ای است که اتفاقا قبلا در این سایت راجع به آن یک آموزش مجزایی را قرار داده ام . برای اینکه بدانید چطور می شود یک ساعت دیجیتال را بر روی فرم خود قرار دهید کافی است بر روی لینک زیر کلیک کنید .
مطلب مرتبط : قرار دادن ساعت دیجیتال بر روی فرم اکسس .
در این مطلب بطور مفصل در مورد مراحلی که با طی کردن آنها می توانید این ساعت دیجیتال را ایجاد و آن را بر روی فرم خود قرار دهید صحبت کرده ام .
پس این شد در خصوص ساعت دیجیتال که با مراجعه به مطلب بالا به راحتی می توانید یک ساعت از نوع دیجیتال را برای خود ایجاد کنید .
اما برای قرار دادن ساعت از نوع آنالوگ چه کاری را باید انجام دهیم ؟
مراحل قرار دادن ساعت آنالوگ در فرم اکسس
برای قرار دادن یک ساعت در فرمت آنالوگ بر روی فرم خود باید یک سری از کار ها را با هم انجام دهیم . این کارها برخی در داخل اکسس و برخی در محیط کد نویسی وی بی ای باید انجام شود .
البته نگران این موضوع نباشید که قرار است یک سری از کارهای سخت و پیچیده را انجام دهیم . با من گام به گام پیش بیایید تا به راحتی همه این کارها را با هم انجام دهیم .
مرحله اول : ایجاد یک فرم برای نمایش ساعت بر روی آن
قبل از هر چیز باید یک فرم داشته باشیم تا ساعت خود را بر روی آن قرار دهیم . ایجاد این فرم را به عهده خودتان می گذارم . بعد از اینکه یک فرم خالی را ایجاد کردید با من همراه شوید تا مرحله بعد را انجام دهیم .
مرحله دوم : قرار دادن عقربه ثانیه شمار بر روی فرم
همه چیز از این مرحله شروع می شود برای این مرحله می خواهیم یک عقربه را بر روی فرم خود قرار دهیم . این عقربه کار شمارش ثانیه ها را برای ما انجام می دهد .
اما چه جوری می شود این عقربه را به فرم خود اضافه کرد ؟
این کار خیلی ساده است . اول فرم خود را در حالت طراحی قرار دهید . سپس به سربرگ Design رفته از داشبورد Controls گزینه Line را انتخاب کنید .
حالا به محیط فرم خود رفته و یک خط را با استفاده از این ابزار بر روی فرم خود رسم کنید .
حالا باید یک سری از تنظیمات مربوط به این خط را با استفاده از کادر Property انجام دهیم .
این تنظیمات چه هستند ؟
برای تنظیم اول به سربرگ All رفته گزینه مربوط به Name را برای این خط بصورت Lins نام گذاری کنید .
حالا در همین سربرگ به سراغ گزینه Border width رفته مقدار آن را برابر با ۲ pt قرار دهید .
خاصیت رنگ آن را نیز برابر با رنگ قرمز قرار دهید . تصویر زیر این تنظیمات را به شما نمایش می دهد .
البته در این بین یک سری از تنظیمات دیگر را باید انجام دهید که تمامی آنها را می توانید در تصویر بالا مشاهده کنید .
حالا باید به سراغ عقربه مربوط به دقیقه شمار برویم . برای این کار هم مثل خط مربوط به ساعت شمار یک خط را به فرم خود اضافه کنید و مقادیر مربوط به ویژگی های آن را مثل تصویر زیر تنظیم کنید .
مهمترین تنظیمی که در مورد این خط باید انجام دهید نام ان است که باید بصورت Linh نام گذاری شود
حالا می رسیم به عقربه مربوط به ساعت شمار .بعد از قرار دادن خط مورد نظر بر روی فرم خود تنظیمات مربوط به این خط را نیز مثل تصویر زیر تنظیم کنید. مهمترین تنظیمی که در مورد این خط باید انجام دهید نام ان است که باید بصورت Linh نام گذاری شود
.
تا به اینجای کار ما سه عقربه داریم که قرار است کار شمارش ثانیه ها ، دقیقه ها و ساعت را برای ما انجام دهند .تصویر زیر نتیجه و خروجی کار را تا به اینجا برای ما نمایش می دهد .
در قدم بعدی باید یک تصویر را به مجموعه موجود اضافه کنیم . این تصویر قرار است بدنه ساعت ما را تشکیل دهد . با یک جستجوی ساده در اینترنت می توانید به دنبال ساعتی بگردید که فاقد عقربه باشد .
البته من یک نمونه از این ساعت را آماده کرده ام که در قالب نمونه فایل دانلودی می توانید از در پایان همین مطلب دانلود کنید .
در هر حال وقتی که این تصویر را فراهم کردید باید آن را به نحوی قرار دهید که دقیقا عقربه های شما در مرکز آن واقع شوند .
یعنی چیزی مثل تصویر زیر .
تا به اینجای کار هر چه که انجام دادیم یک جورهایی مربوط به بخش سخت افزار کار ما می شد و توانستیم بدنه ساعت خود را ایجاد کنیم . حالا باید به سراغ بخش نرم افزار کار و کد نویسی برویم .
کدهای وی بی ای برای تنظیمات ساعت عقربه ای
اول کدهایی را که احتیاج داریم را برای شما درج می کنم . این کدها کمک می کند که عقربه های ساعت ما شروع به کار کرده و زمانی را که بر روی سیستم شما وجود دارد را در قالب عقربه ها نمایش دهد .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 | Option Compare Binary Option Explicit Const PI As Double = 3.14159265358979 Const conTwips As Long = 567 Dim arrCP(0 To 60, 0 To 13) Dim intS As Integer Dim intM As Integer Dim intH As Integer Dim dteTimeDiff As Date Sub sAnalogeClockArrays() Dim intCP As Integer Dim dblLeft As Double Dim dblTop As Double Dim dblLenS As Double Dim dblLenM As Double Dim dblLenH As Double dblLeft = 1 dblTop = 1 dblLenS = 1 dblLenM = 0.9 * dblLenS dblLenH = 0.65 * dblLenS For intCP = 0 To 15 arrCP(intCP, 0) = intCP arrCP(intCP, 1) = (dblLeft * conTwips * dblLenS) + (conTwips * dblLeft) arrCP(intCP, 2) = (Round(1 - Cos((PI / 180) * (intCP * 6)), 3) * conTwips * dblLenS) + (conTwips * dblTop) arrCP(intCP, 3) = Round(Sin((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenS) arrCP(intCP, 4) = Round(Cos((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenS) arrCP(intCP, 5) = (dblLeft * conTwips * dblLenS) + (conTwips * dblLeft) arrCP(intCP, 6) = (Round(1 - Cos((PI / 180) * (intCP * 6)), 3) * conTwips * dblLenM) + (conTwips * _ (dblTop + dblLenS - dblLenM)) arrCP(intCP, 7) = Round(Sin((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenM) arrCP(intCP, 8) = Round(Cos((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenM) arrCP(intCP, 9) = (dblLeft * conTwips * dblLenS) + (conTwips * dblLeft) arrCP(intCP, 10) = (Round(1 - Cos((PI / 180) * (intCP * 6)), 3) * conTwips * dblLenH) + (conTwips *_ (dblTop + dblLenS - dblLenH)) arrCP(intCP, 11) = Round(Sin((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenH) arrCP(intCP, 12) = Round(Cos((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenH) arrCP(intCP, 13) = True Next For intCP = 16 To 30 arrCP(intCP, 0) = intCP arrCP(intCP, 1) = (dblLeft * conTwips * dblLenS) + (conTwips * dblLeft) arrCP(intCP, 2) = (dblTop * conTwips * dblLenS) + (conTwips * dblTop) arrCP(intCP, 3) = Round(Sin((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenS) arrCP(intCP, 4) = -Round(Cos((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenS) arrCP(intCP, 5) = (dblLeft * conTwips * dblLenS) + (conTwips * dblLeft) arrCP(intCP, 6) = (dblTop * conTwips * dblLenS) + (conTwips * dblTop) arrCP(intCP, 7) = Round(Sin((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenM) arrCP(intCP, 8) = -Round(Cos((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenM) arrCP(intCP, 9) = (dblLeft * conTwips * dblLenS) + (conTwips * dblLeft) arrCP(intCP, 10) = (dblTop * conTwips * dblLenS) + (conTwips * dblTop) arrCP(intCP, 11) = Round(Sin((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenH) arrCP(intCP, 12) = -Round(Cos((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenH) arrCP(intCP, 13) = False Next For intCP = 31 To 45 arrCP(intCP, 0) = intCP arrCP(intCP, 1) = (1 + Round(Sin((PI / 180) * (intCP * 6)), 3)) * (conTwips * dblLenS) + (conTwips * dblLeft) arrCP(intCP, 2) = (dblTop * conTwips * dblLenS) + (conTwips * dblTop) arrCP(intCP, 3) = -Round(Sin((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenS) arrCP(intCP, 4) = -Round(Cos((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenS) arrCP(intCP, 5) = (1 + Round(Sin((PI / 180) * (intCP * 6)), 3)) * (conTwips * dblLenM) + (conTwips *_ (dblLeft + dblLenS - dblLenM)) arrCP(intCP, 6) = (dblTop * conTwips * dblLenS) + (conTwips * dblTop) arrCP(intCP, 7) = -Round(Sin((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenM) arrCP(intCP, 8) = -Round(Cos((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenM) arrCP(intCP, 9) = (1 + Round(Sin((PI / 180) * (intCP * 6)), 3)) * (conTwips * dblLenH) + (conTwips * _ (dblLeft + dblLenS - dblLenH)) arrCP(intCP, 10) = (dblTop * conTwips * dblLenS) + (conTwips * dblTop) arrCP(intCP, 11) = -Round(Sin((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenH) arrCP(intCP, 12) = -Round(Cos((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenH) arrCP(intCP, 13) = True Next For intCP = 46 To 60 arrCP(intCP, 0) = intCP arrCP(intCP, 1) = (Round(Sin((PI / 180) * (intCP * 6)), 3) + 1) * conTwips * (dblLenS) + (conTwips * dblLeft) arrCP(intCP, 2) = (1 - Round(Cos((PI / 180) * (intCP * 6)), 3)) * (conTwips * dblLenS) + (conTwips * dblTop) arrCP(intCP, 3) = -Round(Sin((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenS) arrCP(intCP, 4) = Round(Cos((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenS) arrCP(intCP, 5) = (Round(Sin((PI / 180) * (intCP * 6)), 3) + 1) * (conTwips * dblLenM) + (conTwips * (dblLeft + dblLenS - dblLenM)) arrCP(intCP, 6) = (1 - Round(Cos((PI / 180) * (intCP * 6)), 3)) * (conTwips * dblLenM) + (conTwips * (dblTop + dblLenS - dblLenM)) arrCP(intCP, 7) = -Round(Sin((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenM) arrCP(intCP, 8) = Round(Cos((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenM) arrCP(intCP, 9) = (Round(Sin((PI / 180) * (intCP * 6)), 3) + 1) * (conTwips * dblLenH) + (conTwips * (dblLeft + dblLenS - dblLenH)) arrCP(intCP, 10) = (1 - Round(Cos((PI / 180) * (intCP * 6)), 3)) * (conTwips * dblLenH) + (conTwips * (dblTop + dblLenS - dblLenH)) arrCP(intCP, 11) = -Round(Sin((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenH) arrCP(intCP, 12) = Round(Cos((PI / 180) * (intCP * 6)), 3) * (conTwips * dblLenH) arrCP(intCP, 13) = False Next End Sub Private Sub Form_Open(Cancel As Integer) If IsNull(Me.OpenArgs) Then dteTimeDiff = #12:00:00 AM# Else dteTimeDiff = Me.OpenArgs End If Call sAnalogeClockArrays End Sub Private Sub Form_Timer() intS = CInt(Second(Time())) intM = CInt(Minute(Time())) intH = CInt(Hour(Time())) Select Case intH Case Is >= 12 intH = intH - 12 Case Else intH = intH End Select DoEvents Me.Lins.Left = LinearSearch(arrCP, 0, 1, intS) Me.Lins.Top = LinearSearch(arrCP, 0, 2, intS) Me.Lins.Width = LinearSearch(arrCP, 0, 3, intS) Me.Lins.Height = LinearSearch(arrCP, 0, 4, intS) Me.Lins.LineSlant = LinearSearch(arrCP, 0, 13, intS) Me.Linm.Left = LinearSearch(arrCP, 0, 5, intM) Me.Linm.Top = LinearSearch(arrCP, 0, 6, intM) Me.Linm.Width = LinearSearch(arrCP, 0, 7, intM) Me.Linm.Height = LinearSearch(arrCP, 0, 8, intM) Me.Linm.LineSlant = LinearSearch(arrCP, 0, 13, intM) Me.Linh.Left = LinearSearch(arrCP, 0, 9, CInt(intH * 5 + (intM / 60) * 5)) Me.Linh.Top = LinearSearch(arrCP, 0, 10, CInt(intH * 5 + (intM / 60) * 5)) Me.Linh.Width = LinearSearch(arrCP, 0, 11, CInt(intH * 5 + (intM / 60) * 5)) Me.Linh.Height = LinearSearch(arrCP, 0, 12, CInt(intH * 5 + (intM / 60) * 5)) Me.Linh.LineSlant = LinearSearch(arrCP, 0, 13, CInt(intH * 5 + (intM / 60) * 5)) Me.Repaint End Sub Function LinearSearch(varItems, intCol, intColReturn, varSought) Dim intPos Dim fFound fFound = False For intPos = LBound(varItems) To UBound(varItems) If varSought = varItems(intPos, intCol) Then fFound = True Exit For End If Next If fFound Then LinearSearch = varItems(intPos, intColReturn) Else LinearSearch = -1 End If End Function |
همانطور که می بینید این کدها بسیار طولانی و تا حدی پیچیده هستند . اما نگران نباشید شما نیازی به این ندارید که بخواهید این کدها را تفسیر کنید .
فقط کافی است از این کدها در جای مناسب استفاده کنید . برای این کار باید آنها را در جای مناسب از محیط کد نویسی خود قرار دهید .
این کار هم اصلا پیچیده نیست . اول از این کدها یک کپی گرفته و به محیط اکسس خود بروید .
کلیدهای ترکیبی ALT+F11 را فشار دهید تا به محیط کد نویسی وی بی ای وارد شوید .
در این محیط از منوی Insert گزینه Module را انتخاب کنید .
حالا همه این کدها را بصورت یک جا در این محیط paste کنید .
بعد از انجام این مراحل به محیط اکسس برگردید و فرم خود را اجرا کنید . اگر همه چیز را به خوبی پیش برده باشید مشاهده خواهید کرد که عقربه های ساعت شما شروع به کار کرده و ساعت سیستم را برای شما نمایش می دهند .
پس در اینجا موفق شدیم که ساعتی را در قالب یک ساعت آنالوگ طراحی کرده و آن را بر روی فرم خود قرار دهیم .
امیدوارم که این آموزش هم برای شما مفید و کاربردی بوده باشد .
خوشحال می شوم ننظر خود را در مورد این آموزش در قسمت نظرات درج کنید .
دوستانی هم که نمونه فایل مربوط به این آموزش را می خواهند می توانند آدرس ایمیل خود را در کادر زیر وارد کنند . نمونه فایل برای آنها ارسال خواهد شد .
برای دریافت نمونه فایل رایگان اسم و آدرس ایمیل خودتون رو بطور کامل وارد کنید .
در ضمن از شما دعوت می کنم که حتما سری هم به پیچ من در اینستاگرام بزنید . در آنجا با کلی مطالب آموزشی در زمینه های مختلف منتظر شما هستم .
برای ورود به پیج اینستاگرام کافی است بر روی تصویر زیر کلیک کنید .
سلام وقت بخیر و شادی و تندرستی
ممنون از مطالبا مفید و کاربردی
/نامن /تاج آباد/فیض آباد / شهرآئین
فروشندهح>
سلام و درود به نامن /تاج آباد /فیض آباد / شهرآئین/جسین آباد/مقیسه