صفحه 2 از 2 نخستنخست 12
نمایش نتایج: از شماره 11 تا 20 , از مجموع 20

موضوع: آموزش ویژوال بیسیک

  1. #11
    عضو سایت
    گاه برای ساختن باید ویران کرد، گاه برای داشتن باید گذشت ، و گاه در اوج تمنا باید نخواست!
    تاریخ عضویت
    Jun 2011
    محل سکونت
    یک خانه
    نوشته ها
    25,040
    تشکر تشکر کرده 
    3,527
    تشکر تشکر شده 
    5,275
    تشکر شده در
    3,184 پست
    حالت من : Akhmoo
    قدرت امتیاز دهی
    4452
    Array

    پیش فرض

    نکاتی درباره پروسیجر ها

    توجه داشته باشيد که در ابتدای تعريف توابع و روالها می توانيم از Private يا Public نيز استفاده کنيم و تمام سطوحی که برای تعريف متغيرها گفته شد (خصوصاً سطح فرم و سطح ماژول) ، در اينجا نيز عيناً کاربرد دارند. (پيش فرض در اينجا هم Private است). به عنوان مثال اگر بخواهيم تابعی به نام Square ايجاد نماييم که هر عددی را دريافت کرد، مربع آن را برگرداند، کافی است چنين بنويسيم (مثلاً به صورت Public در يک ماژول) :
    line
    Public Function Square (I As Integer) As Integer
    Square = I*I
    End Function
    line
    ملاحظه می کنيد که در اينصورت اگر هر جايی از برنامه نام تابع را به همراه يک مقدار عددی Integer به عنوان پارامتر آن ذکر کنيم، مقدار عددی مذکور به متغير I داخل تابع منتقل شده و عمل I*I روی آن انجام می گيرد و از آنجا که گفتيم خرجی توابع نام آنها هستند، خروجی (يعنی مقدار I*I را) را به نام تابع جايگزين کرديم (يعنی Square = I*I) . حال مثلاً اگر در جايی از برنامه دستور b = Square (5) را وارد کنيم، مقدار متغير b برابر 25 خواهد شد.
    توجه داريم که اگر تابع بيش از يک پارامتر ورودی داشت، بايد نام آنها با کاما (,) از هم جدا کنيم که در اينصورت در هنگام فراخوانی بايد به تعداد پارامترها، آرگومان قرار دهيم که به ترتيب در متغير مربوط جايگزين (وارد) می شود. مثلاً اگر بخواهيم تابعی به نام Multiple ايجاد کنيم که حاصلضرب دو پارامتر ورودی اول را با پارامتر ورودی سوم جمع کند و نتيجه را برگرداند، کافی است بنويسيم:
    line
    Private Function Multiple (a, b, c As Integer) As Integer
    Multiple = (a*b) +c
    End Function
    line
    که در اينصورت دستورات زير در محلی از پروژه (که البته دسترسی Private به تابع مذکور داشته باشد)، مقدار 17 را در Text Box به نام txtResult قرار می دهد:
    line
    I = 3
    bs = 5
    g = 2
    txtResult.Text = Multiple (I, bs, g)
    line
    توجه داريم که مقادير استفاده شده به عنوان آرگومانهای تابع بايد با متغيرهای به کار رفته در پارامترهای تعريف تابع از لحاظ نوع داده، يکسان باشند.حال به عنوان مثالی برای روالها فرض کنيد بخواهيم روالی به نام TF ايجاد کنيم که دو عدد را دريافت کند، بررسی کند که اگر اين دو عدد برابر بودند، جوابTrue و همچنين حاصلضرب آن دو را برگرداند. برای اين منظور اگر مثلاً در يک ماژول تعريف کنيم:
    line
    Public Sub TF (x, y As Integer, T as Boolean, M as Integer)
    IF x = y then
    T = True
    Else
    T = False
    End IF
    M = x*y
    End Sub
    line
    می توان در جايی از پروژه، روال مذکور را فراخوانی نمود، فراخوانی روالها توسط دستور Call صورت می گيرد، مثلاً اگر در جايی از پروژه، روال فوق را به صورت زير فراخوانی نماييم:
    line
    a = InputBox (“Please Enter a Number”)
    Call TF (a, 15, s, p)
    line
    در صورتی که متغيرهای a و s و p تعريف شده باشند آرگومان a به پارامتر x از روال، آرگومان 15 به پارامتر y از روال، آرگومان s به پارامتر T از روال و آرگومان p به پارامترM از روال منصوب می شود. دستور InputBox يک جعبه محاوره‌ای برای کاربر نشان می دهد که پيغامی را (در اينجا پيغام Please Enter a Number) شامل می شود و در يک جعبه متن خاص، مقداری را از کاربر مطالبه می کند که پس از وارد کردن توسط کاربر مقدار وارد شده را برمی گرداند (و در اينجا در متغير aجايگزين می کند). حال اگر کاربر مقدار 15 را وارد کند، مقدار متغير s (که بايد Boolean تعريف شده باشد) برابر True و در غير اينصورت مقدار False را شامل می شود و در هر صورت متغير p نيز حاصلضرب a و 15 را در خود شامل می شود.
    تأکيد می کنيم که نوع داده آرگومانها و پارامترهای تعريف لزوماً بايد به ترتيب متناسب باشد که در غير اينصورت VB به ما خطا صادر می کند.
    [دل خوش از آنیم که حج میرویم؟ ..]
    غافل از آنیم که کج میرویم



    [SIGPIC][/SIGPIC]


  2. #12
    عضو سایت
    گاه برای ساختن باید ویران کرد، گاه برای داشتن باید گذشت ، و گاه در اوج تمنا باید نخواست!
    تاریخ عضویت
    Jun 2011
    محل سکونت
    یک خانه
    نوشته ها
    25,040
    تشکر تشکر کرده 
    3,527
    تشکر تشکر شده 
    5,275
    تشکر شده در
    3,184 پست
    حالت من : Akhmoo
    قدرت امتیاز دهی
    4452
    Array

    پیش فرض

    کنترل های Check Box و Option button


    به اطمينان، از زمانی که با ويندوز کار می کنيد، از کنترلهای 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 هر دو کنترل مذکور، حاوی آن عبارتی است که کنار آن کنترل برای معرفی آن به کاربر می آيد.
    image001
    شکل 1
    image002
    شکل 2
    [دل خوش از آنیم که حج میرویم؟ ..]
    غافل از آنیم که کج میرویم



    [SIGPIC][/SIGPIC]


  3. #13
    عضو سایت
    گاه برای ساختن باید ویران کرد، گاه برای داشتن باید گذشت ، و گاه در اوج تمنا باید نخواست!
    تاریخ عضویت
    Jun 2011
    محل سکونت
    یک خانه
    نوشته ها
    25,040
    تشکر تشکر کرده 
    3,527
    تشکر تشکر شده 
    5,275
    تشکر شده در
    3,184 پست
    حالت من : Akhmoo
    قدرت امتیاز دهی
    4452
    Array

    پیش فرض

    مثالی از کنترل های Check Box و Option button


    فرض کنيد بخواهيم فرمی شامل يک Text Box و دو Check Box با عنوانهای Bold و Italic داشته باشيم که اگر Bold، مارک خورده بود، متن داخل Text Box به صورت Bold درآيد و اگر Italic مارک خورده بود به صورت Italicفرم نهايی آن را در شکل 6 می توانيد ببينيد.
    vb15h1
    line
    Private Sub chkBold_Click ()
    IF chkBold.Value = VBchecked Then
    txtDisplay.FontBold = True
    Else
    txtDisplay.FontBold = False
    End IF
    End Sub
    line
    Private Sub chkItalic_Click ()
    IF chkItalic.Value = VBchecked Then
    txtDisplay.FontItalic = True
    Else
    txtDisplay.FontItalic = False
    End IF
    End Sub
    line
    توجه داشته باشيم که هرگاه کاربر بر روی يک Check Box و يا يک Option Button کليک کند و يا بوسيله کليد Tab ، فوکوس را به آن دهد و روی آن کليد Space bar را بزند، رويداد Click از اين دو کنترل روی خواهد داد.
    [دل خوش از آنیم که حج میرویم؟ ..]
    غافل از آنیم که کج میرویم



    [SIGPIC][/SIGPIC]


  4. #14
    عضو سایت
    گاه برای ساختن باید ویران کرد، گاه برای داشتن باید گذشت ، و گاه در اوج تمنا باید نخواست!
    تاریخ عضویت
    Jun 2011
    محل سکونت
    یک خانه
    نوشته ها
    25,040
    تشکر تشکر کرده 
    3,527
    تشکر تشکر شده 
    5,275
    تشکر شده در
    3,184 پست
    حالت من : Akhmoo
    قدرت امتیاز دهی
    4452
    Array

    پیش فرض

    آرایه هایی از کنترل ها


    حتماً يکی از الفاظی که در برنامه نويسی، از آن بهره بسياری برده ايد، آرايه می باشد. آرايه ها معمولاً خانه هايی از حافظه اند که تحت يک نام واحد و با انديس های متفاوت نامگذاری می شوند. در 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 مربوط به عضوی که رويداد بر روی آن صورت گرفته، به عنوان يکی از پارامترهای پروسيجر آن، باز می گردد. برنامه بعد را بنويسيد تا با نحوه کار آرايه کنترلها آشنا شويد
    [دل خوش از آنیم که حج میرویم؟ ..]
    غافل از آنیم که کج میرویم



    [SIGPIC][/SIGPIC]


  5. #15
    عضو سایت
    گاه برای ساختن باید ویران کرد، گاه برای داشتن باید گذشت ، و گاه در اوج تمنا باید نخواست!
    تاریخ عضویت
    Jun 2011
    محل سکونت
    یک خانه
    نوشته ها
    25,040
    تشکر تشکر کرده 
    3,527
    تشکر تشکر شده 
    5,275
    تشکر شده در
    3,184 پست
    حالت من : Akhmoo
    قدرت امتیاز دهی
    4452
    Array

    پیش فرض

    مثال:طراحی یک ماشین حساب سادهچ


    فرض کنيد بخواهيم يک ماشين حساب ساده، مطابق آنچه در شکل 7 می‌بينيد، طراحی کنيم:
    image002
    يک 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) تعريف شده اند و لذا مقدار آن در تمام فرم قابل دسترسی خواهد بود) :
    line
    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

    line
    توجه داريد که:

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



    [SIGPIC][/SIGPIC]


  6. #16
    عضو سایت
    گاه برای ساختن باید ویران کرد، گاه برای داشتن باید گذشت ، و گاه در اوج تمنا باید نخواست!
    تاریخ عضویت
    Jun 2011
    محل سکونت
    یک خانه
    نوشته ها
    25,040
    تشکر تشکر کرده 
    3,527
    تشکر تشکر شده 
    5,275
    تشکر شده در
    3,184 پست
    حالت من : Akhmoo
    قدرت امتیاز دهی
    4452
    Array

    پیش فرض

    مثالی دیگر از کنترل Option button

    همانطور که قبلاً نيز ذکر شد، هرگاه بخواهيم کاربر (User) از بين چند مورد، يک و فقط يک مورد را انتخاب کند (مثلاً سؤال چهار گزينه ای و ...) از کنترل Option Button استفاده می کنيم.
    کنترل مذکور (مانند CheckBoxها) دارای مشخصه ای به نام Value می باشد که اگر مقدار آن برابر True باشد، انتخاب شده و در صورتی که برابر False باشد، انتخاب نشده خواهد بود. بنابراين اگر برروی فرمی مثلاً دو OptionButton قرار دهيم، مسلماً اگر مقدار Value از يکی را True کنيم، به طور خودکار مقدار Value برای ديگری False خواهد شد.زيرا فقط يکی از OptionBotton ها را می توان انتخاب کرد.
    حال اگر بخواهيم OptionButtonها را روی يک فرم به صورت موضوعی دسته بندی کنيم و از هر دسته بتوانيم يکی را انتخاب کنيم، بايد به تعداد دسته ها، کنترل Frame به image001شکل برروی فرم قرار دهيم و آنگاه OpiontButtonها را بر روی Frameها (نه با دابل کليک بلکه با انتخاب کنترل OptionButton و قرار دادن آن بوسيله Drag & Drop روی Frame) قرار می دهيم و سپس می توان Caption مربوط به Frameها (آن چيزی که به عنوان تيتر در بالای هر فريم نوشته می شود) و OptionButtonها (آن چيزی که جلوی هر Option Button برای معرفی آن نوشته می شود) را به دلخواه تغيير داد.
    image003
    يک 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 ساخته ايم).
    حال کدهای زير را در يونيت اين فرم می نويسيم:
    line
    Option Explicit
    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
    line
    توجه داريم که:

    1. روال clicked در برنامه فوق هرگاه فراخوانی شود پيغام مناسب را در lblDisplay نمايش خواهد داد.
    2. رويداد load برای يک فرم بلافاصله پس از load شدن آن فرم روی می دهد. در Event Procedure مربوط به رويداد load از Form1 در برنامه فوق، دستور داده ايم که اولين OptionButton هر فريم (با انديس برابر صفر) را انتخاب شده نمايد.
    3. در رويدادهای Click مربوط به آرايه های optOS و optProcessor دستور داده ايم که مقدار Caption هر OptionButtonای که کليک شده را (توسط مثلاً optOS(Index).Caption ) در متغيرهای os و proc قرار دهد و سپس روال Clicked که برای نمايش بر روی label بود را فراخوانی نمايد.
    [دل خوش از آنیم که حج میرویم؟ ..]
    غافل از آنیم که کج میرویم



    [SIGPIC][/SIGPIC]


  7. #17
    عضو سایت
    گاه برای ساختن باید ویران کرد، گاه برای داشتن باید گذشت ، و گاه در اوج تمنا باید نخواست!
    تاریخ عضویت
    Jun 2011
    محل سکونت
    یک خانه
    نوشته ها
    25,040
    تشکر تشکر کرده 
    3,527
    تشکر تشکر شده 
    5,275
    تشکر شده در
    3,184 پست
    حالت من : Akhmoo
    قدرت امتیاز دهی
    4452
    Array

    پیش فرض

    شبیه سازی عمل Drag & Drop



    فرض كنيد بخواهيم برنامه اي بنويسيم كه ظاهري شبيه آنچه در شكل 9 ميبينيد داشته باشد. و بتوانيم تصوير داخل PictureBox مبداُ (سمت چپ) را بوسيله Drag & Drop به PictureBox مقصد (سمت راست) منتقل كنيم.
    image002
    شکل 9
    ابتدا دو PictureBox (كه كنترل آن در ToolBox به شكل image003مي باشد) را در مكانهاي خود قرار داده و مشخصه Name آنها را picSource و picTarget مي گذاريم. براي نمايش متني كه در پايين شكل 9 مي بينيد نيز مي توانيم از يك Label استفاده كنيم.
    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 (رها) نماييم.

    حال كه با اين رويدادها آشنا شديم، كافيست كدهاي زير را در يونيت اين فرم داشته باشيم:
    line
    Option Explicit
    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
    line
    توجه داشته باشيم كه وقتي رويداد MouseDown براي picSource روي مي دهد، توسط متد Drag از picSource (يعني توسط picSource.Drag) و به همراه پارامتر VbBeginDrag براي آن، عمل Drag آغاز مي شود و در صورتي كه عمل Drop شدن روي picTarget صورت بگيرد (يعني اگر رويداد DragDrop براي آن رخ دهد)، تصوير داخل picSource به داخل picTarget منتقل مي شود (بوسيله دستور picTarget.Picture = picSource.Picture) و سپس تصوير داخل picSource (بوسيله دستور ()picSource.Picture = loadPicture ) حذف مي شود.
    و بالاخره آخرين تذكري كه در اينجا داده مي شود اينكه مشخصه Picture براي PictureBoxها مشخصه پيش فرض (Default) مي باشد و لذا مثلا بجاي pictarget.picture می‌توان از pictarget نيز استفاده كرد.
    [دل خوش از آنیم که حج میرویم؟ ..]
    غافل از آنیم که کج میرویم



    [SIGPIC][/SIGPIC]


  8. #18
    عضو سایت
    گاه برای ساختن باید ویران کرد، گاه برای داشتن باید گذشت ، و گاه در اوج تمنا باید نخواست!
    تاریخ عضویت
    Jun 2011
    محل سکونت
    یک خانه
    نوشته ها
    25,040
    تشکر تشکر کرده 
    3,527
    تشکر تشکر شده 
    5,275
    تشکر شده در
    3,184 پست
    حالت من : Akhmoo
    قدرت امتیاز دهی
    4452
    Array

    پیش فرض

    استفاده از منو در فرم ها


    لابد از اهميت فوق العاده زياد منوها در ويندوز مطلع هستيد. منوها علاوه بر تنوع و زيبايي فرم‌ها، به شلوغ نشدن يك فرم توسط دكمه هاي زياد نيز كمك مي‌كنند.
    براي درست كردن منو براي يك فرم از MenuEditor كه در منوي Tools قرار دارد استفاده مي كنيم. همچنين MenuEditor يك دكمه فوري نيز بر روي ميله ابزار استاندارد VB به شكل image001 دارد كه با كليك بر روي آن نيز پنجره MenuEditor باز مي شود. اين پنجره مانند شكل 10 مي باشد:
    image003
    شکل 10
    در پنجره مذكور كافيست عنوان منوي اول (مثلاMenu1) را در كادر Caption بنويسيم و مانند ساير objectهاي VB به اين منو هم يك نام (مثلاmnuMenu1) در كادر Name وارد كنيم. حال براي وارد كردن نام و عنوان منوي بعدي كافيست كليد Next را بزنيم. اما معمولا منوي بعدي، آيتمي از منوي قبلي خواهد بود. اگركليد image005را بزنيم، منوي جاري به عنوان زير منوي قبلي محسوب خواهد شد. پس از وارد كردن اولين آيتم كافيست بوسيله دكمه Next آيتم هاي بعدي اولين منو را نيز وارد كنيم. اگر يكي از آيتم ها خود شامل زير آيتم هايي بود باز هم مي توان از كليدimage005 سود برد. و بالاخره براي اينكه به سراغ منوي دوم برويم لازم است از كليدimage007به تعدادي استفاده كنيم كه ديگر زيرمنوي يك منوي ديگر نباشد و به همين ترتيب ساير منوها و آيتمها را نيز نامگذاري و عنواندهي ميكنيم و ساختار مورد نظرمان را براي منوها ايجاد ميكنيم.
    لذا اگر منوها را در MenuEditor طوري وارد كنيم كه پنجره پايين MenuEditor مطابق آنچه در شكل 10 ميبينيد، شود، انتظار داريم در هنگام اجرا، فرمی شبيه آنچه در شکل 11 می بينيد، حاصل شود:
    image009
    شکل 11
    توجه داشته باشيد كه در MenuEditor علاوه بر آنچه تابه‌حال گفته شد:
    • دكمه Delete براي پاك كردن يك منو (يا آيتم) استفاده مي شود.
    • دكمه Insert براي افزودن يك منو (يا آيتم) ميان دو منو (يا آيتم) ديگر استفاده مي شود
    • Check Boxهاي Visible و Enable به ترتيب اگر انتخاب نشده شوند، منوي مذكور ديده نمي شود و يا اينكه فقط غيرفعال (و به رنگ خاكستري) خواهد شد.
    • Check Box با عنوان Checked اگر انتخاب شود، باعث خواهد شد تا كنار آن منو (آيتم) يك "چك‌مارك" ديده شود. (معمولا اين مشخصه در Run Time و بر حسب نياز تنظيم مي شود)
    • توسط Shortcut مي توانيم يك ميانبر (Shortcut) براي يكي از آيتم‌ها درست كنيم..
    • توسط Index مي توانيم آرايه اي از منوها را طراحي نماييم ( همانطوری که آرايه ای ازساير کنترلها درست می کرديم، يعنی بايد نام دو يا چند منو را يک نام واحد بگذاريم و Index متفاوت به هريک بدهيم.)
    • و توسط NegotiatePosition مي‌توان نوع چيدن آيتم‌ها (راست چين، چپ چين، وسط چين) را تعيين نمود.
    چند تذكر:
    • براي دستيابي به مشخصه هاي منوها نيز مانند ساير كنترلها از نام آنها و يك نقطه(Dot) و سپس نام مشخصه مورد نظر استفاده مي كنيم. مثلا اگر منويي به نام mnuOpen داشته باشيم و بخواهيم آن را غيرفعال و يا مارك‌دار نماييم به ترتيب از دستورات زير استفاده خواهيم كرد:
    line
    mnuOpen.Enable = False
    mnuOpen.Checked = True
    line
    • مشخصه WindowList در بحث MDI Forms خواهد آمد و از مشخصه HelpContentID نيز تنها زماني كه يك فايل HLP داشته باشيم مي‌توانيم استفاده كنيم.
    • اگر بخواهيم بين دو آيتم از منويي يك خط جداكننده آورده شود (آنچه در ويندوز براي جداكردن بخشهاي مختلف يك منوي خاص معمول است) كافي است بين آن دو آيتم، يك آيتم Insert نماييم، نام آن را يك نام دلخواه (مثلا mnuLine) و عنوان (Caption) آن را يك منفي (كاراكتر "-" يا اصطلاحا Dash) بگذاريم.
    • اگر بخواهيم براي شي خاصی يك PopUpMenu طراحي كنيم (منوهاي بازشونده‌اي كه وقتي بر روي شي كليك راست شود از آن خارج مي‌شود) كافيست يك منو (با آيتمهاي مورد نظر براي آن) را طراحي كنيم (و حتي در صورت نياز Visible آن را False كنيم) و در رويداد MouseDown از آن شي خاص، پس از اينكه شرط كرديم كليد زده شده كليد راست ماوس باشد (با استفاده از شرط برابري پارامتر Button از اين رويداد با مقدار ثابت VbRightButton)، با استفاده از دستور PopUpMenu، نام منوي مورد نظر را فراخواني مي كنيم يعني بايد چنين داشته باشيم:
    line
    Private Sub controlName_MouseDown (Button As Integer,…)
    IF Button = VbRightButton Then
    PopUpMenu mnuMenu1
    End IF
    End Sub
    line
    كه بجاي controlName نام آن كنترلي كه قرار است كاربر روي آن كليك راست نمايد و بجاي mnuMenu1 نام آن منويي كه قرار است به صورت PopUp آورده شود را ذكر مي كنيم.
    [دل خوش از آنیم که حج میرویم؟ ..]
    غافل از آنیم که کج میرویم



    [SIGPIC][/SIGPIC]


  9. #19
    عضو سایت
    گاه برای ساختن باید ویران کرد، گاه برای داشتن باید گذشت ، و گاه در اوج تمنا باید نخواست!
    تاریخ عضویت
    Jun 2011
    محل سکونت
    یک خانه
    نوشته ها
    25,040
    تشکر تشکر کرده 
    3,527
    تشکر تشکر شده 
    5,275
    تشکر شده در
    3,184 پست
    حالت من : Akhmoo
    قدرت امتیاز دهی
    4452
    Array

    پیش فرض

    اضافه کردن Diagog Box به برنامه


    مطمئنا تا بحال در ويندوز از كادرهاي محاورهاي زيادي مثل پنجره هاي 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) نماييم. در اينصورت يك كنترل به شكل image001به ToolBar افزوده خواهد شد كه مي توانيد آن را با دابل كليك بر روي فرم قرار دهيد. توجه داريم كه كنترل مذكور Non-Visual است و لذا نيازي به تنظيم مكان اين كنترل بر روي فرم نداريد.
    كنترل Dialog Box داراي متدهاي زير مي باشد:
    dot ShowColor براي نمايش پنجره محاورهاي تعيين رنگ در زمان فراخواني اين متد.
    dot ShowFont براي نمايش پنجره محاورهاي تعيين فونت در زمان فراخواني اين متد.
    dot ShowHelp براي نمايش پنجره محاورهاي راهنماي ويندوز در زمان فراخواني اين متد.
    dot ShowOpen براي نمايش پنجره محاورهاي باز كردن يك فايل در زمان فراخواني اين متد.
    dot ShowPrinter براي نمايش پنجره محاورهاي تعيين خصوصيات چاپگر در زمان فراخواني اين متد.
    dot ShowSave براي نمايش پنجره محاورهاي ذخيره كردن در يك فايل در زمان فراخواني اين متد.
    line
    Private Sub cmd_Click ( )
    cdb.ShowColor
    lbl.ForeColor = cdb.Color
    End Sub
    line
    يا اگر بخواهيم توسط دکمه‌ای ديگر به نام cmd2، پنجره Open باز شود، و هر فايلی از هر مسيری را که کار بر انتخاب کرد، در lbl نمايش داده شود، می‌نويسيم:
    line
    Private Sub cmd2_Click ( )
    cdb.ShowOpen
    lbl.Caption = cdb.FileName
    End Sub
    line
    [دل خوش از آنیم که حج میرویم؟ ..]
    غافل از آنیم که کج میرویم



    [SIGPIC][/SIGPIC]


  10. #20
    عضو سایت
    گاه برای ساختن باید ویران کرد، گاه برای داشتن باید گذشت ، و گاه در اوج تمنا باید نخواست!
    تاریخ عضویت
    Jun 2011
    محل سکونت
    یک خانه
    نوشته ها
    25,040
    تشکر تشکر کرده 
    3,527
    تشکر تشکر شده 
    5,275
    تشکر شده در
    3,184 پست
    حالت من : Akhmoo
    قدرت امتیاز دهی
    4452
    Array

    پیش فرض

    توابع msg box و Input Box



    از تابع MsgBox برای ارسال يک پيغام به کاربر و يا مطرح نمودن يک پرسش و دريافت جواب مثبت يا منفی او به سؤال مطرح شده و از تابع InputBox برای دريافت يک عبارت از کاربر، استفاده می‌شود.
    توابع مذکور را می‌توان مانند دستور نوشت، يعنی نام يکی از آن دو را و با يک فاصله پارامترهای احتمالی آنها را نوشت. همچنين می‌توان آنها را مانند يک Function به VB معرفی کرد. (يعنی اين توابع دارای مقدار بازگشتی باشند)که برای اين منظور بايد پارامترهای آنها را داخل پرانتز نوشت.
    پنج پارامتر اول Input Box به ترتيب عبارتند از:
    Prompt: که يک عبارت رشته ای را (و يا يک متغير رشته ای (String) را) بجای آن می‌نويسيم که اين عبارت همان پيغامی خواهد بود که در اجرای InputBox به کاربر نشان داده خواهد شد (مثلاً پيغام اينکه او بايد چه چيزی را وارد کند).
    Title: که عنوان InputBox در TitleBarآن خواهد بود (به صورت عبارت رشته‌ای).
    Default: که مقدار پيش فرض برای آن چيزی است که کاربر قرار است وارد نمايد.
    XPos و YPos: که طول و عرض گوشه بالا و سمت چپ InputBox را در هنگام اجرای آن مشخص می‌کند.
    که می توان هريک از آنها را مقداردهی نکرد و در اينصورت مقادير پيش فرض VB برای آنها در نظر گرفته خواهد شد.
    به عنوان مثال اگر دستورات:
    line
    Dim s As String
    s = InputBox (“Please enter your name” , “Title” , “Alireza”)
    line
    را در برنامه داشته باشيم در زمان اجرای اين دستورات شکل 12 را مشاهده خواهيم کرد:
    image002
    شکل 12
    مشاهده می کنيد که بطور پيش فرض مقدار “Alireza”در کادر مربوط قرار گرفته است که کاربر می تواند آن را تغيير دهد. در هر حال پس از تأييد اين کادر توسط کاربر، آنچه در کادر مذکور باشد به عنوان نتيجه در متغير رشته ای s ذخيره می شود و می‌توان از آن در ادامه استفاده نمود.
    اما سه پارامتر اول MsgBox نيز به قرار زيراند:
    dotPrompt: که پيغامی است که در Message Box زمان اجرا به کاربر نمايش داده خواهد شد.
    dotButton: که می توان دکمه های مورد نظر و علامت موردنظر برای Message Box را در آن تعيين نمود. برخی از مقادير مهمی که می توان در اين پارامتر قرار داد عبارتند از:

    1. VBOKOnly : کادر مذکور فقط دارای دکمه OK خواهد بود.
    2. VBOKCancel: کادر مذکور دارای دکمه های OK و Cancel خواهد بود.
    3. VBYesNo: کادر مذکور دارای دکمه های Yes و No خواهد بود.
    4. VBYesNoCancel: کادر مذکور دارای دکمه های Yes و No و Cancel خواهد بود.
    5. VBAbortRetryIgnore: کادر مذکور دارای دکمه های Abort و Retry و Ignore خواهد بود.
    6. VBRetryCancel: کادر مذکور دارای دکمه های Retry و Cancel خواهد بود.
    7. VBMsgBoxRight: در کادر مذکور Title را راست چين می‌کند.
    8. VBMsgBoxRtlReading: کادر مذکور را راست به چپ (Right to Left) می‌کند (و برای پيغام های فارسی مناسب است)
    9. VBCritical: يکعلامت image004 در کنار کادر اضافه خواهد شد.
    10. VBExclamation: يکعلامت image006 در کنار کادر اضافه خواهد شد.
    11. VBInformation: يکعلامتimage008در کنار کادر اضافه خواهد شد.
    12. VBQuestion: يکعلامت image010 در کنار کادر اضافه خواهد شد.

    image008نکته: می توان آنهايی را که با هم تداخلی ندارند با علامت + با هم ترکيب کرد. مثلاً اگر بخواهيم که هم دکمه های OKو Cancel بيايند و هم در کنار پيغام، علامت بيايد و هم Title راست چين شود، می توان در اين پارامتر چنين نوشت:
    line
    VBOKCancel + VBInformation + VBMsgBoxRight
    line
    dotTitle: که می توان عبارتی که در TitleBar اين کادر می آيد را مشخص نمود.
    به عنوان مثال اگر دستورات:
    line
    Dim Result As VbMsgBoxResult
    Result = MsgBox (“Are you sure you want to exit?”,vbQuestion+vbYesNo, “Exit”)
    IF Result = vbYes then Unload Me
    line
    را وارد کنيم، در اينصورت در زمان اجرای اين دستورات ابتدا شکل 13 به کاربر نمايش داده خواهد شد و در صورتی که کاربر به پيغام داده شده پاسخ Yes دهد، فرم فعال (که در VB با Me نمايش داده می شود)، Unload خواهد شد:
    image012
    شکل 13
    توجه داريم که نتيجه تابع MsgBox از نوع داده vbMsgBoxResult می باشد و لذا ما در بالا متغير Result را از اين نوع داده تعريف کرديم. اين نوع داده می تواند يکی از مقادير vbAbort، vbCancel، vbIgnore، vbNo، vbOK، vbRetry و vbYes باشد.
    [دل خوش از آنیم که حج میرویم؟ ..]
    غافل از آنیم که کج میرویم



    [SIGPIC][/SIGPIC]


صفحه 2 از 2 نخستنخست 12

برچسب ها برای این تاپیک

علاقه مندی ها (بوک مارک ها)

علاقه مندی ها (بوک مارک ها)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست در پست خود ضمیمه کنید
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  

http://www.worldup.ir/