تبليغاتX
برنامه نويسي VB
برنامه نويسي VB
عرض معذرت
متأسفانه به علت شروع فصل امتحانات، اين وبلاگ را بعد از پايان امتحانات آپديت خواهم كرد.

منتظر باشيد.

2 نوشته شده در  شنبه 31 اردیبهشت1384ساعت 10:58  توسط موسي مرادي 


كار با فايل‌هاي Resource

فايل‌هاي Resource همانطور كه از نامشان معلوم است، منابعي هستند كه فايل‌ها و اطلاعات ديگر با فرمت‌هاي مختلف، مورد نياز براي برنامه را در خود جمع مي‌كنند. كار با اين فايل‌ها در VB بسيار آسان است.

 

فرض كنيد تصويري داريم كه در حين اجراي برنامه مي‌خواهيم آن را به داخل يك PictureBox، لود كنيم. ابتدا فايل Resource را ايجاد مي‌كنيم و تصوير را در آن قرار مي‌دهيم. در منوي Add-ins، به قسمت Add-In Manager… برويد. در داخل ليست، VB 6 Resource Editor را پيدا كرده و انتخاب كنيد. جعبه‌هاي Loaded/UnLoaded و Load on startup را علامت بزنيد. OK را بزنيد. به نوار ابزار استاندارد و همچنين منوي Tools يك آيكن با عكس يك جعبه سبز رنگ و با نام Resource Editor اضافه شده است. آن را بزنيد. يك پنجره كوچك باز خواهد شد. دكمه Add Bitmap… را در اين پنجره بزنيد. فايل تصوير خود را انتخاب كرده و Open كنيد. كليد Save را در اين پنجره فشار دهيد. براي فايل Resource خود يك نام انتخاب كنيد و آن را در مسير پروژه‌تان ذخيره كنيد. اين پنجره را ببنديد.

 

يك PictureBox و يك دكمه در فرم قرار دهيد و در رويداد Click دكمه بنويسيد:

 

Picture1.Picture = LoadResPicture(101, 0)

 

عدد 101 كد تصوير مورد نظر در فايل Resource است كه در صورتي كه آن را تغيير داده‌ايد در كد بالا هم تغيير دهيد، و عدد 0 هم مشخص كننده اين است كه شما مي‌خواهيد يك تصوير را Load كنيد. كار با تصاوير را ياد گرفتيد. اكنون به كار با متن‌ها مي‌پردازيم.

 

آيكن Resource Editor را كليك كنيد. در اين پنجره، دكمه Edit String Tables… را كليك كنيد. يك پنجره جديد باز خواهد شد. در بالاي جدول، زبان مورد نظر خود را انتخاب كنيد. بر روي خانه خالي روبروي عدد 101 دابل‌كليك كنيد تا به حالت ويرايش وارد شويد. عبارت مورد نظر خود را وارد كنيد. (مثلاً عبارت «برنامه نمونه كار با رشته‌ها در فايل‌هاي منبع») درصورتي كه مي‌خواهيد عبارت‌هاي ديگري هم وارد كنيد، Enter را فشار دهيد و در خانه بعدي وارد كنيد. پس از اتمام كار، پنجره را ببنديد و در پنجره بعدي هم تغييرات را ذخيره كنيد و آن را هم ببنديد.

 

يك دكمه ديگر در فرم قرار دهيد و در رويداد Click آن بنويسيد:

 

Me.Caption = LoadResString(101)

 

برنامه را اجرا و امتحان كنيد.

به همين روش مي‌توانيد Icon و Cursor هم در فايل منبع قرار دهيد و از آن در برنامه استفاده كنيد. با اين تفاويت كه براي Load كردن اين دو، از همان تابع LoadResPicture استفاده خواهيم كرد، ولي براي آرگومان دوم تابع، براي Icon مقدار 1 و براي Cursor، مقدار 2 را قرار خواهيم داد.

 

براي فايل‌هاي با فرمت‌هاي ديگر، مي‌توانيد از گزينه آخر يعني Add Custome Resource… استفاده كنيد. در اين صورت آنها با تابع LoadResData، قايل لود خواهند بود.

 

 

                                                                                                                               موفق باشيد

                                                                                                                              نظر يادتون نره

2 نوشته شده در  یکشنبه 18 اردیبهشت1384ساعت 17:50  توسط موسي مرادي 


آموزش ساخت ActiveX Control - قسمت سوم

باز هم سلام.

از آقا افشين هم واقعاً تشكر مي‌كنم. در مورد سؤال آقا مهران، يكي از دوستانم راه‌حلي پيشنهاد كردند. اگر كنترل شما طوري است كه هنگام گذاشتن روي فرم، يك پنجره باز مي‌كند و كد مي‌خواهد و هيچ محدوديت ديگري ندارد، مي‌توانيد با استفاده از روشي كه در مقاله «آموزشي فارسي‌سازي نرم‌افزارها» در سايت تك‌كليك معرفي كرده‌ام، با Visual C اكتيوايكس را باز كنيد و «پنجره محاوره» مربوطه را پيدا كنيد و آن را پاك كنيد. البته اين روش خيلي هم علمي نيست و همان‌طور كه گفتم، فقط مواقعي كاربرد دارد كه محدوديت ذكر شده وجود داشته باشد. در صورت وجود محدوديت‌هاي ديگر كارساز نيست.

 

امروز مي‌خواهم چند تا از Propertyهاي مهم خود UserControl را براي شما آموزش بدهم.

 

پروژه كنترلي كه در جلسات قبل ساختيم را باز كنيد. پنجره مربوط به UserControl را باز كنيد. همانطور كه مي‌بينيد در پنجره Properties، ويژگي‌هاي زيادي وجود دارد كه بسياري از آنها را در حالت عادي VB ديده‌ايد.

 

ويژگي CanGetFocus: در حالت پيش‌فرض فعال است. اگر غيرفعال كنيد، كنترل شما در هنگام اجرا Focus قبول نمي‌كند و همچنين در اين حالت، از كنترل‌هايي كه Focus قبول مي‌كنند، مانند CommandButton، نمي‌توانيد در كنترلتان استفاده كنيد. (همانطور كه مي‌بينيد، اين كنترل‌ها در جعبه ابزار VB غيرفعال مي‌شوند.)

 

ويژگي ControlContainer: در حالت پيش‌فرض غير فعال است. اگر فعال كنيد، كنترل شما خاصيت قاب بودن به خود مي‌گيرد، يعني كنترل‌هاي ديگر مي‌توانند در داخل كنترل شما قرار بگيرند. مثل كنترل Frame. هر دو حالت اين ويژگي را امتحان كنيد و نتيجه را ببينيد.

 

ويژگي DefaultCancel: در حالت پيش‌فرض غير فعال است. اگر فعال كنيد، دو ويژگي به كنترل شما اضافه مي‌شود كه عبارتند از Defaut و Cancel كه هر دو از نوع True-False هستند. اين ويژگي‌ها در كنترل CommandButton وجود دارند، مي‌توانيد آنها را آزمايش كنيد. توضيح در مورد اين دو ويژگي: اگر كاربر خاصيت Default يكي از كنترل‌ها را فعال كند، خاصيت Default كنترل‌هاي ديگر غير فعال مي‌شود. هنگامي كه اين خاصيت براي يك كنترل، فعال است، موقعي كه فوكوس در آن كنترل قرار ندارد، كاربر مي‌تواند با فشار دادن كليد Enter، رويداد Click از آن كنترل را اجرا كنيد. اين موضوع را در پنجره‌هاي تنظيمات ويندوز، بسيار ديده‌ايد، مثلاً تنظيمات را انجام مي‌دهيد و با زدن Enter پنجره را OK مي‌كنيد. ويژگي Cancel نيز دقيقاً مانند Default است فقط با اين تفاوت كه در آن به جاي Enter، كليد Cancel كار مي‌كند.

 

ويژگي InvisibleAtRunTime: اگر اين ويژگي را فعال كنيد، كنترل شما در هنگام اجرا نامرئي مي‌شود. مثل كنترل Timer. مثلاً اگر مي‌خواهيد كنترلي طراحي كنيد كه كاربر، بيشتر، از توابع (متدها)ي آن استفاده خواهد كرد، از اين خاصيت استفاده كنيد. مثلاً بنده در حال طراحي يك كنترل MessageBox پيشرفته هستم كه امكانات زيادي نسبت به تابع MsgBox ويژوال بيسيك دارد. در اين كنترل (كه خاصيت بالا در آن فعال است)، يك متد گذاشته‌ام كه با فراخواني آن توسط كاربر، يك فرم در صفحه ظاهر مي‌شود كه حاوي متن تذكر و تصوير و خيلي مشخصات ديگر است.

 

ويژگي PropertyPages: اگر دكمه داخل اين ويژگي را بزنيد و موارد آنجا را تيك بزنيد، يك ويژگي Custome به كنترل شما اضافه مي‌شود و همچنين چندين «صفحه ويژگي» هم اضافه مي‌شود. توسط اين صفحات ويژگي، كاربر مي‌تواند ويژگي‌هاي كنترل شما را از اين صفحات و بدون نياز به پنجره Properties وارد كند. امتحانش ضرر نداره.

 

ويژگي ToolBoxBitmap: توسط ويژگي مي‌توانيد يك تصوير را لود كنيد. در آن صورت اين تصوير در پنجره ابزار نشان داده خواهد شد (در صورتي كه هيچ تصويري انتخاب نكنيد، عكس يك قلم نمايش داده مي‌شود). توصيه مي‌كنيم براي اين ويژگي از تصاوير كوچك مثلاً 16 * 16 پيكسل استفاده كنيد.

 

بقيه كنترل‌ها را مي‌شناسيد.

تا اينجا چندتا Property و يك Event تعريف كرده‌ايم و با آنها آشنا شده‌ايد. الان فقط تعريف «مِتُد» باقي مانده است كه آن را هم توضيح مي‌دهم.

تعريف متد از تمام موارد بالا ساده‌تر و راحتتر است. براي تعريف متد كافي است كه يك Sub يا يك Function در پروژه تعريف كنيم. به همين راحتي. فقط يك نكته مهم باقي مي‌ماند و آن هم اينكه اگر Sub و يا تابع را با كلمه Public تعريف كنيد، آنوقت آن تابع به يك متد تبديل مي‌شود و كاربر هنگام استفاده از كنترل شما، مي‌تواند از آن به عنوان يك متد استفاده كند، در ضمن شما مي‌توانيد يك يا چند آرگومان براي متد در نظر بگيريد. ولي اگر با كلمه Private تعريف كنيد، آنوقت آن ديگر يك متد نيست، بلكه فقط يك Sub و يا تابع داخلي است كه فقط خودتان مي‌توانيد در همان پروژه استفاده كنيد، مثل همان تابع SetCaptionPos كه قبلاً تعريف كرديم. حالا كلمه Private را در ابتداي آن تابع به Public تبديل كنيد و فايل OCX را بسازيد و نتيجه را ببينيد؛ بله! تابع SetCaptionPos به يك متد تبديل شده است. (يادتان نرود Public را به حالت اولش برگردانيد.)

 

يك مطلب ديگر؛ مي‌خواهيم براي كنترل، فوكوس طراحي كنيم. برنامه‌نويسي اين بخش را به شما واگذار مي‌كنم و فقط شما را راهنمايي مي‌كنم. نگران نباشيد كار بسيار راحتي است.

ابتدا يك Shape روي UserControl بگذاريد. ويژگي BorderStyle آن را روي 3-Dot تنظيم كنيد و Visible آن را False كنيد. برايش نام مناسبي تعيين كنيد. به رويداد Resize از UserControl برويد. در اينجا دستوراتي بنويسيد كه هنگامي كه UserControl تغيير اندازه مي‌كند، Shape هم متناسب با آن تغيير كند. دقيقاً مثل فوكوس CommandButton. حالا به رويداد GotFocus از UserControl برويد و در آنجا بنويسيد: Shape1.Visible = True (البته اگر نام Shape شما Shape1 باشد.) و در رويداد LostFocus از UserControl هم بنويسيد: Shape1.Visible = False. خودتان فهميديد كه چكار كرديم...

 

در مقاله بعد، در مورد كار با فايل‌هاي Resource خواهم نوشت. منتظر باشيد، نظراتتان را هم بگوييد.

 

ضمناً اگر كسي از دوستان سايتي سراغ دارد كه فضاي مجاني مي‌دهد، لطفاً به من هم بگويد، مي‌خواهم در وبلاگ، تصاوير و همچنين چند تا برنامه نمونه براي هر مبحث بگذارم.

2 نوشته شده در  یکشنبه 11 اردیبهشت1384ساعت 15:44  توسط موسي مرادي 


آموزش ساخت ActiveX Control- قسمت دوم

سلام خدمت دوستان. در ابتدا از دوستان، امير حسين حسنيني و آقا كامران و آقا مهران واقعاً به خاطر لطفي كه نسبت به ما داشتند، تشكر مي‌كنم.

 

در مورد سؤال آقا مهران هم، راستشو بخواين تا حالا امتحان نكرده‌ام و بلد نيستم! اگه برات مقدور بود و حجمش كم بود، برام بفرست شايد بتونم!

 

در ادامه قسمت قبل، مي‌خواهيم چند Property به كنترل اضافه كنيم. اگر يادتان باشد، رنگ دكمه ما در حالت عادي سبز و در حالت فشرده، قرمز بود، حالا مي‌خواهيم رنگ در حالت فشرده شدن را از كاربر بگيريم. پس یک Property تعريف مي‌كنيم و از طريق آن, رنگ مورد نظر را به دست مي‌آوريم. ويزارد رابط كنترل ActiveX را اجرا كنيد. اين دفعه يك راه سريعتر براي آوردن اين ويزارد معرفي مي‌كنم. منوي Add-ins و سپس زيرمنوي Add-in Manager… را باز كنيد. در ليست، مورد VB 6 ActiveX Ctrl Interface Wizard را انتخاب كنيد. در فريم Load Behavior، دو جعبه اولي را علامت بزنيد. OK را كليك كنيد. دوباره به منوي Add-ins برويد. خواهيد ديد كه يك فرمان به موارد قبلي اضافه شده است كه همان VB 6 ActiveX… است. آن را اجرا كنيد. همان ويزارد قبلي است. به صفحه سوم برويد و New… را بزنيد. در كادر Name، نام Property، (مثلاً OnPressedBackColor) را وارد كنيد. OK را بزنيد. به صفحه بعدي برويد. دوباره به صفحه بعدي برويد. OnPressedBackColor را انتخاب كنيد. از قسمت DataType مورد OLE_Color را انتخاب كنيد. در كادر Default Value مقدار 255 را وارد كنيد. اين عدد، رنگ قرمز را مشخص مي‌كند به اين معني كه رنگ پيش‌فرض ما براي اين ويژگي، رنگ قرمز است. در كادر Description مي‌توانيد توضيحي در مورد اين ويژگي بنويسيد. Finish را بزنيد در صورت ظاهر شدن پنجره Summary، Close را بزنيد. پنجره كد را باز كنيد و تغييرات حاصل را ببينيد.

 

به رويداد Mousedown برويد و آن را به اين صورت اصلاح كنيد:

 

Private Sub UserControl_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

UserControl.BackColor = m_OnPressedBackColor

End Sub

 

همانطور كه مي‌بينيد، براي هر Property كه تعريف می‌کنیم، دو تابع وجود دارد، يكي با نام Property Get و ديگري با نام Property Let كه در بعضي موارد تبديل به Property Set مي‌شود. تابع Property Get، ويژگي را مي‌گيرد و آن را در پنجره ويژگي‌ها نمايش مي‌دهد؛ براي موارد ديگر هم استفاده مي‌كند. تابع Property Let نيز ويژگي را از كاربر مي‌گيرد و آن را ذخيره مي‌كند، براي برنامه‌نويسي نيز بايد از اين تابع استفاده كنيم، چون هنگامي كه كاربر، ويژگي‌ها را تغيير مي‌دهد، بايد كارهاي لازم را انجام دهيم؛ مثلاً فرض كنيد يك ويژگي عددي داريم و مي‌خواهيم كاري كنيم كه اگر كاربر اعداد غير مجاز وارد كرد، به او تذكر دهيم، در آن صورت در تابع Property Let در اول، ابتدا با يك شرط، غير مجاز بودن مقدار ورودي را تشخيص مي‌دهيم، سپس در صورت غير مجاز بودن، با MessageBox اخطار مي‌دهيم و سپس با دستور Exit Property از تابع بدون ذخيره كردن مقدار ورودي خارج مي‌شويم.

 

اکنون می‌توانید فایل OCX را دوباره بسازید و استفاده کنید.

 

یک Property دیگر هم اضافه می‌کنیم.

می‌خواهیم برای کنترلمان، خاصیت Caption (عنوان) هم بگذاریم. برای این کار ابتدا یک Lablel روی UserControl بگذارید. نام آن را lblCaption بگذارید و خاصیت AutoSize آن را True کنید. عنوان آن را به MyButton تغییر دهید. می‌خواهیم این Label همیشه در وسط دکمه باشد، برای این کار یک Sub تعریف می‌کنیم که موقعیت Label را تنظیم می‌کند سپس آن را از جاهای مختلف صدا می‌زنیم. به انتهای پنجره ویرایش کد بروید و دستورات زیر را در آنجا بنویسید:

 

Private Sub SetCaptionPos ()

lblCaption.Move (UserControl.Width – lblCaption.Width) / 2, (UserControl.Height – lblCaption.Height) / 2

End Sub

 

این تابع را در رویدادهای Initialize و Resize از UserControl و همچنین Change از lblCaption صدا بزنید. (یعنی در این رویدادها بنویسید: Call SetCaptionPos و یا: SetCaptionPos، از افراد حرفه‌ای به خاطر این توضیح معذرت می‌خواهم.)

 

اکنون دوباره ویزارد رابط ActiveX Control را باز کنید. به صفحه دوم بروید و Caption را Add کنید. به صفحه پنجم بروید و Caption را انتخاب کنید و در کادر Default Value عبارت MyButton (به سلیقه خود می‌توانید عبارت دیگری وارد کنید) را وارد کنید و Finish را بزنید. به تابع Property Let Caption بروید و بین دو خط کُدی که وجود دارد، عبارت زیر را وارد کنید:

 

lblCaption.Caption = m_Caption

 

حال Run را بزنيد و آن را امتحان كنيد. اگر دقت كنيد، متوجه مي‌شويد كه دو اشكال بزرگ در كنترل وجود دارد؛ اولي اين كه رنگ زمينه Label با رنگ زمينه UserControl متفاوت است و ديگري هم اينكه در صورتي كه روي Label كليك كنيد، كنترل كار نمي‌كند. اين دو مشكل را با هم رفع مي‌كنيم.

 

براي اينكه رنگ Label با UserControl برابر باشد، دو راه پيش رو داريم، اول اينكه براي آن برنامه بنويسيم و راه دوم (كه خيلي راحتتر است) اين كه خاصيت BackStyle از Label را روي Transparent تنظيم كنيم. راه دوم را انجام دهيد (اگر هم خواستيد راه اول را انجام دهيد، ولي زحمتش با خودتان است)، با اين كار، Label به صورت شفاف درمي‌آيد و پشت آن ديده مي‌شود.

 

براي حل مشكل دوم، روي Label دابل‌كليك كنيد و در رويداد Click از Label كد زير را بنويسيد:

 

UserControl_Click

 

يعني هر موقع كه روي Label كليك شود، تابع UserControl_click اجرا شود، يعني مثل اينكه روي خود UserControl كليك شده است.

و همچنين در رويداد MouseDown از Label عبارت زير را بنويسيد:

 

UserControl_MouseDown 0, 0, 0, 0

 

و در رويداد MouseUp از Label هم عبارت زير را:

 

UserControl_MouseUp 0, 0, 0, 0

 

اعداد صفر را به عنوان آرگومان‌هاي تابع MouseUp و MouseDown وارد مي‌كنيم. اكنون اگر برنامه را اجرا كنيد، متوجه مي‌شويد كه هر دو اشكال رفع شده‌اند.

 

درس امروز هم تمام شد. در ادامه مقاله نيز درباره ActiveX Control صحبت خواهيم كرد، براي اينكه مقدار يادگيري خودتان را ارزيابي كنيد، چند تمرين به شما مي‌گويم:

1)                           يك ويژگي ForeColor براي كنترل بگذاريد و با آن، رنگ Caption كنترل (يا همان رنگ متن Label) را از كاربر بگيريد و اعمال كنيد.

2)                           براي كنترل، يك خاصيت Font بگذاريد و با آن، فونت را از كاربر بگيريد و روي Label اعمال كنيد.

 

در صورتي كه اشكالي داشتيد، در بخش نظرات بگوييد تا در صورت امكان جواب دهم.

تا بعد، خدا يار و نگهدارتان باد.

2 نوشته شده در  جمعه 9 اردیبهشت1384ساعت 15:10  توسط موسي مرادي 


آموزش ساخت ActiveX Control

به عنوان اولين موضوع در اين وبلاگ مي‌خواهيم در مورد ActiveX Control صحبت كنيم. مقداري مقدمه و بعد شروع!

 

شما تا حالا خيلي با كنترل‌هاي موجود در vb كار كرده‌ايد مثل CommandButton، Label، PictureBox و همچنين شايد با كنترل‌هاي خارجي مثل WindowsMwdiaPlayer، Common Dialog Control، Microsoft Windows Common Controls و... كار كرده باشيد،  ولي آيا تا به حال از خودتون پرسيديد كه خود اينها چطور درست مي‌شن؟ شايد فكر كنيد كه براي نوشتن اينها از يك زبان ديگر مثل C و يا چيز ديگري استفاده مي‌شود و همچنين شايد فكر كنين كه ساختن آنها يك كار سختي است.

ولي اين طور نيست، اكثر اين كنترل‌ها را مي‌شود با خود VB ساخت. نحوة ساخت آنها هم دقيقاً مثل اين است كه يك فرم VB طراحي مي‌كنيد و شايد هم راحت‌تر از آن، پس تا پايان اين مقاله با ما همراه باشيد.

 

مي‌خواهيم يك كنترل ساده بسازيم. اين كنترل يك دكمة ساده است كه هنگام فشرده شدن رنگ خود را عوض مي‌كند و پس از رها شدن دكمه ماوس توسط كاربر به رنگ اوليه خود بازمي‌گردد.

پنجره VB را باز كنيد و از پنجره محاوره New Project گزينه ActiveX Control را برگزينيد. يك صفحة خالي، دقيقاً مثل فرم‌هاي VB خواهيد ديد. اين پنجره، همان كنترل ما است. پروژه را ذخيره كنيد.

حتمآ ديده‌ايد كه هنگامي كه يك كنترل را در روي فرم مي‌گذاريد، در پنجرة Properties در سمت چپ پنجره اصلي VB، ويژگي‌هاي آن كنترل ديده مي‌شوند و بعضي از آنها قابل تغيير هستند و بعضي نيستند، همچنين انواع مختلفي دارند، بعضي عددي هستند، بعضي‌ها True – False هستند، بعضي‌ها تصوير قبول مي‌كنند و ... .

ما هم در هنگام طراحي كنترل، بايد تعدادي ويژگي يا Property براي آن تعريف كنيم، مثلاً رنگ زمينه در حالت معمولي، رنگ زمنيه در حالت فشرده شدن و ... . خود VB خيلي از Propertyهاي مورد نياز و ضروري را (مثل Name) به طور پيش‌فرض براي كنترل ما قرار مي‌دهد.

براي ديدن كنترلي كه مي‌سازيد، مي‌توانيد مانند حالت عادي از كليد F5 و يا گزينة Start از منوي Run استفاده كنيد، در اين صورت كنترل در يك پنجره Internet Explorerديده خواهد شد؛ ولي اگر بخواهيد به طور كلي آزمايش كنيد، مثلاً Propertyهاي آن را ببينيد، بايد فايل OCX بسازيد. اكنون اين عمل را بر روي كنترلي كه ساختيم انجام مي‌دهيم:

از منوي File گزينه Make YourContrl.ocx… را انتخاب كنيد. مسير مورد نظر را انتخاب كنيد. (بهتر است يك پوشه جديد ايجاد كنيد و كنترل OCX را در آن ايجاد كنيد.) مي‌توانيد با زدن كليد Options… تنظيمات بيشتري انجام دهيد. نام مورد نظر را انتخاب كرده و OK را بزنيد. كنترل مورد نظر ساخته مي‌شود. اكنون يك vb جديد باز كنيد و از پنجره New Project، Standard EXE را انتخاب كنيد. بر روي يكي از كنترل‌هاي ToolBox راست‌‌كليك كنيد و گزينة Components… را انتخاب كنيد. (مي‌توانيد كليدهاي Ctrl+T را فشار دهيد.) كليد Browse… را بزنيد و مسيري كه در آن كنترل را ساختيد، باز كنيد و كنترل خود را انتخاب كرده و Open كنيد. كنترل شما به ليست اضافه خواهد شد. (احتمالاً با نام Project1). آن را تيك زده و OK كنيد. يك كنترل با عكس يك قلم به كنترل‌هاي موجود اضافه خواهد شد. اين كنترل، همان كنترل ما است. (در صورت Load نشدن كنترل، دوباره به Components… رفته و گزينه‌هاي Project1 ديگر را امتحان كنيد. بعدآً نام آن را عوض خواهيم كرد.)

كنترل جديد را روي فرم بگذاريد، اين كنترل بي‌رنگ و بي‌اسم و بي‌نشان، همان كنترل ما است كه Propertyهايي كه VB به صورت اتوماتيك براي آن گذاشته است در پنجره Properties قابل رؤيت هستند.

اكنون اين پنجره را بسته و به پنجره طراحي كنترل خودمان بازگرديد. برنامه‌نويسي را شروع مي‌كنيم.

مي‌خواهيم دكمه ما در حالت عادي سبز باشد و در حالت فشرده شدن، قرمز شود. روي پنجره كليد F7 را فشار دهيد تا پنجره كد باز شود. رويداد Initialize به طور پيش‌فرض ظاهر خواهد شد. اين رويداد هنگامي اجرا مي‌شود كه كاربر، كنترل ما را در روي فرم خود قرار دهد. در داخل اين Event (رويداد) كد زير را بنويسيد:

UserControl.BackColor = vbGreen

همانطور كه مي‌دانيد، اين كد رنگ زمينه را به رنگ سبز درمي‌آورد. پنجره كد را ببنديد و با زدن كليد F5 برنامه را اجرا كنيد. در صورت ظاهر شدن پنجره محاوره Project1-Project Properties، كليد OK را فشار دهيد. كنترل را به رنگ سبز در IE خواهيد ديد. IE را ببنديد و همچنين دكمه End را نيز بزنيد. در هنگام فشرده شدن نيز بايد رنگ زمينه قرمز شود، پس پنجره كد را باز كنيد و در رويداد MouseDown كد زير را بنويسيد:

UserControl.BackColor = vbRed

هنگام رها كردن دكمة ماوس نيز بايد رنگ مورد نظر، دوباره سبز شود، پس در رويداد MouseUp كد زيرا را بنويسيد:

UserControl.BackColor = vbGreen

برنامه را اجرا كرده و امتحان كنيد.

در صورتي كه فايل OCX را بسازيد و از آن در يك برنامه استفاده كنيد، در ليست رويدادهاي كنترل، رويدادهاي كمي خواهيد ديد و مثلاً رويداد مهم Click را نخواهيد ديد. براي قرار دادن اين كنترل بايد آن را تعريف كنيم. مي‌توانيم اين كار را به طور دستي انجام دهيم ولي يك كار راحت‌تر نيز وجود دارد. از منوي Project گزينة Add UserControl را انتخاب كنيد. آيكن VB ActiveX Control Interface Wizard را انتخاب كرده و Open كنيد. يك ويزارد باز خواهد شد. از اين ويزارد براي تعريف ويژگي‌ها و رويدادها و همچنين متدها به طور اتوماتيك‌وار و بدون نياز به برنامه‌نويسي استفاده مي‌شود. در صورتي كه در طراحي ActiveX حرفه‌اي شويد مي‌توانيد با برنامه‌نويسي ويژگي‌ها و بقيه را تعريف كنيد. كليد Next را فشار دهيد. گزينه‌هاي سمت چپ، موارد تعريف شده در VB هستند و گزينه‌هاي سمت راست، مواردي هستند كه پس از پايان ويزارد در كنترل ما قرار خواهند گرفت. تمام آنها را برگردانيد. (كليد << را فشار دهيد تا كادر سمت راست خالي شود، البته در صورتي كه قبلاً مواردي را تعريف كرده باشيم، فقط آنها در اين ليست خواهند بود. در آن موقع، با آنها كاري نداتشه باشيد). از كادر سمت چپ، Click را پيدا كرده و كليد Add (>) را بزنيد. Click به ليست سمت چپ اضافه خواهد شد. Next را بزنيد. يك ليست خالي ديگر خواهيد ديد. اين صفحه از ويزارد براي تعريف مواردي است كه در صفحه قبلي وجود نداشت. حالا با آن كاري نداريم. Next را بزنيد. در اين صفحه در كادر سمت چپ، مواردي كه انتخاب و يا تعريف كرده‌ايم ديده مي‌شوند. Click را انتخاب كنيد. از منوي پايين‌افتادني Control، گزينه UserControl را انتخاب كنيد. در منوي پايين‌افتادني زير آن نيز گزينه click را انتخاب كنيد. با اين كار ما به VB گفتيم كه هنگامي رويداد Click اجرا مي‌شود كه كاربر روي كنترل ما (UserControl) كليك كند. Next را بزنيد. در اين صفحه تيك View Summary Report را برداريد، و Finish را كليك كنيد. پنجره كد را باز كنيد. تغييراتي خواهيد ديد. اينها همان كدهايي هستند كه ما بايد خودمان مي‌نوشتيم. البته در تعريف رويدادها، اين كدها كم هستند، ولي هنگام تعريف Propertyها خواهيد ديد كه چقدر زيادند. حالا مي‌توانيد فايل OCX را دوباره بسازيد و از آن استفاده كنيد.

براي تغيير نام كنترل و همچنين پروژه، از منوي Project، زيرمنوي Project1 Properties… را انتخاب كنيد. در برگه General در كادر Project Name: نام مورد نظرتان را (مثلاً MyButton) وارد كرده و OK كنيد.

در ادامه مقاله چندين Property و Event به كنترل خودمان اضافه خواهيم كرد.

 

2 نوشته شده در  یکشنبه 4 اردیبهشت1384ساعت 17:47  توسط موسي مرادي 


سلام

هدف بنده از نوشتن اين وبلاگ، آموزش برنامه‌نويسي به زبان VB است البته در زمينه‌هاي ديگري نيز صحبت خواهيم كرد.

فرض ما بر اين است كه شما آشنايي مقدماتي با اين زبان داريد. ضمناً از همين ابتدا اگر پيشنهاد يا نظري داريد، مطرح كنيد. خوشحال مي‌شويم.

در صورتي كه سؤالاتي در مورد برنامه‌نويسي داشتيد، بپرسيد. در حد وسعتم جواب خواهم داد.

با تشكر از همة دوستان
2 نوشته شده در  یکشنبه 4 اردیبهشت1384ساعت 17:29  توسط موسي مرادي