سلام
ساخت یک Screen Saver در VB.NET
Screen Saverها یکی از جذاب ترین و سرگرم کننده ترین برنامههای کامپیوتری هستند که از تاریخچهای طولانی برخوردار هستند. در این مقاله نحوه ساخت یک محافظ صفحه نمایش ساده با زبان Visual Basic .NET توضیح داده میشود.
توسط HosseinGates | 14 بهمن 1382 | 6322 بار مشاهده
نسخه مخصوص چاپ
Screen Saverها یکی از جذاب ترین و سرگرم کننده ترین برنامههای کامپیوتر میباشند که دارای تاریخچهای طولانی هستند. تقریبا\" از همان اوایل بوجود آمدن کامپیوترهای شخصی این برنامهها توانستند کاربران زیادی را جذب خود کنند. Screen Saver یا محافظ صفحه نمایش برنامهایست که پس از مدت زمان مشخصی که کاربر با صفحه کلید کار نکند یا ماوس را حرکت ندهد، مانیتور را فعال نموده و یا در آن تصویری را نمایش میدهد. تماس با صفحه کلید یا ماوس، محافظ صفحه نمایش را از فعالیت باز میدارد. بند فوق تعریفی از Screen Saver است که مبنای ساخت یک محافظ صفحه نمایش نیز بر همین اساس است. برای ساخت یک محافظ صفحه نمایش دو کار اصلی وجود دارد:
ساخت برنامه محافظ صفحه نمایش
تبدیل آن به فرمت scr. و قرار دادن آن در لیست Screen Saverهای ویندوز
در این مقاله نحوه ساخت یک محافظ صفحه نمایش ساده با زبان Visual Basic .NET توضیح داده میشود. الگوریتم این برنامه بسیار ساده بوده و در صورتیکه به زبانهای دیگر نیز تسلط دارید میتوانید این الگوریتم را با زبان دلخواهتان پیاده سازی کنید. همانطور که گفته شد ساخت چنین برنامه ای از دو قسمت تشکیل شده است که برای هر قسمت یک Project لازم است.
بخش اول – ساخت برنامه محافظ صفحه نمایش یک پروژه جدید باز کنید و اسم Screen Saver دلخواه خود را بر روی آن بگذارید. اولین کار شما تنظیم برخی از خصوصیات فرمتان میباشد که تمامی آنها برای ساختن برنامه حیاتی میباشند. خصوصیات فرم خود را مانند زیر تنظیم کنید:
Property Value
FormBorderstyle None
WindowState Maximized
ControlBox None
MaximizeBox None
MinimizeBox None
ShowInTaskbar False
TopMost True
با این تنظیمات فرم شما در هنگام اجرا تمام صفحه را در بر خواهد گرفت. حالا شما میتوانید هنرهای خود را روی فرم پیاده کنید. اما عجله نکنید. هنوز چند تا کار باقی مانده است. باید کاری کنیم که هنگامی که کاربر ماوس را حرکت میدهد برنامه خاتمه یابد. برای این منظور به سراغ رویداد MouseMove فرم میرویم. کد زیر را در این رویداد بنویسید:
If Not m_IsActive Then
Me.m_MouseLocation = New Point(e.X, e.Y)
m_IsActive = True
Else
If Math.Abs(e.X - Me.m_MouseLocation.X) > 10 Or _
Math.Abs(e.Y - Me.m_MouseLocation.Y) > 10 Then
Application.Exit()
End If
End If
شاید این کدها کمی عجیب به نظر برسند! اما این طور نیست. m_IsActive در کد فوق یک متغیر سطح ماژول Boolean و با مقدار اولیه False میباشد. m_MouseLocation نیز یک متغیر سطح ماژول از نوع Point میباشد. هر بار که رویداد فوق اجرا میشود (یعنی وقتی که ماوس حرکت داده میشود) نقطهای که ماوس در آن نقطه بوده است درون متغیر m_MouseLocation ذخیره میشود. این مقدار با مقادیر بعدی محل قرار گرفتن ماوس مقایسه شده و در صورتی که تغییر مکان ماوس بیش از 10 پیکسل باشد برنامه اتمام میابد. این تکنیک بدین منظور ارائه شده تا برنامه با هر حرکت کوچک ماوس خاتمه نیابد.
شما میتوانید در رویدادهای دیگر مانند MouseDown و KeyPress نیز کد زیر را قرار دهید تا برنامه شما کامل شود:
Application.Exit()
حال شما به یک تایمر جهت اجرای حرکاتی بر روی فرم نیاز دارید. پس از اضافه کردن تایمر به برنامه به رویداد Load فرم رفته و کدهای زیر را وارد کنید :
Me.Cursor.Hide()
Me.m_Graphics = Me.CreateGraphics()
Me.Timer1.Enabled = True
ابتدا مکان نما را مخفی میکنیم و سپس تایمر برنامه را به کار می اندازیم. در این جا یک متغیر سطح ماژول از نوع Graphics را نیز ساخته و به فرم خود نسبت دادهایم که این شئ گرافیکی برای کشیدن اشکالی بر روی فرم بکار میرود.
به رویداد Tick تایمر برنامه میرویم و زیر برنامه مربوط به کشیدن اشکال را فراخوانی میکنیم:
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Timer1.Tick
DrawShape()
End Sub
زیر برنامه DrawShape در این برنامه به صورت Random و با رنگهای Random مستطیلهایی را رسم میکند. کدهای این زیر برنامه در زیر آورده شده است:
Private Sub DrawShape()
Dim maxX As Integer = Me.Width
Dim maxY As Integer = Me.Height
Dim x1, x2, y1, y2 As Integer
Dim myRect As Rectangle
Dim myColor As Color
x1 = m_Random.Next(0, maxX)
x2 = m_Random.Next(0, maxX)
y1 = m_Random.Next(0, maxY)
y2 = m_Random.Next(0, maxY)
myRect = New Rectangle(Math.Min(x1, x2), Math.Min(y1, y2), _
Math.Abs(x1 - x2), Math.Abs(y1 - y2))
myColor = Color.FromArgb(255, m_Random.Next(255), _
m_Random.Next(255), m_Random.Next(255))
m_Graphics.FillRectangle(New SolidBrush(myColor), myRect)
End Sub
تا اینجا Screen Saver ما آماده است ولی هنوز یک کار دیگر باقی مانده است. هنگامی که ویندوز این فایل را اجرا میکند پارامترهایی را به برنامه ارسال میکند. این پارامترها عبارتند از \"/c\" \"/s\" \"/p\" که معنی هر کدام در ادامه بیان خواهد شد. برای بررسی هر کدام از این پارامترها باید از متد زیر استفاده کرد:
<STAThread>
Shared Sub Main(ByVal args As String())
End Sub
این زیر برنامه اولین زیر برنامهایست که پس از راه اندازی برنامه اجرا خواهد شد. پس مکان مناسبی برای بررسی این پارامترهاست. ابتدا با شرط زیر بررسی میکنیم که آیا پارامتری به برنامه ارسال شده است یا خیر؟
If args.Length > 0 Then
...
Else
Dim screenSaverForm As New ScreenSaverSample.fclsScreenSaver()
screenSaverForm.ShowDialog()
' Exit the application when the form is closed
Application.Exit()
End If
کدهای قسمت اول If را بعدا خواهیم نوشت اما قبل از آن به بررسی قسمت Else میپردازیم. اگر ویندوز هیچ پارامتری را به برنامه ارسال نکند (یعنی کاربر مستقیما\" برروی فایل exe. دابل کلیک کند) این قسمت اجرا خواهد شد. فرم اصلی برنامه را نمایش داده و هنگامی که فرم بسته شد خط آخر اجرا میشود. اما برای قسمت اول If کدهای زیر را مینویسیم:
If args(0).ToLower = \"/p\" Then
' Exit the application.
Application.Exit()
End If
If args(0).ToLower.Trim().Substring(0, 2) = \"/c\" Then
Dim screenSaverSetting As New ScreenSaverSample.fclsSetting()
screenSaverSetting.ShowDialog()
' Exit the application.
Application.Exit()
End If
If args(0).ToLower = \"/s\" Then
Dim screenSaverForm As New ScreenSaverSample.fclsScreenSaver()
screenSaverForm.ShowDialog()
' Exit the application when the form is closed
Application.Exit()
End If
اگر شرط args.Lenght > 0 برقرار شود بمعنای آنست که پارامتری توسط ویندوز به برنامه ارسال شده است. پس توسط سه شرط فوق پارامترها را بررسی میکنیم. پارامتر p/ در این مقاله مورد بررسی قرار نگرفته است. این پارامتر مربوط به ساخت قسمت پیش نمایش (Preview) است که با توجه به این که به کار با APIهای ویندوز نیاز دارد به خارج از بحث این مقاله است. برای همین به سادگی از آن گذشته و در صورت وجود آن برنامه را خاتمه میدهیم.
پارامتر c/ به معنای آنست که کاربر خواهان تنظیماتی برروی این Screen Saver میباشد. همان طور که میدانید برخی از Screen Saverها دارای فرمی مخصوص تنظیمات میباشند. شما نیز میتوانید فرمی مخصوص تنظیمات طراحی و بوسیله آن برنامه خود را کاملتر کنید. برای مثال میتوانید در کدهای فوق بجای رسم مستطیل اشکال دیگری را به انتخاب کاربر رسم کنید. پس از ساختن فرم تنظیمات میبایست آنرا در این قسمت فراخوانی کرده و نمایش دهید. پارامتر s/ به معنای نمایش معمولی Screen Saver میباشد که مانند کد بالا فرم اصلی برنامه به نمایش درآمده است.
برنامه محافظ صفحه نمایش شما حاضر است. اما هنوز ویندوز آنرا در لیست Screen Saver های خود ثبت نکرده است!
بخش دوم - تبدیل برنامه به فرمت scr. و قرار دادن آن در لیست Screen Saverهای ویندوزبرای اینکه ویندوز برنامه شما را به عنوان یک محافظ صفحه نمایش بشناسد باید برنامه خود را با پسوند scr. در دایرکتوری سیستم ویندوز خود کپی کنید. یک پروژه جدید باز کرده و یک دکمه با عنوان Install روی فرم قرار دهید. به رویداد Click دکمه رفته و کدهای زیر را وارد کنید:
Dim fileName As String = \"ScreenSaverSample.scr\"
Dim sourceFile As String = Environment.CurrentDirectory & \"\..\\" & fileName
Dim destFile As String = Environment.SystemDirectory & \"\\" & fileName
Try
File.Copy(sourceFile, destFile, True)
Catch ex As Exception
MsgBox(ex.ToString(), MsgBoxStyle.Exclamation, Me.Text)
End Try
سه متغیر رشتهای تعریف کردهایم که اولی نام فایل اجرایی است که پروژه قبلی تولید کرده است. متغیر بعدی آدرس فایل فوق و آخرین متغیر آدرس دایرکتوری سیستم میباشد (در ویندوزهای 32 بیتی با نام System32). در نتیجه پسوند فایل را از exe. به scr. تبدیل کرده و آنرا در دایرکتوری سیستم کپی میکنیم. عمل کپی نیز در ساختار Try – Catch قرار گرفته تا در صورت بروز خطا کاربر آگاه شود.
در صورتی که دستورات فوق بدون خطا اجرا شوند برنامه محافظ صفحه شما با موفقیت نصب خواهد شد. از Screen Saver خود لذت ببرید.
فایل مرتبط
[External Link Removed for Guests]
ساخت یک Screen Saver در VB.NET
در اين بخش ميتوانيد در مباحث مربوط به زبان هاي برنامه نويسي تحت دات نت به بحث بپردازيد
مدیران انجمن: abbas.m.k, athlon64x2, شوراي نظارت
بازگشت به “Dot Net Programming”
پرش به
- بخشهاي داخلي
- ↲ اخبار و قوانين سايت
- ↲ سوالات، پيشنهادات و انتقادات
- ↲ مرکز جوامع مجازي - CentralClubs Network
- ↲ سرويس ميزباني وب - CentralClubs Hosting
- ↲ مجله الکترونيکي مرکز انجمنهاي تخصصي
- بخش تلفن همراه
- ↲ نرم افزار تلفن همراه
- ↲ Symbian App
- ↲ Android App
- ↲ Windown Phone App
- ↲ iOS App
- ↲ JAVA Mobile App
- ↲ بازيهاي تلفن همراه
- ↲ Symbian Games
- ↲ Android Games
- ↲ iOS Games
- ↲ Windows Phone Games
- ↲ JAVA Mobile Games
- ↲ گوشيهاي تلفن همراه
- ↲ Sony
- ↲ Samsung
- ↲ GLX
- ↲ Dimo
- ↲ Huawei
- ↲ Motorola
- ↲ Nokia
- ↲ گوشيهاي متفرقه
- ↲ سرگرميهاي تلفن همراه
- ↲ خدمات و سرويسهاي مخابراتي
- ↲ تازه ها و اخبار تلفن همراه
- ↲ مطالب كاربردي تلفن همراه
- ↲ متفرقه در مورد تلفن همراه
- ↲ سوالات و اشکالات تلفن همراه
- بخش كامپيوتر
- ↲ نرم افزار كامپيوتر
- ↲ گرافيک و طراحي کامپيوتري
- ↲ طراحي صفحات اينترنتي
- ↲ سوالات و اشکالات نرم افزاري
- ↲ برنامه نويسي
- ↲ C Base Programming
- ↲ Dot Net Programming
- ↲ Web Programming
- ↲ Other Programming
- ↲ Software Engineering
- ↲ Java Programming
- ↲ Database Programming
- ↲ سخت افزار كامپيوتر
- ↲ امنيت و شبكه
- ↲ امنيت
- ↲ شبکه
- ↲ تازه ها و اخبار دنياي کامپيوتر
- ↲ مطالب كاربردي كامپيوتر
- ↲ متفرقه در مورد کامپيوتر
- بخش هوا فضا
- ↲ نيروي هوايي ايران
- ↲ متفرقه درباره نیروی هوایی
- ↲ نیروی هوایی و سازندگی
- ↲ حماسه و حماسه آفرینان نيروي هوايي
- ↲ تیزپروازان در بند
- ↲ شهدا و جانباختگان نیروی هوایی
- ↲ عملیاتهاي نيروي هوايي
- ↲ دستاوردها و اخبار نيروي هوايي
- ↲ تاریخچه نیروی هوایی در ایران
- ↲ هوانيروز ايران
- ↲ حماسه و حماسه آفرينان هوانيروز
- ↲ شهدا و جانباختگان هوانيروز
- ↲ دستاوردها و اخبار هوانيروز
- ↲ هواپيماها
- ↲ هواپيماهاي نظامي
- ↲ هواپيماهاي غير نظامي
- ↲ هواپيماهاي بدون سرنشين
- ↲ بالگردها
- ↲ بالگردهاي نظامي
- ↲ بالگردهاي غير نظامي
- ↲ بالگردهاي بدون سرنشين
- ↲ اخبار بالگردها
- ↲ تسليحات هوايي
- ↲ موشكهاي هوا به هوا
- ↲ موشكهاي هوا به زمين
- ↲ موشکهاي دريايي
- ↲ موشکهاي زمين به هوا
- ↲ موشکهاي زمين به زمين
- ↲ ديگر مباحث هوانوردي
- ↲ الکترونيک هواپيمايي
- ↲ موتورهاي هوايي
- ↲ شبيه سازهاي پرواز
- ↲ گالري تصاوير هوافضا
- ↲ تصاوير هواپيماهاي جنگنده
- ↲ کليپهاي هوايي
- ↲ تصاوير هواپيماهاي بمب افکن
- ↲ تصاوير هواپيماهاي ترابري
- ↲ تصاوير هواپيماهاي مسافربري
- ↲ تصاوير هواپيماهاي شناسايي
- ↲ تصاوير بالگردهاي نظامي
- ↲ تصاوير بالگردهاي غير نظامي
- ↲ تصاوير نمايشگاههاي هوايي
- ↲ تصاوير متفرقه هوايي
- ↲ انجمن نجوم
- ↲ منظومه شمسي
- ↲ كيهانشناسي
- ↲ گالري تصاوير نجوم
- ↲ اخبار نجوم
- ↲ اخبار هوافضا و هوانوردي
- ↲ مدرسه هوانوردي
- ↲ كتابخانهي هوا فضا
- ↲ متفرقه در مورد هوا فضا
- بخش جنگ افزار
- ↲ ادوات زميني
- ↲ ادوات زرهي
- ↲ تجهيزات انفرادي
- ↲ تسليحات سنگين و توپخانهاي
- ↲ خودروهاي نظامي
- ↲ تسليحات ضد زره
- ↲ ادوات دريايي
- ↲ ناوهاي هواپيمابر
- ↲ ناوشکنها
- ↲ رزم ناوها
- ↲ ناوچهها
- ↲ زيردرياييها
- ↲ تجهيزات و تسليحات دريايي
- ↲ ساير ادوات دريايي
- ↲ گالري تجهيزات و ادوات دريايي
- ↲ اخبار ادوات دريايي
- ↲ اخبار نظامي
- ↲ گالري نظامي
- ↲ متفرقه در مورد جنگ افزار
- بخش دفاع مقدس
- ↲ حماسه دفاع مقدس
- ↲ تخريب و خنثي سازي
- بخش خودرو و وسايل نقليه
- ↲ مباحث فنی و تخصصی خودرو
- ↲ معرفي خودرو
- ↲ تازهها و اخبار خودرويي
- ↲ گالري خودرو
- ↲ متفرقه وسايل نقليه
- بخش پزشکي
- ↲ پزشكي و درمان
- ↲ پزشکي
- ↲ سوال پزشکي
- ↲ بهداشت
- ↲ بهداشت عمومي
- ↲ بهداشت مواد غذايي
- ↲ لوازم آرايشي و بهداشتي
- ↲ متفرقه در مورد پزشکي
- ↲ روانشناسي و روان پزشكي
- بخش فرهنگ، تمدن و هنر
- ↲ فرهنگي هنري
- ↲ شعر و ادبيات
- ↲ فيلم و سينما
- ↲ هنرهاي نمايشي
- ↲ فرهنگ هنرهاي نمايشي
- ↲ موسيقي
- ↲ عكس و نقاشي
- ↲ تاريخ، فرهنگ و تمدن
- ↲ تاريخ ايران
- ↲ تاريخ جهان
- ↲ فلسفه
- ↲ زبانهاي خارجي
- ↲ زبان انگليسي
- ↲ زبان اسپانيايي
- ↲ هنر آشپزي
- بخش علم، فناوري و آموزش
- ↲ انجمن علم و فناوري
- ↲ انجمن آموزش
- ↲ کتاب و فرهنگ مطالعه
- ↲ دانش عمومی
- ↲ کنکور و دانشگاه
- ↲ جامعه شناسي
- ↲ خانواده
- ↲ متفرقه جامعه شناسي
- ↲ حقوق و قضا
- ↲ علوم
- ↲ فيزيک
- ↲ شيمي
- ↲ رياضي
- ↲ متالورژي
- ↲ پليمر
- ↲ علوم کشاورزي
- ↲ گياهان زراعي و باغي
- ↲ گياهان دارويي
- ↲ طبیعت و محیط زیست
- ↲ زيست شناسي
- ↲ عمران
- ↲ بتن و سازههاي بتني
- ↲ معماري و شهرسازي
- ↲ سبکها و مشاهير معماري
- ↲ شهرسازي
- ↲ معماري داخلي
- ↲ معماري منظر
- بخش الکترونيک و رباتیک
- ↲ مفاهیم اولیه و پایه در الکترونیک
- ↲ نرم افزارهای کمکی الکترونیک
- ↲ مدارهای مجتمع
- ↲ سوالات و پرسشهای مفاهیم پایه
- ↲ مدارات ساده و آسان
- ↲ مدارهای آنالوگ و دیجیتال
- ↲ شبیه ساز و طراحی مدار
- ↲ مدارات صوتی
- ↲ مدارات، منابع تغذیه سویچینگ و اینورتوری
- ↲ مدارات مخابراتی
- ↲ میکروکنترلرهای AVR
- ↲ آموزش و مثالها AVR
- ↲ طرح آماده و کامل شده AVR
- ↲ میکروکنترلرهای ARM
- ↲ سایر میکروکنترولرها و پردازندهها
- ↲ سایر میکروکنترلرها
- ↲ مدار مجتمع برنامه پذیر FPGA
- ↲ رباتیک
- ↲ اخبار و مصاحبه ها در رباتیک
- ↲ آموزش و مقالات رباتیک
- ↲ پروژهها تکمیل شده رباتیک
- ↲ مدارها و مکانیک در رباتیک
- ↲ رباتهای پرنده
- ↲ برق و الکترونیک عمومی
- ↲ تعمیر لوازم برقی
- ↲ اخبار برق و الکترونیک
- بخش بازيهاي رايانهاي
- ↲ بازيهاي رايانهاي
- ↲ كنسولهاي بازي
- ↲ PSP
- ↲ اخبار بازيها
- بخش تجاري اقتصادي
- ↲ بخش اقتصادی و مالی
- ↲ تجارت آنلاين
- ↲ بورس
- ↲ تحلیل و سیگنال روز
- ↲ کار آفرینی
- بخشهاي متفرقه
- ↲ بخش ويژه
- ↲ ساير گفتگوها
- ↲ صندلي داغ
- ↲ اخبار و حوادث
- ↲ انجمن ورزش
- ↲ آکواريوم و ماهيهاي زينتي
- ↲ معرفي سايتها و وبلاگها