برگزیده های پرشین تولز

نمونه برنامه های VB6 -آموزش از روی مثال

شايان

مدیران قدیمی
تاریخ عضویت
2 سپتامبر 2003
نوشته‌ها
4,813
لایک‌ها
9
ایول !!! چی شد ... آقا یه کم دیگه همت کنی Word Vista رو ساختی !
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
41
محل سکونت
یه خورده اونورتر
به نقل از شايان :
ایول !!! چی شد ... آقا یه کم دیگه همت کنی Word Vista رو ساختی !
مرسی،
51.gif

ببینم دیگه چی میتونم بزنم تنگش!
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
41
محل سکونت
یه خورده اونورتر
ها خوب بید، در برنامه بعدی....
اگر چیز دیگه ای هم به ذهنت رسید بگو مثلا غلط گیر! دیگه چاپ PDF!
لول!
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
شمارنده خط و محل مكان نما
نمايش خروف خارج از محدوده
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
41
محل سکونت
یه خورده اونورتر
:wacko: :wacko: :wacko: بچه ها میگم یهویی بگین ویندوز بنویسم دیگه! آخه یه نفره؟ باشه، اینا هم اضافه میکنم.

راستی سعید:
به نقل از saeedsmk :
نمايش خروف خارج از محدوده
منظورت چیه؟ چه محدوده ای؟
 

isis

کاربر تازه وارد
تاریخ عضویت
13 ژانویه 2006
نوشته‌ها
10
لایک‌ها
0
محل سکونت
آمل ایران
مرسی بلا بلا جان دستت درد نکنه
فروم رو انگشتای تو می چرخه
خسته نباشی
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
...
آخه یه نفره؟
...
اگر ميخواي خوب كمكت كنم
اما راجب سئوال
ببين بعضي از وقتها شما نياز داريد يك فايل رو كه يكسري ديتا دراه رو اديت كنيد و اين فايل داري يكسري داده است كه شما نياز داريد اين داده را هم ببنيد مثلا كاركتر 0 و با از اين دسته از كاركترها كه بحشون كاركتر هاي خارج از محدوده ميگن چون يا كدشون زير 30 است .
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
41
محل سکونت
یه خورده اونورتر
به نقل از saeedsmk :
...
آخه یه نفره؟
...
اگر ميخواي خوب كمكت كنم
اما راجب سئوال
ببين بعضي از وقتها شما نياز داريد يك فايل رو كه يكسري ديتا دراه رو اديت كنيد و اين فايل داري يكسري داده است كه شما نياز داريد اين داده را هم ببنيد مثلا كاركتر 0 و با از اين دسته از كاركترها كه بحشون كاركتر هاي خارج از محدوده ميگن چون يا كدشون زير 30 است .
چرا که نه؟ شما که خودت استادی، بیا این برنامه هایی که مطرح میکنیم، گسترششون بدیم.

در مورد اون دادها منظورت اینکه اونها رو هم نشون بدیم؟ خب، فکر کنم یه راهی به نظرم رسید، بیام و از کاراکترای جایگزین مثل ورد استفاده کنم. ولی ساده نیست، مخصوصا اینکه ریچ تکست باکسه، و باید با تایپ هر کاراکتر این کنترل انجام بشه.
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
41
محل سکونت
یه خورده اونورتر
به نقل از isis :
مرسی بلا بلا جان دستت درد نکنه
فروم رو انگشتای تو می چرخه
خسته نباشی
شما لطف داری،
اینجا اساتید وی بیی خیلی بهتر از من مثل سعید آقا و پرهام جان و خیلیای دیگه هم وجود دارن.
اگر من همین یه تاپیک رو زدم، اونها به کلیه سوالای ویبی بچه ها جواب میدن...:)
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
41
محل سکونت
یه خورده اونورتر
من همینجا دعوت میکنم از بقیه بچه ها که اگر خواستن در کد نویسی کمک بکنن،
با من هماهنگ بکنند که کدوم قسمت رو مینویسن بعد با اسم خودشون و با توضیح لازم، اون قسمت از برنامه رو که اضافه کردن تو همین تاپیک پست بزنن و شرح بدن و ورژن رو یه شماره ببرن بالاتر یا اینکه کد رو به من بدن که سر فرصت پستش کنم. :)

فقط اگر خودشون پست کردند، آیکن
icon1.gif
و عنوان مناسب و بالا بردن شماره ورژن (مینور البته) فراموش نشه.

تشکر :)
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
Learning VB6 from Examples!

PersianTools Forum Topic:
http://forum.persiantools.com/showthread.php?t=31711

This tutorial was written by Saeedsmk .
This is the continuation of last days training by balabala​
خوب توي اين قسمت ميخواهيم توانايي جستجو را به برنامه مون اضافه كنيم
خوب الگوريتم اين جستجو چيزي شبيه خطوط زير است
- گرفتن اطلاعات از كاربر يعني عبارت جستجو شونده
- صدا زدن تابع و يا توابعي كه اين عمل جستجو را انجام ميدهد
- انتخاب قسمت پيدا شده يا نمايش پيدا نشدن عبارت جستجو شده
خوب براي گرفتن اطلاعات از كاربر ما دو گزينه داريم
- استفاده از inputbox
- ايجاد فرم ثانويه
در صورت استفاده از inputbox ما يكسري از توانايي هايمون رو براي طراحي از دست ميدهيم چون اين فرم درخواست آماده است پس بعضي از گزينه ها را مثل checkbox نميتونيم بروي آن ظاهر نماييم
لذا ما از روش دوم استفاده ميكنيم
براي اين كار از منوي project گزينه Add form را انتخاب ميكنيم خواص زير رو به ترتيب برا اين فرم ست ميكنيم :
کد:
   BorderStyle     =   3  'Fixed Dialog
   Caption         =   "Find"
   ClientHeight    =   945
   ClientLeft      =   45
   ClientTop       =   435
   ClientWidth     =   5580
   KeyPreview      =   -1  'True
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   ScaleHeight     =   945
   ScaleWidth      =   5580
   ShowInTaskbar   =   0   'False
   Visible         =   0   'False
خوب حالا يك كامبو باكس به نام txtFind اضافه ميكنيم با اين خصوصيات ( تمامي اشياء زير به فرم جديد اضافه ميشوند)
کد:
      Height          =   315
      Left            =   1440
      TabIndex        =   1
      Top             =   60
      Width           =   3975
خوب سه commandButton درست ميكنيم با اين خصوصيات
اولي به اسم BtnNext با خصوصيات
کد:
      Caption         =   "Find &next"
      Enabled         =   0   'False
      Height          =   375
      Left            =   1440
      TabIndex        =   4
      Top             =   480
      Width           =   1215
و بعدي به نام BtnCancel با خصوصيات
کد:
     Caption         =   "&Cancel"
      Height          =   375
      Left            =   2760
      TabIndex        =   3
      Top             =   480
      Width           =   1215
و بعدي به نام BtnFind با خصوصيات
کد:
      Caption         =   "&Find"
      Height          =   375
      Left            =   120
      TabIndex        =   2
      Top             =   480
      Width           =   1215
و همچنين يك CheckBox با نام ChkCase و خصوصيات
کد:
     Caption         =   "Case &match"
      Height          =   255
      Left            =   4200
      TabIndex        =   5
      Top             =   480
      Width           =   1815
و يك Label با نام Label1 و خصوصيات
کد:
      Caption         =   "Find What:"
      Height          =   255
      Left            =   120
      TabIndex        =   0
      Top             =   120
      Width           =   1095
خوب frmfind ما كامل شد و تمامي اشيا مورد نظرمون بهش اضافه شد.خوب حالا با زدن دكمه save از نوار ابزار استاندارد اين فرم رو ذخيره ميكنيم .
1.jpg
خوب فرم ما همچين شكلي ميشود

2.jpg

خوب ما براي ارتباط متغيير ها مورد مصرف در يك فرم به فرم ديگر احتياج به يك مكان عمومي داريم براي اين كار از Module استفاده مي كنيم . از منوي Project گزينه Add Module را ميزنيم و به نام My_func و آن را ذخيره ميكنيم

3.jpg
براي ذخيره نمودن روي My_Fun در پنجره Project Explorer كليك راست كرده و گزينه save را انتخاب ميكنيم و بعد ان را با نام My_Func.Bas ذخيره منماييم

4.jpg

تا اينجا ما يك فرم جديد ساختيم كه يك شيء edit داره و چند دكمه كه هر كدوم براي كاري در نظر گرفته شده اند

نكته :به هر شيء كه ما توش توانايي تايپ داشته باشيم شئ edit گفته ميشه

در فرم frmNotes:

يك منو با نام mnuFind و "Caption = "&Find را در منوي edit بعد از منوي paste توليد ميكنيم

5.jpg
همچنين روي tbrStandard توي فرم frmnotes كليك راست كرده و گزينه properties را ميزنيم و در تب بار buttons بعد از دكمه paste يك دكمه جديد به نام Find قرار مي دهيم

6.jpg
براي اينكه ايكن آن را ست كنيم بايد ابتدا گزينه هاي كه imagelist در ارتباط هستند را از اين ليست جدا كرده و بعد ايكن مورد نظر را به ان اضافه كنيم و دوباره اشيائ مربوط را ه ان وصل كرده و سپس مقدار دهيم كنيم .
براي جدا سازي بروي tbrStandard كليك راست كرده و properties ان را ميگيرم و بعد سه گزينه پشت سرهم Imagelist ، disbleImagelist و HotImageList را به None تغيير داده و همين عمليات را بروي tbrFont انجام ميدهيم

7.jpg
بعد عكس مورد نظر را به Imagelist اضافه ميكنيم يعني find.ico و دوباره ارتباط ها را فعال مينماييم و مقادير را براي دكمه هاي اشياء
tbrStandard و tbrFont ست منماييم
روي همين بار دبل كليك كرده و درون كد هاش عبارت زير را بعد كد مربوط به دكمه paste اضافه ميكنيم
کد:
....
Case 7 'paste
mnuPaste_Click
Case 8 'Find
mnuFind_Click
End Select
خوب حالا روي منو ها فرم frmNotes رفته و گزينه find را انتخاب ميكنيم و كد زير را بهش اضافه ميكينم
کد:
    'show frmfind
    frmFind.Show
حالا اگر برنامه را اجرا كنيم و ازمنوي edit گزينه find را انتخاب كنيم بزنيم و حالا فرم اول يعني frmNotes را بنديم هنوز برنامه فعال مي ماند .چون هنوز يه فرم ما فعال است
براي رفع اين مشكل كد Form_Unloadفرم frmfind را به اين كد تغيير ميدهيم
کد:
Private Sub Form_Unload(Cancel As Integer)
If TextStatus And TextChanged Then
Dim res As VbMsgBoxResult
res = MsgBox("Text has changed, Do you want to save changes?", vbYesNoCancel + vbExclamation)
If res = vbCancel Then Cancel = True
If res = vbYes Then mnuSave_Click
End If
' exit program and all forms
End
End Sub
خوب در بيشتر موارد ما احتياج داريم كه كدي در ابتدا برنامه اجرا بشه و يك سري متغير هاي اوليه را مقدار دهي كنه
براي اين كار پيشنهاد من به شما توليد يك زير برنامه است كه اين كار را انجام ميده و هنگامي كه اولين فورم صدا زده شد ايت زير برنامه صدا زده بشه
براي اين كار روي جاي خالي از frmnotes دبل كليك ميكنيم و توي combo box زير برنامه ها گزينه load را انتخاب ميكنيم

8.jpg
حالا اسم تابعي كه ميخوايم صدا بزنيم رو به كدش اضافه ميكنيم زيربرنامه مون ميشه
کد:
Private Sub Form_Load()
    ' call this sub for set inital value
    Initial
End Sub

اين زير برنامه بايد كجا باشه بهترين جا توي مدل My_funcf به اين صورت
کد:
' this sub use as intial vrible
Sub Initial()
    FindStr ""=
    FindLoc = 0
End Sub

راستي براي پيدا كردن يه عبارت و سرچ دوباره اون ما احتياج داريم محل كنوني گزينه سرچ شده مقدار سرچ شده را داشته باشيم لذا اين دوتا متغيير را در ابتداي مدول My_func تعربف ميكنيم ( زيرا بايد اين مقادير بايد براي هر دو تا فرم قابل رويت باشند بصورت عمومي تعريف شده اند)
کد:
' inital global varible
Public FindStr As String
Public FindLoc As Long

اگر برنامه را اجرا كنيد و فرم frmfind را صدا بزنيد و بعد برنامه اول را ببنديد ميبنيد كه مشكل مطرح شده در بالا حل شد
تا اينجا ما كدهاي لازم جهت سرچ را در فرم frmnotes ايجاد نمودايم

اما كدهاي فرم frmFind

ساده ترين كد كد مربوط به دكمه cancel است با زدن اين دكمه فرم دوم بايد از حالت نمايش خارج بشودپس كد مربوط ان ميشود

کد:
Private Sub BtnCancel_Click()
    ' if cancel button click hide this form
    Me.Hide
End Sub

با تايپ عبارت و بعد زدن دكمه find يا Enter بايد اين عبارت به عبارتهاي قبلي Combo اضافه شود:

کد:
    Dim dumm
    ' check if user enter some thing
    If txtFind = "" Then Exit Sub
    ' add this search to combo box list for next user use
    txtFind.AddItem txtFind.Text

براي اينكه دكمه enter نيز شبيه دكمه find عمل نمايد ميتوانيم از كد ذيل استفاده نماييم

کد:
Private Sub txtFind_KeyUp(KeyCode As Integer, Shift As Integer)
    ' check if user press enter for serached or not
    If KeyCode = 13 Then BtnFind_Click
End Sub

خوب بعد از اضافه شدن اين عبارت به combo حالا بايد تابع صدا زده شود
تابع زير تايع سرچ ميباشد كه تمامي خطوط توضيح داده شده اند

کد:
' this function search Through richtext box we use in main form
' varible use is
' Findstring point to string to find
' start point to location of searched string we want to serch after that
' obj point to reached text that we want to found string in it
' matchBool point to varible that point Sensitivy of match case or not
Function SearchStr(FindString As String, Start As Long, obj As RichTextBox, MatchBool As Boolean) As Long
    Dim dumm, Dummstr As String, DummFind As String
    ' set returned valur to false
    ' so we can exit function if any things is wrong
    SearchStr = False
    ' check variable
    If FindString = "" Then Exit Function
    If obj.Text = "" Then Exit Function
    ' get obj text .so if matchbool is false so we can turend it to ucase
    Dummstr = obj.Text
    ' get search text .so if matchbool is false so we can turend it to ucase
    ' and find all match without Sensitivy
    DummFind = FindString
    ' turn find all or not
    If Not MatchBool Then
        Dummstr = UCase(Dummstr)
        DummFind = UCase(DummFind)
    End If
    ' find string
    dumm = InStr(Start + 1, Dummstr, DummFind)
    ' if returned value is 0 then nothing found and exit sub
    If dumm = 0 Then Exit Function
    ' set returned value to where match start
    SearchStr = dumm
End Function

اين تابع در مدول My_func اضافه ميشود تا همه فرم ها به ان دسترسي داشته باشند.
در صورتي كه عبارت مورد نظر پيدا گرديد محل قرار گيري عبارت از اولين كاركتر توسط تايع برگشت داده ميشود و در صورتي كه عبارت مورد نظر پيدا نشود عبارت false .
در ضمن ورودي هاي ان عبارت است از
عبارت جستجو شونده ( مقدار يا تكست txtfind)
محل شروع جستجو ( هنگامي كه جستجو دوباره انتخاب شود )( براي اوليت سرچ برابر 0 است )
ريچ تكس باكس كه جستجو در تكست ان انجام ميشود( كه همان txtNotes)
و گزينه اي كه حساسيت به كلمه هاي يزرگ و كوچك را مشخص مينمايد ( كه در واقعه مقدار چك باكس match case است )

خوب پس كد دكمه جستجو ميشود
کد:
Private Sub BtnFind_Click()
    Dim dumm
    ' check if user enter some thing
    If txtFind = "" Then Exit Sub
    ' add this search to combo box list for next user use
    txtFind.AddItem txtFind.Text
    ' call to find that string
    dumm = SearchStr(txtFind.Text, 0, frmNotes.txtNotes, ChkCase.Value)
    ' if return is fasle show message
    If dumm = False Then
        ' show message
        MsgBox "Nothing Found.", vbOKOnly, "Search Resualt..."
        ' set last find varible to 0
        FindLoc = 0
        ' disable btnnext button
        BtnNext.Enabled = False
        ' exit this sub
        Exit Sub
    End If
    ' set last find varible to where found txtfind
    FindLoc = dumm
    ' set findstr var for use in next find button
    FindStr = txtFind
    ' select the word find
    frmNotes.txtNotes.SelStart = FindLoc - 1
    frmNotes.txtNotes.SelLength = Len(FindStr)
    ' enable next button
    BtnNext.Enabled = True
    ' set focuse to main form so we can see what select
    frmNotes.SetFocus
End Sub

در اين كد ابتدا چك ميشود كه عبارتي برا يجستجو وارده شده است اگر اين طور است اين مقدار را به ليست Combobox اضافه كن و با مقدار صفر و شئ txtNotes و مقدار جك باكس بفرست .اگر مقدار برگشتي نادرست است پيغام عدم پافت شدن عبارت مربوطه را نشان بده و اخرين محل جستجو رابرابر با 0 و دكمه پيدا كردن بعدي را غير فعال كن ) و گرنه عبارت جستجو شونده و محل ان را ذخيره و اين عبارت را انتخاب كنسپس دكمه ستجو بعدي را فعال كرده و اختيارات را به فرم frmNotes برگدان .
كد دكمه پيدا كردن بعدي هم شبيه اين كد است

کد:
Private Sub BtnNext_Click()
    Dim dumm
    ' check if user change string or not
    If FindStr = "" Then Exit Sub
    ' call to find that string
    dumm = SearchStr(FindStr, FindLoc, frmNotes.txtNotes, ChkCase.Value)
    ' if return is fasle show message
    If dumm = False Then
        ' show message
        MsgBox "No more item Found.", vbOKOnly, "Search Resualt..."
        ' set last find varible to 0
        FindLoc = 0
        ' disable btnnext button
        BtnNext.Enabled = False
        ' exit this sub
        frmNotes.SetFocus
        Exit Sub
    End If
    ' set last find varible to where found txtfind
    FindLoc = dumm
    ' select the word find
    frmNotes.txtNotes.SelStart = FindLoc - 1
    frmNotes.txtNotes.SelLength = Len(FindStr)
    ' set focuse to main form so we can see what select
    frmNotes.SetFocus
End Sub

تنها تفارت آن با كد قبلي چك كردن مقدار سرچ ( يعني قبلا سرچ شده) و محل آغاز سرچ است كه برابر محل قبلي است كه عبارت سرچ شده است در ان پيدا شده بود.
حال اگر برنامه را اجرا نماييم و بعد از سرچ اوليه و قبل از زدن جستجوي بعدي كلمه سرچ شونده را عوض كنيم چون مقدار findStr تغيير نكرده است برنامه با مقادير قبلي سرچ را انجام ميدهد. براي حل اين مشكل از كد زير استفاده ميكنيم

کد:
Private Sub txtFind_Change()
    ' if txtfind changed then findstr set to nothing and disable btnnext button
    ' if we did not do that wen user click btnnext find last serached word not
    ' this is entered
    FindStr = ""
    BtnNext.Enabled = False
End Sub

هنگامي كه دكمه close فرم frmFind را بزنيم و بعد دوباره عمليات سرچ را انجام دهيم مقادير قبلي سرچ خالي شده اند زيرا اين فرم دوباره نمايش داده شده است و تمامي متغييرهاي لوكال ان از اول ست ميشود مثل ليست اعضا combobox لذا ما هنگامي كه برنامه ميخواهد اين فرم را ان لود نمايد فقط فرم را مخفي مينماييم لذا هيچ متغييري دوباره تعريف نميشود :

کد:
Private Sub Form_Unload(Cancel As Integer)
    'hide me
    Me.Hide
    ' set cancle true so we can last search variable
    Cancel = True
End Sub
اين كد را به فرم frmFind اضافه ميكنيم .

تنها موردي كه ديده ميشود اين است اگر بعداز انتخاب شدن گزينه اي توسط فرم سرچ اين فرم را دوباره فعال كنيد عبارت سلكت شده از حالت سكلت شده خارج ميشود براي حل اين مشكل بعد از كليك رست روي txtNotes و بعد انتخاب Properties تيك گزينه HideSelection را برميداريم

9.jpg
خوب سورس كلي و ورد اون رو هم اتچ كردم.
اميدوارم كمك تون بكنه :lol:
 

فایل های ضمیمه

  • Leran0.6.doc
    88.5 KB · نمایش ها: 176
  • MyNotes0.6.zip
    12.5 KB · نمایش ها: 202

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
41
محل سکونت
یه خورده اونورتر
به به! سعید جان دستت درد نکنه. چه کردی. :)

دیگه خودم رو تو این تاپیک تنها نمی بینم.
واقعا عالی بود، امیدوارم با هم و با کمک بقیه دوستان بهترین تاپیک آموزش وی بی رو بسازیم.

ممنون :)
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
منم اميدوارم بقيه دوستان كمك كنند وبتونيم بهترين تاپيك اموزش وي بي را داشته باشيم البته به زبان فارسي
 

شايان

مدیران قدیمی
تاریخ عضویت
2 سپتامبر 2003
نوشته‌ها
4,813
لایک‌ها
9
به به به .... ایول ! اقا خیلی خوب شد اینطوری ... بقیه هم اگر کمک کنن دیگه ۱۰۰٪ شک نکنید تو ویستا میبینیم این برنامه رو :D :D

اقا دمتون گرم .
 

darklord

Registered User
تاریخ عضویت
23 آپریل 2005
نوشته‌ها
1,085
لایک‌ها
1
محل سکونت
System32
اساتید گرامی اگه وقت کردم منم یه چیزایی میخوام بهش اضافه میکنم....

حالا یه نگاه به این بندازین

http://www.darklord.persiangig.com/document/VB6-part1-MyNote-[BSD].rar
بلا بلا جان اگه به هر دلیلی نمی خوای ادامه بدم بگو همینم ورش دارم... وگرنه که منم پا به پاتون جلو میام و یه نظمی به مقالات میدم...

البته با اجازه دوستان.

راستی سعید جان این نسخه رو با توضیحات و تصاویر اضافه شده از طرف شما ادیت و مجددا آپ میکنم .(البته بازم اگه مشکلی نداره...)



ادیت : قسمتهای آموزش سعید هم اضافه شد.
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
41
محل سکونت
یه خورده اونورتر
عالیه دارک لودر جان! چه جالب یه کتاب کامل شده! :lol:

گذشته از یکمی اشتباه تایپی، مثلا برنامه دفترچه یادداشته، نه ماشین حساب که توی عنوان اومده. منتها عالیه، اگر اسم سعید و بقیه هم اگر اومدن و خودت رو هم اضافه کنی یه چیز تکمیلی هست.
و البته ادرس این فاروم و این بحث رو هم حتما بگذار. و آدرس پروفایل هرسه مون رو.

دستت درد نکنه. اون زنگ تفریح هاش هم خیلی جالبن. :lol:

اصلا شاید در انتها دادیمش چاپش کردن، نه؟ حسابی پولدار وشیم. :cool:

ممنون؛ این کارت رو ادامه بده، عالیه، منتظر سورس تو هم هستیم. :)
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
به نقل از darklord :
...
راستی سعید جان این نسخه رو با توضیحات و تصاویر اضافه شده از طرف شما ادیت و مجددا آپ میکنم .(البته بازم اگه مشکلی نداره...)

خواهش ميكنم مشكلي نيست تازه خوشحالم ميشم و ممنون از زحمتي كه كشيدي

تازه زنگ تفريح هم خيلي با حالا تازه من ميگم a تاريك تره نه ؟
چنتا اشكال داره مثلا ما دفترچه ياداشت رو داريم توسعه ميديم نه دفترچه تلفن نه ؟
اين اشكالاش بر طرف بشه توپ توپه

به نقل از balabala :
اصلا شاید در انتها دادیمش چاپش کردن، نه؟ حسابی پولدار وشیم.

شايد نه حتما:D
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4

Learning VB6 from Examples!

PersianTools Forum Topic:
http://forum.persiantools.com/showthread.php?t=31711

This tutorial was written by Saeedsmk .
This is the continuation of last days training by balabala
در مبحث قبلي توانايي جستجو را به mynotes اضافه كرديم .
اما كد قبلي مشكلي داشت
- هنگامي كه فرم mynotes بصورت بزرگ نما Maximized باشد و شما عبارتي را جستجو كنيد بعد از زدن دكمه Find ( يا Find Next در صورت فعال بودن ) و يافتن عبارت مورد نظر بعلت كد frmNotes.SetFocus فرم frmNotesفعال شده بروي فرم frmFind قرار ميگيرد.
براي حل اين مشكل از فولدر myNotes0.6 يك كپي گرفته و اسم فولدر را به mynotes0.6.1 تغيير ميدهيم
خوب براي اينكه فرم ما بزير فرم هاي ديگر نرود دو راه حل داريم
- يكي استفاده از توابع API
- و ديگري استفاده ار توابع نمايش فرم در وي بي
خوب راه حل اول بسيار پيچيده ميباشد و بيشتر در حالتي استفاده ميشود كه بخواهيم پنجره اي بروي تمامي پنچره هاي ديگر قرار گيرد
اما راه حل دوم استفاده از متد Show است
دستور كلي اين متد بصورت
1.jpg
كه پارامتر Modal دو حالت دارد يكي
1 يا VBModal در حالتي استفاده ميشود كه پنجره نمايش داده شده بايد توسط كاربر از حالت فعال بودن خارج شود( درست مانند هنگامي كه صفحه خطايي نمايش داده ميشود و تا زماني كه شما دكمه تاييد را فشار ندهيد ديگر پنجره هاي برنامه فعال نميشوند)
0 يا VBModeless يعني اينكه پنجره هاي ديگر برنامه ميتواند فعال شوند در حالي كه اين پنجره نمايش داده ميشود
پارامتر OwnerForm پنجره اي است كه اين دو نحوه نمايش در ان اتفاق مي افتد
يعني اگر فرمي با خاصيت VBModeless نمايش داده شود و مالك ان پنجره x باشد چون اين پنجره مالك آن است فرم نمايش داده شده تا زمان نمايش و يا حذف از درون حافظه بروي ان پنجره نمايش داده ميشود .

خوب با اين توضيحات فكر كنم معلوم شد كه چگونه بايد عمل نماييم
در روي فرم frmNotes وارد منوي Edit شده و از انجا زير منوي Find را كليك ميكنيم تا كد ان نمايش داده شود
اين كد را به به كد زبر تبديل ميكنيم
کد:
Private Sub mnuFind_Click()
    'show frmfind
    frmFind.Show ,vbModeless, frmNotes
End Sub
حال اگر برنامه را اجرا كنيد و بعد مشكل بالا را چك كنيد ميبنيد كه مشكل حل شده است اما هنگامي كه دكمه close را ميزنيم پنجره frmnotes بسته نميشود . با زدن دكمه stop برنامه را متوقف ميكنيم

2.jpg

خوب كمي فكر كنيم چرا برنامه بسته نميگردد. ما فقط يك خط را عوض كرديم چه اتفاقي افتاد ( ما خواص ماليكيت را عوض كرديم چند خط پايين تر توضيح ميدهم)
بگزاريد برنامه را debug يا اشكال زدايي كنيم
اولين مطلب كه بذهن خطور ميكند اين است ايا تابع وارد تابع unload فرم frmNotes ميشود يا خير .خوب روي جاي خالي از فرم frmNotes دبل كليك كرده و اولين خط از كد Form_Unload كليك كرده و دكمه f9 را ميزنيم ما با اين كار يك نقطه توقف مجازي ايجاد كرده ايم .
3.jpg
حال برنامه را اجرا كرده و بعد ميبنديم برنامه متوقف شده و فلشي كنار خط اول كد unload ديده ميشود يعني ما اينجا متوقف شدايم . حال يا با زدن F8 ( يعني اين خط را اجرا كرده و برو سر خط بعد) يا F5 يعني ادامه برنامه را trace يا دنبال ميكنيم . مشكلي ديده نميشود .
4.jpg
حال دوباره برنامه را اجرا و بعد چيزي را جستجو كرده و بعد پنجره جستجو را ميبنديم و بعد روي دكمه close كليك ميكنيم برنامه هيچ عكس العملي انجام نميدهد . چرا ؟ خوب برنامه را stop كرده .
بگذاريد ببنيم ايا اين ربطي به unload شدن فرم frmFind دارد يا نه پس مثل قبل روي اولين خط كد unload اين فرم نقطه توقف ايجاد ميكنيم ( از اين به بعد به ان BP ميگوييم ) و برنامه را اجرا ومثل قبل عمل مينمايم بعد از زدن دكمه close بروي دومين BP متوقف ميشود حال با زدن F8 كد را ادامه ميدهيم تا به خط Cancle=true ميرسم بعد از زدن دكمه F8 برنامه ادامه پيدا ميكند ( با نگاه به دكمه Play ، Pause و Stop ديده ميشود كه دكمه Pause فعال شده يعني برنامه در حال اجرا است )
5.jpg
خوب چرا اين اتفاق ميافتد.
**هنگامي كه پنجره اي مالك پنجره ديگر ميشود يعني در واقع قيم ان است . هنگام خروج ابتدا كد خروج به تماي پنجره هاي وابسطه ( بچه ) فرستاده ميشود ) در صورتي كه در حافظه لود شده باشند) و در صورتي كه تمام اين پنجره هاي بسته شوند پنجره اصلي بسته ميشود.
در اين مورد ما براي اينكه اطلاعات قبلي را داشته باشيم با ست كردن عبارت cancel باعث شديم تا فرم بسته نشود و از انجايي كه قبلا اين پنجره وقتي hide ميشد و برنامه end ميرسيد خود به خود بدون توجه به مقدار cancel برنامه بسته ميشد . اما در حالت كنوني برنامه هيچ گاه به عبارت end نميرسد چون قبل از ان از فرايند بسته شدن خارج مي گردد.
براي حل اين مشكل يه پارامتر عمومي تعريف ميكنيم كه هنگامي كه برنامه فرم را لود ميكند اين عبارت برابر درست شود و هنگام خروج از فرم اصلي برابر false شود.
اسم اين تابع ExitFromChild است. كه اعلان عمومي My_Func و زير FindLoc تعريف ميشود
6.jpg
سپس كد نمايش فرم frmfind را اينگونه تغيير ميدهيم
7.jpg
و تابع خروج فرم frmfind را اينگونه ( چون ما متغيير را براي فهم بهتر خروج يا عدم خروج بصورت معمولي تعريف كرديم ولي مقدار Cancel معكوس ان است از كلمه Not استفاده كرديم)
8.jpg
حال نوبت اين است هنگام خروج از مالك پنجره ها عبارت ExitFromChild برابر با true نماييم براي اين كار از تابع Form_QueryUnload است زيرا هنگام خروج از هر فرمي ابتدا اين تابع صدا زده شده و بعد از ان به پنجره هاي پيغام خروج با عبارت endProccess فرستاده ميشود( دقيقا همان موضوع بحث شده در بالا **). خوب ما كد اين زير برنامه را به كد زير تغيير ميدهيم .
9.jpg
حال اگر برنامه را اجرا كنيد . مشكلات حل شده است .
** نكته براي حذف BP از منوي Debug گزينه Clear all Breakpoints را انتخاب ميكنيم
** اگر روي خطي كه بر روي ان BP ست كرديم دوباره F9 بزنيم BP از روي ان خط برداشته ميشود.
سورس و فايل ورد را باشكل ها اپلود كردم
 

فایل های ضمیمه

  • MyNotes0.6.1.zip
    12.8 KB · نمایش ها: 178
  • Leran0.6.1.zip
    28.3 KB · نمایش ها: 174
بالا