تاریخچه زبان VB
آموزش زبان ویژوال بیسیک

تاریخچه زبان VB
از امروز قصد دارم آموزش آموزش برنامه نویسی به زبان ویژوال بیسیک و در آینده نزدیک با آموزش ویژوال بیسیک دات نت برای شروع آموزش برنامه نویسی بهتره از زبان بیسیک شروع کنید و با مفاهیم برنامه نویسی در حالت کلی آشنا تر بشوید
در 3 یا 4 پست آینده با آموزش الگوریتم نویسی و نوشتن برنامه های محاسباتی در محیط ساده و بی آلایش بیسیک خواهم پرداخت اجازه بدین ابتدا با تاریخچه زبان بیسیک بیشتر آشنا بشیم و آموزش الگوریتم نویسی و برنامه نویسی رو به پست های آینده موکول کنیم
تاریخچه زبان بیسیک:
ویژوال بیسیک تاریخچه جالبی دارد .با گرافیکی شدن سیستم عامل ها (ویندوز) برنامه نویسی برای برنامه نویسان بسی مشکل تر شد زیرا برنامه نویس علاوه بر نوشتن برنامه می بایست برای برنامه محیط گرافیکی نیز ایجاد می کرد البته نه به روش امروزی که این کار به سادگی هرچه تمام تر انجام می پذیرد در آن زمان برای ایجاد فرم برنامه برنامه نویس با زبان C مجبور بود صدها سطر کد بنویسد تا یک فرم ساده ایجاد شود
این ویژوال بیسیک بود که همه چیز را عوض کرد حتی نیازی نبود که برای ایجاد فرم کدی بنویسید اولین پنجره را ویژوال بیسیک برایتان می ساخت برای ایجاد هر کنترلی دیگری نیز برنامه نویسی سختی ای را متحمل نمی شد و با کشیدن و رها کردن می توانست چندین کنترل را روی فرم ایجاد کند
ویژوال بیسیک از دوعبارت Basic که نشان می دهد این زبان براساس زبان Basic ساخته شده است و کلمه Visual به معنی بصری است و نشان دهنده این است که برنامه هایی که توسط این زبان نوشته می شوند جنبه بصری دارند و دارای عناصر گرافیکی هستند ساید تصور شود که ویژوال بییسیک زبانی ساده است اما به جرات می توان گفت که <یزوال بیسیک هرچیزی است به جز ساده ویژوال بیسیک برای ویندوز امکان ساخت کنترل های سفارشی را فراهم آورد در زیر نگاهی به نسخه های گوناگون ویژوال بیسیک می اندازیم :
ابتدا ویژوال بیسیک در سال 1991 توسط غول نرم افزاری دنیا یعنی مایکوسافت وارد بازار شد
در ویژوال بیسیک 3 امکان کار با بانک اطلاعاتی به وی بی (Visual Basic) اضافه شد
در ویژوال بیسیک 4 امکان کامپایل(ترجمه) کردن برنامه برای سیستم عامل های 16 و 32 بیتی فراهم آمد و امکان نوشتن COM و DLL به وی بی اضافه گشت
در نسخه 5 ویژوال بیسیک امکان ساختن ActiveX Control (کنترل های سفارشی) فراهم آمد
در نسخه 6 ویژوال بیسیک که در آن کل برنامه از نو نوشته شده بود کامپایل مفسری به سرعت اجرای برنامه ها کمک بسزایی کرد همچنین در این نسخه امکان ساخت کنترل های وب نیز فراهم آمد
در سال 2001 بزرگترین پیشرفت ویژوال بیسیک با ورود به دنیای دات نت فراهم شد و ویژوال بیسیک ثابت کرد برای برنامه های تحت وب هم گزینه ای بی نقص است
هر برنامه ای که می خواهید بنویسید ویژوال بیسیک دات نت بهترین گزینه است زبانی که روزی افرادی آن را برای سرگرمی جالب می دانستند آرام آرام بزرگ شد و امروز یکی از متداول ترین و پر طرفدارترین زبانهای برنامه نویسی به شمار می آید
مقدمه
visual Basic (که ازين پس آن را VB خواهيم خواند) از زبانهای برنامه نويسی تحت Windows می باشد که برای کدنويسی از دستورات زبان Basic سود می برد.
VB (مانند تمام زبانهای برنامه نويسی تحت ويندوز) با استفاده از تمام امکانات زيبای ويندوز (که باعث فراگيرشدن اين سيستم عامل زيبا و توانمند در ميان کاربران شده است)، طراحی محيطی زيبا و قدرتمند را برای پروژه مورد نظر، بسيار ساده می نمايد.
در حال حاضر، به جرأت می توان گفت که يکی از انتخاب های اصلي برنامه نويسان حرفه ای در سطح جهان برای تهيه پروژه های با قابليت های ويژه، VB می باشد، خصوصاً از VB6 که مايکروسافت عملاً با افزودن توانايی های متنوع بسيار به VB، حتی حاضر شد از ديگر زبانهای معروف تحت ويندوز خود مانند Visual C++ و Visual Foxpro بگذرد و سعی در هدايت تمام برنامه نويسان به سوی VB داشته باشد.
در حال حاضر که به تهيه اين جزوه همت گماردم، نسخه آزمايشی VB.net در بازار وجود دارد ولی عموماً برنامه نويسان ازVB6 استفاده می کنند و لذا ما نيز اين نسخه ازVB را برای آموزش انتخاب می کنيم، هر چند تمام خوانندگان عزيز می دانند که عموماً با فراگيری يک نسخه از يک برنامه، فراگيری نسخه های بعدی آن کار چندان دشواری نخواهد بود.
خوانندگان عزيز توجه داشته باشيد که برای فراگيری VB، آشنايی با ويندوز و Basic لازم است. همچنين بهتر است در هنگام مطالعه، VB باز باشد و مطالب را در همان لحظه کار كنيد
مفاهیم بنیادی
درVB، شئ (Object) های بسياری وجود دارد مانند فرمها، دکمه ها، برچسب ها، تصاوير و ... . همانطور که می دانيم هر شئ(Object) دارای يک سری مشخصات(Properties) می باشد. به عنوان مثال اگر يک اتومبيل را به عنوان يک شئ در نظر بگيريم، اين اتومبيل دارای مشخصاتي چون رنگ خاص، وزن خاص، طول و عرض و ارتفاع خاص، ميزان خاص مصرف بنزين و ... می باشد که در تمايز دو اتومبيل از هم، همين مشخصات هستند که به ما کمک می کنند.
درVB نيز هر Object دارای يک تعداد مشخصه (Property) می باشد. به عنوان مثال يک دکمه(Button) دارای مشخصاتی چون عرض(Width) و ارتفاع(Height) خاص و يا يک عنوان(Caption) خاص و ... می باشد.
برخی شئ(object) ها درVB، فقط در کدنويسي قابل دسترسی هستند(مانند شئADODB که در آينده با آن آشنا خواهيد شد) اما برخی ديگر علاوه بر زمان کدنويسي، در زمان طراحی (Design) نيز می توان آنها را بر روی فرمها و در جای دلخواه قرار داد و آنها را تنظيم (Set) نمود. به اشياء نوع اخير، کنترل (Control) گفته می شود.
کنترل ها خود دو گونه اند، برخی علاوه بر زمان طراحی (Design) در زمان اجرا (Run Time) نيز ديده می شوند، به اين نوع کنترل در اصطلاح(Visual Control) VCL گفته می شود که بيشترين انواع کنترلها را در بر می گيرند (مانند دکمه ها، جدولها، برچسبها و بسياری ديگر که در ادامه خواهند آمد) اما برخی ديگر از کنترل ها فقط در هنگام طراحی (Design) ديده می شوند و در هنگام اجرا تنها عمل خاصی انجام می دهند و خود ديده نمی شوند (مانند کنترلTimer)، به اين نوع کنترلها،Non-Visual Control گفته می شود. بايد توجه داشته باشيدکه کنترلهایNon-Visual، ذاتاً درRun Time ديده نمی شوند ولی ممکن است بنابر نيازی و در زمانی خاص از اجرا، خودمان برای يک يا چند VCL نيز مقدار مشخصه Visual آنها را برابرFalse قرار دهيم که مسلماً در اين حالت با وجود اينکه در آن زمان، اين کنترلها ديده نمی شوند ولی VCL بودن آنها تغييری نکرده است.
کنترل ها (اعم ازVCL ها و غير آن) معمولاً دارای تعدادی Event می باشند. Event ، رويداد يا رخدادی است که توسط کاربر و معمولاً با استفاده از ماوس يا صفحه کليد برای يک کنترل خاص روی می دهد.مثلاً يک کنترل ممکن است دارای رويداد (Event) Click باشدکه اين نوع رويداد زمانی که کاربر در هنگام اجرای برنامه (Run Time) بر روی آن کنترل خاص کليک نمايد رخ می دهد.برخی Event های معمول ديگر برای کنترلها عبارتند از: DoubleClick (زمانی که بر روی آن کنترل دابل کليک شود) ، MouseMove (زمانی که نشانگر ماوس بر روی آن کنترل قرار دارد) ، KeyPress (زمانی که کليدی از صفحه کليد زده شد) ، KeyDown (زمانی که کليدی از صفحه کليد پايين بود) ، KeyUp (زمانی که کليد زده شده برداشته شد) ، MouseDown ، MouseUp و ... که در ادامه با آنها بيشتر آشنا خواهيم شد.
برای هر Event (رويداد) می توان يک Event Procedure داشت. Event Procedure پاسخی است که يک کنترل زمانی که يک Event رخ می دهد، از خود نشان می دهد. در واقع Event قطعه برنامه ای است که زمانی که بر روی يک کنترل، يک Event رخ می دهد، به طور اتوماتيک اجرا می شود.
کنترلها معمولاً علاوه بر يک سری مشخصات (Properties) و يک سری رويداد (Event) ، دارای تعدادی نيز متد (Method) می باشد. متدها عملياتهای تعريف شده ای هستند که توسط آنها يک عمل خاص بر روی کنترلها انجام می شود.
توجه داريم که تفاوت متدها و Event Procedure ها در اين است که متدها توسط VB ، شناخته شده اند و عملشان هميشه ثابت است، اما Event Procedure ها توسط برنامه نويس و به دلخواه او تهيه می شود، بنابراين Method های مشابه بر روی کنترلهای متفاوت، پاسخ مشابهی دارد ولی ممکن است Event های مشابه بر روی کنترلهای متفاوت با توجه به Event Procedure های مخصوص هر يک، متفاوت باشد (مثلاً رويداد Click برای يک کنترل، کاری انجام دهد و برای کنترلی ديگر، کاری ديگر).
نکته ديگری که بايد به آن توجه داشت اينست که Procedure ها به طور مستقيم اجرا نمی شوند بلکه فقط زمانی که نامشان فراخوانی شود اجرا می شوند. بنابراين مثلاً در مورد Event Procedure ها بايد بدانيم که با اينکه کد مربوط به آنها نوشته شده است ولی تا وقتی که آن Event خاص (که باعث فرا خوانی Event Procedure مربوط می شود) روی ندهد، اين کدها اجرا نخواهند شد
تعریف متغیر ها
به اطمينان، قبلاً در برنامه نويسی (لااقل در Basic که پيش فرض بحث ما معرفی شده بود) از متغيرها زياد استفاده کرده ايد. در برخی زبانهای برنامه نويسی (مثل Basic) ، نوع متغيرهای بکار رفته در برنامه، لازم نيست از قبل تعريف شده باشد و در هنگام اجرا، کامپايلر، خود، آن را به نوع مورد نياز (مثل Integer برای برای داده های عددی صحيح، يا String برای نوع داده رشته ای و کاراکتری و ...) تعريف و اجرا خواهد کرد. اما در برخی ديگر (مانند زبان برنامه نويسی Pascal)لازم است، نوع داده متغيرهای بکار رفته، در جايی از برنامه (و عموماً قبل از استفاده از آن) تعريف شوند.
در VB، از آنجا که VB از Basic برای کدنويسی استفاده می شود، به طور معمول، نياز به تعريف نوع داده ها نيست. اما از آنجا که امروزه برنامه نويسان ترجيح می دهند که از کامپايلری برای برنامه نويسی استفاده کنند که او را به تعريف تمام متغيرها مجبور کند (زيرا اگر چنين نباشد، اگر او به اشتباه دستوری را غلط تايپ کند (مثلاً بجای then بنويسد Then) ، کامپايلر آن را به عنوان متغيری فرض می کند و در واقع بدون اينکه ما خطايی را دريافت کنيم، در روند برنامه مان مشکل پيدا می شود و خطايی رخ می دهد که شايد تشخيص علت آن سخت تر شود) ، می توانيم VB را موظف سازيم تا ما را مجبور به تعريف نوع داده متغيرها نمايد.
اگر در ابتدای هر يونيت (Unit) عبارت Option Explicit نوشته شود، VB ما را مظف می کند که در آن يونيت، هر متغيری که بخواهيم استفاده کنيم، آن را قبل از استفاده، تعريف نماييم (لذا بهتر است ابتدای همه Unitها عبارت مذکور باشد) . يونيت (Unit) ها، بخش هايی از برنامه اند که در آنها کدنويسی می شود. مثلاً هر فرم، دارای يک Unit مخصوص به خود است که تمام Event Procedureهايی که تا بحال می نوشتيم، در آن قرار می گرفت.
همچنين اگر از منوی Tools گزينه Options را اتنخاب کنيم، و از لبه Editror (Tab Sheet) ، گزينه Require Variable Declare را چک مارک بزنيم، از اين پس، VB هر فرمی که ايجاد می شود، به طور پيش فرض عبارت Option Explicit را در ابتدای آن خواهد نوشت و در واقع هميشه ما را موظف می سازد که متغيرها را تعريف نماييم.
برای تعريف متغيرها از دستور Dim به شکل کلی زير استفاده می شود:
Dim variableNames As variablsType
به عنوان مثال دستور Dim a,b As Integer متغيرهايی را به نام a,b از نوع داده Integer (نوع داده عددی صحيح) تعريف می کند و سپس از آن می توانيم متغير a را در برنامه مقداردهی نماييم.
متغيرها را می توان در سه سطح تعريف نمود (Space of Variables) :
1- سطح پروسيجر (procedure Level) :
اگر متغيری در يک Procedure (و معمولاً ابتدای آن) تعريف کنيم، آن متغير را فقط در همان Procedure می توان استفاده نمود و در واقع برای همان Procedure خاص تعريف شده است.
2- سصح فرم (Form Level) :در سطح فرم (يعنی در ابتدای Unit مربوط به فرم و پس از عبارت Option Explicit) ، متغيرها می توانند به دو نوع تعريف شوند:
2-1- تعريف به صورت Private (شخصی) :
اگر متغيری در سطح فرم به صورت Private و به شکل کلی:
Private variableNames As variableType
تعريف شود، آن متغير فقط در تمام Procedureهای فرم قابل استفاده است و در فرم های ديگر قابل دسترسی و استفاده نمی باشد (مگر اينکه در آنها هم جداگانه تعريف شده باشد) .
2-2- تعريف به صورت Public (عمومی) :
اگر متغيری در سطح فرم، به صورت Public و به شکل کلی:
Public variableNames As variableType
تعريف شود، در اين صورت آن متغير علاوه بر دسترسی در همان فرم (بوسيله نام آن متغير) ، در فرمهای ديگر (در واقع در کل پروژه) قابل دسترسی خواهد بود. فقط در صورت نياز به استفاده در فرمهای ديگر لازم است نام فرمی را که متغير در آن تعريف شده است ذکر شود (البته اگر آن فرم load باشد) و سپس پس از يک نقطه (Dot) نام آن متغير آورده شود. به عنوان مثال اگر در ابتدای يونيت مربوط به Form1 نوشته شده باشد:
Public Number As Integer
و بخواهيم در فرمی ديگر، به آن مقداردهی کنيم، لازم است چنين بنويسيم:
Form1.Number = 15
توجه: اگر در سطح فرم از Dim برای تعريف استفاده شود، به طور پيش فرض آن را Private در نظر خواهد گرفت.
3- سطح ماژول (Module Level) :
ماژولها بخشی از پروژه هستند که متغيرها، توابع و Procedureهای عمومی (Global) را در آن تعريف می کنيم. اگر تعريفی (مثل تعريف نوع داده متغير يا يک Procedure) با Private انجام گيرد، فقط در همان ماژول قابل استفاده می باشد و اگر با Public صورت گيرد، در هر فرمی و بدون نياز به نوشتن نام ماژول در ابتدای آن، قابل استفاده خواهد بود. نکته ای که بايد توجه داشت اينکه اگر بخواهيم از متغيريا Procedureای که در يک ماژول به صورت Public تعريف شده است، در ماژولی ديگر استفاذه کنيم، ذکر نام ماژول در ابتدای آن به همراه يک نقطه (Dot) ضروری است.
معمولاً از تعريف Public در ماژول زمانی استفاده می کنيم که بخواهيم متغير يا Procedureای به صورت Global (عمومی) در سراسر پروژه استفاده شود. شايد بگوييد می شود در هر فرمی که به آن نياز داريم، همانجا متغير را تعريف می کنيم، پس چه نيازی به ماژول داريم؟
هر چند اين کار باعث می شود که برنامه خطای دستوری از ما نگيرد اما در اينصورت وقتی از فرمی به فرم ديگر می رويم مقدار موجود در آن متغير، پس از تعريف مجدد، دوباره Null (تهی) می شود، در حاليکه اگر از يکبار تعريف Public در ماژول استفاده کنيم، پس از مقدار دهی در جايی از پروژه، تا مقداردهی مجدد، اين مقدار در تمام پروژه قابل دسترسی است.
برای افزودن يک ماژول به پروژه کافی است از منوی Project گزينه Add Module را انتخاب کنيد و آن را (با پسوند .BAS) save نماييم.
همانطور که ملاحظه می فرماييد، ماژولها تنها بخش کدنويسی (Unit) دارند بر خلاف فرمها که يک بخش Interface (ظاهری) داشتند که کنترلها را به صورت Visual روی آن قرار می داديم و يک بخش کدنويسی (Unit) که کدهای مربوط به Event Procedureها را در آن می نوشتيم. همچنين ملاحظه می فرماييد که با توجه به وظيفه ماژولها، معمولاً در کل پروژه اولاً به يک ماژول نيازمنديم ثانياً به بيش از يک ماژول احتياجی پيدا نمی کنيم.
نکته: علاوه بر متغيرها می توانيم از ثوابت (Constants) نيز در پروژه استفاده کنيم. ثوابت، بخشی از پرونده اند که هنگام تعريف، مقداردهی می شوند و تا پايان پروژه مقدارشان ثابت می ماند. برای تعريف ثوابت از دستور Constant استفاده می شود به عنوان مثال:
Const PI As single = 3.14


آرایه ها
حتماً يکی از الفاظی که در برنامه نويسی، از آن بهره بسياری برده ايد، آرايه می باشد. آرايه ها معمولاً خانه هايی از حافظه اند که تحت يک نام واحد و با انديس های متفاوت نامگذاری می شوند. در Basic هم آرايه ها (مانند ساير زبانهای برنامه نويسی) کاربرد فراوانی دارند که مثلاً توسط دستور Dim A (10, 10) As Integer يک آرايه دو بعدی (در واقع يک ماتريس) به نام A از نوع داده Integer تعريف می شود که سطر وستون آن دارای انديس های 0 تا 10 می باشد و توسط مثلاً A (5, 8) به خانه سطر 5 و ستون 8 از آن دسترسی خواهيم يافت.
در VB نيز (از آنجا که VB از Basic برای کدنويسی استفاده می کند) ، آرايه ها، تعريف آنها و نحوه دسترسی به خانه های آن به طريق فوق می باشد. اما آنچه در اينجا متفاوت است اينکه در VB می توان از کنترلها نيز يک آرايه ساخت. مثلاً چند Command Button با يک نام خاص و با انديسهای متفاوت ايجاد کرد تا بتوان کدهای واحدی را با تفاوت بسيار کم برای همه شان نوشت.
اگر از يک کنترل کپی کنيم (در حالی که فوکوس در Design Time به آن است، کليدهای CTRL+C را فشار دهيم) و سپس آن را در همان فرم Paste نماييم (کليدهای CTRL+V را فشاردهيم) ، پيغامی بر روی صفحه نمايش ظاهر می‌شود مبنی بر اينکه "يک کنترل ديگر با همين نام در فرم وجود دارد، آيا می خواهيد آرايه ای از کنترل ايجاد کنيد؟" که می توانيد جواب No به آن بدهيد. اما اگر به اين پيغام دکمه Yes را پاسخ دهيد، VB به طور خودکار نام هر دو را يکسان (و به نام کنترل کپی شده) در نظر می گيرد و Index کنترل اول را صفر و Index کنترل دوم را يک قرار می دهد (Index ، يکی از مشخصه (Property)های تمام کنترل ها می باشد).
می توان اينکار را دستی نيز انجام داد. يعنی دو کنترل (يا چند کنترل) خاص را يک نام واحد دهيم که در اينصورت VB پس از دادن يک پيغام مبنی بر همين موضوع، آن دو کنترل (يا چند کنترل) را به صورت آرايه کنترل تبديل خواهد کرد و به هر يک Index خاصی را نسبت خواهد داد.
اگر آرايه کنترل ايجاد کنيم، هر رويداد (Event) ای که بر روی هريک از عناصر رخ دهد (مانند Click و غيره) ، روی تمام آرايه صورت مي گيرد و مقدار Index مربوط به عضوی که رويداد بر روی آن صورت گرفته، به عنوان يکی از پارامترهای پروسيجر آن، باز می گردد. برنامه بعد را بنويسيد تا با نحوه کار آرايه کنترلها آشنا شويد.
هنگامی که VB اجرا می شود، توسط پنجره ای (شکل1)، نوع پروژه ای که می خواهيد طراحی کنيد از شما خواسته می شود.

همان طور که ملاحظه می فرماييد، انواع مختلفی از پروژه ها در اين پنجره وجود دارد که در ادامه به برخی از آنها خواهيم پرداخت، ولی فعلاً نوع استاندارد پروژه های VB يعنی نوع Standard EXE را انتخاب و آن را باز(Open) می کنيم. اين نوع پروژه (که غالب پروژه ها را در بر می گيرد) برای تهيه برنامه های کاربردی(Applications) مورد استفاده قرار می گيرد.
پس از باز کردن پروژهStandard Exe ، پنجره اصلیVB (شکل 2 ) برای اين نوع پروژه باز می شود:


اين پنجره، علاوه بر آنچه عموماً در پنجره های ويندوز می بينيم (مانند Title Bar وMenu Bar)، شامل چند بخش بسيار مهم می باشد:
1- يک فرم(Form) خالی با عنوان (Caption)برابر Form1 وجود دارد. اين همان فرمی است که بلافاصله پس از اجرا (Run) شدن برنامه، روی صفحه نمايش، قرار می گيرد (اين پيش فرض قابل تغيير است).
2- نوار ابزار Standard Buttons که دکمه هايی با کاربرد معمولاً بيشتر را شامل می شود. تعدادی از اين دکمه ها را در ويندوز می شناسيد (مانند Copy, Paste, Undo, Redo, Open وSave) و برخی ديگر را در ادامه خواهيم ديد.
3- پنجره ای سمت چپ تصوير ديده می شود. اين پنجره شامل برخی از کاربردي ترين کنترلهای قابل ديدن (VCL) می باشد. در ادامه با VCLها آشنا خواهيم شد و از آنها بسيار بهره خواهيم برد. به اين پنجره Tool Bar (جعبه ابزار) گفته می شود.
4- در سمت راست تصوير سه پنجره ديگر ديده می شود. در بالا، پنجره پروژه (Project)، سپس پنجره مشخصات(Properties) و در پايين، پنجرهForm Layout قرار دارد. پنجرهProject شامل نام تمام اجزای پروژه مانند فرمها، ماژولها(Moduls)،Activex ها و ... می باشد. مثلاً اگر در پروژه ای چند فرم وجود داشته باشد و بخواهيم به فرم ديگری برويم، کافی است نام آن را در اين پنجره دابل کليک نماييم. پنجره Properties، برخی از مشخصه(Property) های مربوط به VCL ای که انتخاب شده (Select) باشد را نمايش می دهد که می توان آنها را در هنگام طراحی(Design Time) تغيير داد (ساير مشخصه ها بايد در هنگام اجرا(Run Time) تنظيم شوند.) در پنجرهForm Layout نيز می توان مکان قرار گيری Form هنگام اجرای برنامه(Run Time) بر روی صفحه نمايش را تعيين کرد (همچنين اين کار را توسط کدنويسي نيز می توان انجام داد و عموماً همين روش هم توصيه می شود و لذا عموماً حتی می توان اين پنجره را به کل بست).
در اين بخش با شمای کلیVB آشنا شديم، در ادامه درباره VCL ها و نحوه کدنويسي برای آنها مطالب مفيدی خواهيم آموخت.


طراحی یک ماشین حساب ساده
فرض کنيد بخواهيم يک ماشين حساب ساده، مطابق آنچه در شکل 7 می‌بينيد، طراحی کنيم:

يک Label به نام lblDisplay به عنوان نمايشگر ماشين حساب و با Caption برابر مقدار" 0" (زيرا مقدار اوليه ماشين‌حساب‌ها صفر می باشد) در محل خود قرار می دهيم. همچنين يکCommandButtonبه نام cmdequal به عنوان دکمه مساوی" و با Caption برابر "= " نيز در محل مخصوص خود قرار می دهيم.
حال ده عدد Command Botton ديگر با Caption های به ترتيب برابر " 0" تا "9 " را در جای خود قرار می دهيم و سپس نام همه اين ده دکمه را به نام cmdNumber تغيير می دهيم. در اين صورت همانطور که گفته شد، VB اين ده کنترل را به صورت آرايه کنترلی (Control Array) در نظر خواهد گرفت (به پيغام داده شده با همين مضمون جواب Yes دهيد).
به همين ترتيب چهار CommandButton ديگر را با Captionهای "+ " و "- " و "* " و "/ " و با نام يکسان cmdOprator به عنوان دکمه های چهار عمل اصلی به صورت آرايه کنترلی در محل های خود قرار می دهيم.
حال کافی است در يونيت مربوط به اين فرم، چنين کدنويسی کنيم (توجه داشته باشيد که متغيرهاي x و y و op در سطح فرم (Form Level) تعريف شده اند و لذا مقدار آن در تمام فرم قابل دسترسی خواهد بود) :
________________________________________
Option Explicit
Dim x,y As Integer
Dim op As String
Private Sub cmdNumber_Click (Index As Integer)
IF lblDisplay = “Ø” then lblDisplay = “”
lblDisplay = lblDisplay + cmdNumber(Index).Caption
End Sub
Private Sub cmdOprator_Click (Index As Integer)
x = Val(lblDisplay)
op = cmdOprator(Index).Caption
lblDisplay = “Ø”
End Sub
Private Sub cmdEqual_Click ( )
y = Val (lblDisplay)
Select Case op
Case “+”
lblDisplay = x + y
Case “-”
lblDisplay = x - y
Case “*”
lblDisplay = x * y
Case “/”
lblDisplay = x / y
End Select
End Sub

________________________________________
توجه داريد که:
1. در رويدادهايی که مربوط به آرايه های کنترلی (يعنی cmd Number و cmdoperator ) است، يک پارامتر به نام Index در آن وجود دارد که شماره Index (انديس) کليدی که فشرده شده را برمی‌گرداند. و لذا مثلاً cmdOprator(Index).Caption برابر "+" خواهد بود، اگر کليد + فشرده شود و برابر "- " خواهد بود، اگر کليد – زده شود و ...
2. مشخصه (Property) پيش فرض برای Labelها Caption است و لذا هر جا lblDisplay ذکر شده است، توسط VB مانند lblDisplay.Caption در نظر گرفته می شود.
3. توسط دستور Select Case، يک متغير (که نام آن جلوی دستور Select Case نوشته می شود) با مقادير مختلفی (که جلوی دستورات Case بعدی نوشته می شود) چک می شود که اگر برابر هر يک از اين مقادير بود، دستور پس از همان Case اجرا می شود.

خاموش کردن سیستم با VB
در ویژوال بیسیک یک دستور به نام Shell وجود داره که میتونه یک برنامه رو با دریافت کردن آدرس برنامه اجرا کنه (همانند Run) در ویندوز و یکی از بهترین کارهایی که این تابع می تونه انجام بده اجرای برنامه هایی که می توان با تایپ مستقیم در Run ویندوز اجرا کرد مانند Calc و Notepad و Regedit و Log Off و ... هستش
من تو این آموزش می خوام از این روش برای خاموش کردن کامپیوتر استفاده کنم البته باید متذکر بشم که راههای دیگری همچون توابع API ای مانند ShellExecute و ExitWindowsEx و... برای خاموش کردن کامپیوتر وجود داره که من راحتترین روش رو برای این کار آموزش می دم
برای شروع کار یه پروژه استاندارد ویندوز در ویژوال بیسیک باز کنین و سه دکمه فرمان (Command Button) روی فرم رسم کنید و مقدار Caption اونها رو به ترتیب با Log Off و Shut Down و Restart مقدار دهی کنید البته برای بهتر جلوه دادن برنامه می تونید از تصویر به جای دکمه استفاده کنید که در مثال این برنامه از تصویر استفاده کردم
یه کم در مورد دستور Shell توضیح می دم:
شکل کلی این دستور به شکل زیر است:
Shell (pathname,[Windows Style]) ‘Shell Type
همون طور که ملاحضه می فرمایید این تابع دارای دو آرگومان بسیار مهم هستش
Pathname:مسیر برنامه که نوشتن اون در این تابع الزامی است و از نوع رشته ای هستش و باید در داخل دو کوتیشن محصور بشه ، همون طور که قبلا گفته بودم می تونین از دستورات Run ویندوز به جای آدرس دهی کامل در برخی برنامه ها استفاده کنین
:Windows Style همون طور که از نامش پیداست نوع باز شدن پنجره برنامه رو معین می کنه که نوشتنش الزامی نیست و در صورت ننوشتن پنجره در حالت عادی باز می شه این آرگومان می تونه با یکی از ثابت های زیر مقدار دهی بشه
VbNormalFocus
VbMaximized
VbMinimized
VbHidden
برای خاموش کردن کامپیوتر می تونیم دستور زیر رو در Run ویندوز تایپ کنیم
Shutdown –s –f –t 0
اگه در دستور بالا به جای –s از –r استفاده کنیم سیستم ریستارت می شه و اگه از –L استفاده کنیم سیستم Log Off می شه تقریبا همه چی تموم شده می تونین برای خاموش کردن کامپیوتر از دستور
Shell(“shutdown –s –f –t 0”) ‘Turn Off Windows
و از دستور
Shell(“shutdown –r –f –t 0”) ‘Reboot Windows
برای ریستارت کامپیوتر و همچنین از دستور
Shell(“shutdown –l –f –t 0”) ‘Log off Windows
برای Log Off کردن کامپیوتر می توانید استفاده کنید
کد کامل:
Private sub Cmdlogoff_Click()
Shell(“shutdown –l –f –t 0”,vbHidden) ‘Log Off Windows
End sub
Private sub CmdShutdown_Click()
Shell(“shutdown –s –f –t 0”,vbHidden) ‘Turn Off Computer
End sub
Private sub cmdrestart_Click()
Shell(“shutdown –r –f –t 0”, vbHidden) ‘Reboot Computer
End sub
نکته بین –r و –f و –t و صفر در همه مثالها فاصله وجود داره
مثال کامل شده :
مثال نمونه رو حتما دانلود کنین چون چند سطر کد بیشتر داره و میتونه اطلاعات تون رو بالا ببره