|
||
|
|||||||
![]() |
|
|
LinkBack | ابزارهای تاپيك | نحوه نمایش |
|
|
#11 (permalink) |
|
برنامه نویس ویژوال بیسیک(مدیر افتخاری)
![]() Junior Member
|
به اطمينان، از زمانی که با ويندوز کار می کنيد، از کنترلهای Check Box و Option Box استفاده بسياری بردهايد.اگر بخواهيم به کاربر (User) اين امکان را بدهيم که از بين چند گزينه، يک ، دو يا چند مورد را انتخاب کند و يا حتی هيچ يک را انتخاب نکند از کنترل Check Box به شکل (1)، و اگر بخواهيم کاربر، از ميان چند گزينه، يک و فقط يک گزينه را انتخاب کند، از کنترل Option Button (کليدهای راديويی) به شکل (2)، اين دو کنترل VCL، مشخصه ای به نام Value دارندکه از صفر يا يک بودن مقدار آن، می توانيم به انتخاب نشده بودن و انتخاب شده بودن آن گزينه خاص، پی ببريم. لذا اگر برروی يک فرم چند Check Box وجود داشت، می تواند Value هر يک از آنها صفر يا يک باشد، اما اگر برروی فرمی، چند Option Button وجود داشت، تنها يکی از آنها می تواند Value برابر يک داشته باشد و وقتی کاربر، يکی ديگر را انتخاب می کند، به طور خودکار، Value قبلی صفر و Value کنترل انتخاب شده، يک می شود. VB دارای دو ثابت (Constant) به نامهای VBChecked و VBUnchecked می باشد که به ترتيب برابر يک و صفر می باشند که می توانيم مقدار Value کنترلهای ذکر شده را با اين ثوابت مقايسه کنيم. کنترل Check Box ، علاوه بر دو مقدار صفر و يک برای مشخصه Value ، مقدار برابر 2 نيز برای آن دارد که اگر به آن Set شود، اين کنترل، خاکستری رنگ (Gray) می شود که معمولاً در ويندوز نشان از پيش فرض بودن دارد. همچنين کنترل مذکور، مشخصه ای هم به نام Style دارد که اگر مقدار آن را از صفر به يک تغيير دهيم، شکل Check Box به شکل دکمه ای در می آيد که يک بودن مقدار Value، باعث فشرده شدن کليد و صفر بودن آن باعث بالا بودن کليد میشود. نکته آخری که در اينجا متذکر می شوم اينست که طبق قراری که از ابتدا گذاشته بوديم، سه حرف اول مشخصه Name کنترلها بهتر است متناسب با کنترل بگذاريم. برای Check Boxها، نام را با chk و برای Option Buttonها، نام را با opt آغاز می کنيم و ادامه نامشان را معمولاً با Caption آنها کامل می کنيم. لازم به ذکر است که مشخصه Caption هر دو کنترل مذکور، حاوی آن عبارتی است که کنار آن کنترل برای معرفی آن به کاربر می آيد. شکل 1 شکل 2 |
|
|
|
| کاربرانی که از farzad تشکر کرده اند: | rahimonline (07-20-2008) |
|
|
#12 (permalink) |
|
برنامه نویس ویژوال بیسیک(مدیر افتخاری)
![]() Junior Member
|
فرض کنيد بخواهيم فرمی شامل يک Text Box و دو Check Box با عنوانهای Bold و Italic داشته باشيم که اگر Bold، مارک خورده بود، متن داخل Text Box به صورت Bold درآيد و اگر Italic مارک خورده بود به صورت Italicفرم نهايی آن را در شکل 6 می توانيد ببينيد.
![]() ![]() Private Sub chkBold_Click () IF chkBold.Value = VBchecked Then txtDisplay.FontBold = True Else txtDisplay.FontBold = False End IF End Sub ![]() Private Sub chkItalic_Click () IF chkItalic.Value = VBchecked Then txtDisplay.FontItalic = True Else txtDisplay.FontItalic = False End IF End Sub ![]() |
|
|
|
| کاربرانی که از farzad تشکر کرده اند: | rahimonline (07-20-2008) |
|
|
#13 (permalink) |
|
برنامه نویس ویژوال بیسیک(مدیر افتخاری)
![]() Junior Member
|
حتماً يکی از الفاظی که در برنامه نويسی، از آن بهره بسياری برده ايد، آرايه می باشد. آرايه ها معمولاً خانه هايی از حافظه اند که تحت يک نام واحد و با انديس های متفاوت نامگذاری می شوند. در 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 مربوط به عضوی که رويداد بر روی آن صورت گرفته، به عنوان يکی از پارامترهای پروسيجر آن، باز می گردد. برنامه بعد را بنويسيد تا با نحوه کار آرايه کنترلها آشنا شويد. |
|
|
|
| کاربرانی که از farzad تشکر کرده اند: | rahimonline (07-20-2008) |
|
|
#14 (permalink) |
|
برنامه نویس ویژوال بیسیک(مدیر افتخاری)
![]() Junior Member
|
فرض کنيد بخواهيم يک ماشين حساب ساده، مطابق آنچه در شکل 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) تعريف شده اند و لذا مقدار آن در تمام فرم قابل دسترسی خواهد بود) : ![]() 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 ![]()
|
|
|
|
| کاربرانی که از farzad تشکر کرده اند: | rahimonline (07-20-2008) |
|
|
#15 (permalink) |
|
برنامه نویس ویژوال بیسیک(مدیر افتخاری)
![]() Junior Member
|
همانطور که قبلاً نيز ذکر شد، هرگاه بخواهيم کاربر (User) از بين چند مورد، يک و فقط يک مورد را انتخاب کند (مثلاً سؤال چهار گزينه ای و ...) از کنترل Option Button استفاده می کنيم. کنترل مذکور (مانند CheckBoxها) دارای مشخصه ای به نام Value می باشد که اگر مقدار آن برابر True باشد، انتخاب شده و در صورتی که برابر False باشد، انتخاب نشده خواهد بود. بنابراين اگر برروی فرمی مثلاً دو OptionButton قرار دهيم، مسلماً اگر مقدار Value از يکی را True کنيم، به طور خودکار مقدار Value برای ديگری False خواهد شد.زيرا فقط يکی از OptionBotton ها را می توان انتخاب کرد. حال اگر بخواهيم OptionButtonها را روی يک فرم به صورت موضوعی دسته بندی کنيم و از هر دسته بتوانيم يکی را انتخاب کنيم، بايد به تعداد دسته ها، کنترل Frame به شکل برروی فرم قرار دهيم و آنگاه OpiontButtonها را بر روی Frameها (نه با دابل کليک بلکه با انتخاب کنترل OptionButton و قرار دادن آن بوسيله Drag & Drop روی Frame) قرار می دهيم و سپس می توان Caption مربوط به Frameها (آن چيزی که به عنوان تيتر در بالای هر فريم نوشته می شود) و OptionButtonها (آن چيزی که جلوی هر Option Button برای معرفی آن نوشته می شود) را به دلخواه تغيير داد. يک Label به نام lblDisplay و دو فريم به نامهای fraProcessor و fraOS بر روی صفحه قرار می دهيم. بر روی fraProcessor (و بوسيله انتخاب کنترل و Drag & Drop بر روی فريم) ، سه OptionButton به نامهای واحد optProcessor و با Captionهای Pentium، Pentium II و Pentium III قرار می دهيم. همچنين بر روی fraOS نيز سه OptionButton ديگر به نامهای واحد optOS و با Captionهای Windows98، Windows2000 و WindowsNT قرار می دهيم. (توجه داريم که در اينصورت دو Control Array به نامهای optProcessor و optOS ساخته ايم). حال کدهای زير را در يونيت اين فرم می نويسيم: ![]() Dim proc As string Dim os As string Private Sub Clicked ( ) lblDisplay = “You select” + proc + “and” + os End Sub Private Sub Form1_load ( ) optProcessor(Ø).Value = True optOS(Ø).Value = True End Sub Private Sub optOS_Click (Index As Integer) os = optOS(Index).Caption Call Clicked End Sub Private Sub optProcessor_Click (Index As Integer) proc = optProcessor(Index).Caption Call Clicked End Sub ![]() توجه داريم که:
|
|
|
|
| کاربرانی که از farzad تشکر کرده اند: | rahimonline (07-20-2008) |
|
|
#16 (permalink) |
|
برنامه نویس ویژوال بیسیک(مدیر افتخاری)
![]() Junior Member
|
فرض كنيد بخواهيم برنامه اي بنويسيم كه ظاهري شبيه آنچه در شكل 9 ميبينيد داشته باشد. و بتوانيم تصوير داخل PictureBox مبداُ (سمت چپ) را بوسيله Drag & Drop به PictureBox مقصد (سمت راست) منتقل كنيم. شکل 9 PictureBoxها داراي مشخصه اي به نام Picture هستند كه بوسيله آن ميتوانيم يك تصوير را در آن قرار دهيم. اگر بخواهيم اين مشخصه را در زمان طراحي (Design Time) تنظيم نماييم، كافيست بر روي نام اين مشخصه در پنجره Properties، دابل كليك نماييم، يك پنجره محاوره اي باز مي شود كه مي توانيم تصوير مورد نظرمان را بياوريم و آن را انتخاب كنيم. (پنجرهاي مانند پنجره هاي Open در ويندوز). اما اگر بخواهيم آن را در زمان اجرا (Run Time) تنظيم نماييم، بايد اين مشخصه را برابرتابع loadPicture( ) قرار دهيم كه مسير و نام تصوير مورد نظر به عنوان پارامتر اين تابع قرار ميگيرد. . اگر در پارامتر اين تابع چيزي قرار نگيرد، مشخصه Picture را خالي مي كند يعني PictureBox مورد نظر را (در صورتي كه داراي تصوير بوده) بدون تصوير مي كند. حال مشخصه Picture از picSource را (در زمان طراحي) به تصوير دلخواه مورد نظر خود تغيير دهيد و در واقع يك تصوير را در آن قرار دهيد. شايان ذكر است كه مي توانيد تصاوير فراوان مناسبي را مسير Visual Studio>Common>Graphics دستگاه خود (در داخل مسيري كه برنامه Visual Studio را در آن نصب كرده ايد)، بيابيد. به سراغ برنامه خود برويم، تا اينجا ظاهر (Interface) برنامه را ايجاد كرديد. حال لازم است به كدنويسي براي آن بپردازيم. ولي قبل از آن توضيح در مورد چند رويداد را ضروري مي دانم كه عموما غالب كنترلهاي VCL داراي اين رويدادها مي باشند: رويداد MouseDown : زماني براي يك VCL رخ مي دهد كه دكمه اي از ماوس را روي آن VCL فشار دهيم. رويداد MouseUp : زماني براي يك VCL رخ مي دهد كه دكمه زده شده از ماوس را رها كنيم. رويداد MouseMove : زماني براي يك VCL رخ مي دهد كه نشانگر ماوس را بر روي آن حركت دهيم. رويداد DragOver : زماني براي يك VCL رخ مي دهد كه VCL ديگري كه در حال Drag شدن است را بر روي اين VCL بياوريم. رويداد DragDrop : زماني براي يك VCL رخ مي دهد كه VCL ديگري كه در حال Drag شدن است را بر روي اين VCL، Drop (رها) نماييم. حال كه با اين رويدادها آشنا شديم، كافيست كدهاي زير را در يونيت اين فرم داشته باشيم: ![]() Private Sub picSource_MouseDown (Button As Integer,Shift As Integer,x As Single,y As Single) picSource.Drag vbBegineDrag End Sub Private Sub picTarget_DragDrop (Source As Control) PicTarget .Picture = picSource.Picture picSource.Picture = loadPicture( ) End Sub ![]() و بالاخره آخرين تذكري كه در اينجا داده مي شود اينكه مشخصه Picture براي PictureBoxها مشخصه پيش فرض (Default) مي باشد و لذا مثلا بجاي pictarget.picture میتوان از pictarget نيز استفاده كرد. |
|
|
|
| کاربرانی که از farzad تشکر کرده اند: | rahimonline (07-20-2008) |
|
|
#17 (permalink) |
|
برنامه نویس ویژوال بیسیک(مدیر افتخاری)
![]() Junior Member
|
لابد از اهميت فوق العاده زياد منوها در ويندوز مطلع هستيد. منوها علاوه بر تنوع و زيبايي فرمها، به شلوغ نشدن يك فرم توسط دكمه هاي زياد نيز كمك ميكنند. براي درست كردن منو براي يك فرم از MenuEditor كه در منوي Tools قرار دارد استفاده مي كنيم. همچنين MenuEditor يك دكمه فوري نيز بر روي ميله ابزار استاندارد VB به شكل دارد كه با كليك بر روي آن نيز پنجره MenuEditor باز مي شود. اين پنجره مانند شكل 10 مي باشد: شکل 10 لذا اگر منوها را در MenuEditor طوري وارد كنيم كه پنجره پايين MenuEditor مطابق آنچه در شكل 10 ميبينيد، شود،انتظار داريم در هنگام اجرا، فرمی شبيه آنچه در شکل 11 می بينيد، حاصل شود: شکل 11 • دكمه Delete براي پاك كردن يك منو (يا آيتم) استفاده مي شود. • دكمه Insert براي افزودن يك منو (يا آيتم) ميان دو منو (يا آيتم) ديگر استفاده مي شود چند تذكر:• Check Boxهاي Visible و Enable به ترتيب اگر انتخاب نشده شوند، منوي مذكور ديده نمي شود و يا اينكه فقط غيرفعال (و به رنگ خاكستري) خواهد شد. • Check Box با عنوان Checked اگر انتخاب شود، باعث خواهد شد تا كنار آن منو (آيتم) يك "چكمارك" ديده شود. (معمولا اين مشخصه در Run Time و بر حسب نياز تنظيم مي شود) • توسط Shortcut مي توانيم يك ميانبر (Shortcut) براي يكي از آيتمها درست كنيم.. • توسط Index مي توانيم آرايه اي از منوها را طراحي نماييم ( همانطوری که آرايه ای ازساير کنترلها درست می کرديم، يعنی بايد نام دو يا چند منو را يک نام واحد بگذاريم و Index متفاوت به هريک بدهيم.) • و توسط NegotiatePosition ميتوان نوع چيدن آيتمها (راست چين، چپ چين، وسط چين) را تعيين نمود. • براي دستيابي به مشخصه هاي منوها نيز مانند ساير كنترلها از نام آنها و يك نقطه(Dot) و سپس نام مشخصه مورد نظر استفاده مي كنيم. مثلا اگر منويي به نام mnuOpen داشته باشيم و بخواهيم آن را غيرفعال و يا ماركدار نماييم به ترتيب از دستورات زير استفاده خواهيم كرد: ![]() mnuOpen.Checked = True ![]() • مشخصه WindowList در بحث MDI Forms خواهد آمد و از مشخصه HelpContentID نيز تنها زماني كه يك فايل HLP داشته باشيم ميتوانيم استفاده كنيم. • اگر بخواهيم بين دو آيتم از منويي يك خط جداكننده آورده شود (آنچه در ويندوز براي جداكردن بخشهاي مختلف يك منوي خاص معمول است) كافي است بين آن دو آيتم، يك آيتم Insert نماييم، نام آن را يك نام دلخواه (مثلا mnuLine) و عنوان (Caption) آن را يك منفي (كاراكتر "-" يا اصطلاحا Dash) بگذاريم. • اگر بخواهيم براي شي خاصی يك PopUpMenu طراحي كنيم (منوهاي بازشوندهاي كه وقتي بر روي شي كليك راست شود از آن خارج ميشود) كافيست يك منو (با آيتمهاي مورد نظر براي آن) را طراحي كنيم (و حتي در صورت نياز Visible آن را False كنيم) و در رويداد MouseDown از آن شي خاص، پس از اينكه شرط كرديم كليد زده شده كليد راست ماوس باشد (با استفاده از شرط برابري پارامتر Button از اين رويداد با مقدار ثابت VbRightButton)، با استفاده از دستور PopUpMenu، نام منوي مورد نظر را فراخواني مي كنيم يعني بايد چنين داشته باشيم: ![]() IF Button = VbRightButton Then PopUpMenu mnuMenu1 End IF End Sub ![]() كه بجاي controlName نام آن كنترلي كه قرار است كاربر روي آن كليك راست نمايد و بجاي mnuMenu1 نام آن منويي كه قرار است به صورت PopUp آورده شود را ذكر مي كنيم. |
|
|
|
| کاربرانی که از farzad تشکر کرده اند: | rahimonline (07-20-2008) |
|
|
#18 (permalink) |
|
برنامه نویس ویژوال بیسیک(مدیر افتخاری)
![]() Junior Member
|
مطمئنا تا بحال در ويندوز از كادرهاي محاورهاي زيادي مثل پنجره هاي Open، Save، نمايش خصوصيات چاپگر (Printer)،كادر انتخاب رنگ، كادر انتخاب Font و پنجره Help ويندوز استفاده كرده ايد. در VBبراي نمايش اينگونه پنجرههاي محاورهاي از كنترل DialogBox استفاده ميكنيم. اين كنترل يكي از كنترلهاي Non - Visual ويژوال بيسيك ميباشد. Non-Visual Controls همانطور كه قبلا هم آمده است، انواعي از كنترلها هستند كه فقط در زمان طراحي (Design Time) بر روي فرم ديده ميشوند و در Run Run Time فقط ميتوان از اثر آنها بهره برد. كنترل مذكور بطور پيش فرض در ToolBar وجود ندارد. براي اضافه كردن آن به ToolBar بايد از منوي Project گزينه Components را انتخاب كنيم و در ليست Componentها، گزينه Microsoft Common Dialog Control 6 را چك مارك بزنيم و آن را تاييد (OK) نماييم. در اينصورت يك كنترل به شكل به ToolBar افزوده خواهد شد كه مي توانيد آن را با دابل كليك بر روي فرم قرار دهيد. توجه داريم كه كنترل مذكور Non-Visual است و لذا نيازي به تنظيم مكان اين كنترل بر روي فرم نداريد. كنترل Dialog Box داراي متدهاي زير مي باشد: ShowColor براي نمايش پنجره محاورهاي تعيين رنگ در زمان فراخواني اين متد. ShowFont براي نمايش پنجره محاورهاي تعيين فونت در زمان فراخواني اين متد. ShowHelp براي نمايش پنجره محاورهاي راهنماي ويندوز در زمان فراخواني اين متد. ShowOpen براي نمايش پنجره محاورهاي باز كردن يك فايل در زمان فراخواني اين متد. ShowPrinter براي نمايش پنجره محاورهاي تعيين خصوصيات چاپگر در زمان فراخواني اين متد. ShowSave براي نمايش پنجره محاورهاي ذخيره كردن در يك فايل در زمان فراخواني اين متد. ![]() cdb.ShowColor lbl.ForeColor = cdb.Color End Sub ![]() ![]() cdb.ShowOpen lbl.Caption = cdb.FileName End Sub ![]() |
|
|
|