خب، همونطور که دوستان خواستن، این برنامه رو پیشرفته ترش می کنیم، اصلا شاید اسمشم عوض کردیم گذاشتیم
Bala Word 2006 ، و دادیمش مایکروسافت ازش توی ویستا استفاده کنه!
توی این قسمت، ما تکست باکس معمولی رو با یه نسخه پیشرفته تر، که امکانات بیشتری داره عوض میکیم. ریچ تکست باکس یکی از کامپونتهایی وی بی 6 هست که امکانات گسترده تری از قبیل آرایش متن و تغییر خصوصیات متن رو داره.
برنامه رو شروع میکنم:
از فولدر برنامه قبلی یه کپی میگیریم به اسم MyNotes 0.5 ، و در وی بی 6 بازش میکنیم.
حالا از منوی Project گزینه Components رو انتخاب میکنیم. حالا از لیست، Microsoft Rich Textbox Control 6.0 رو انتخاب میکنیم.
خوشبختانه اکثر پراپرتی ها و ایونت های تکس باکسی که در برنامه هست با پراپرتی ها و ایونت های یک ریچ تکست باکس هم خونی دارن. پس کد ما از این بابت زیاد تغییر نمیکنه. تکست باکس قدیمی رو از روی فرم انتخاب و پاک میکنم و یک ریچ تکست باکس با همون اسم روی فرم میگذاریم. فقط مطمئن بشید که Left کنترل صفر باشه، چون توی کد تنظیمش نمیکنیم.
حالا یه تولبار دیگه هم میسازیم به اسم tbrFont درست زیر tbrStandard . ولی قبل از اینکه دکمه ای روش بگذاریم:
ما چندتا آیکون جدید داریم که باید به imgListمون اضافه کنیم. به ترتیب:
کد:
Prop.ico
Bld.ico
Itl.ico
Undrln.ico
Lft.ico
Ctr.ico
Rt.ico
خب حالا میتونیم دکمه های جدیدمون رو اضافه کنیم، tbrFont رو انتخاب میکنیم و پراپتی Custom رو انتخاب میکنیم به تب دوم میریم و به ترتیب با دکمه Insert Button اینها رو اضافه میکنیم:
کد:
Index: 1
Caption: Font
Image: 7
Index: 2
Style: 3
Index: 3
Caption: Bold
Style: 1
Image: 8
Index: 4
Caption: Italic
Style: 1
Image: 9
Index: 5
Caption: Underline
Style: 1
Image: 10
Index: 6
Style: 3
Index: 7
Caption: Left
Style: 2
Image: 11
Index: 8
Caption: Center
Style: 2
Image: 12
Index: 9
Caption: Right
Style: 2
Image: 13
خب، این قضیه Style چیه؟ با استایل 3 آشنا هستیم، این همون جدا کننده هست، ولی استایل 1 به ما این قابلیت رو میده که از دکمه بصورت یک Checkbox استفاده کنیم، یعنی دو حالت. استایل 2 به ما این قابلیت رو میده که از دکمه بصورت یک Optionbox استفاده کنیم، یعنی دو حالت برای فقط یک دکمه در آن واحد.
حالا دابل کلیک میکنیم روی تولبار و این کد ها رو مینویسیم:
کد:
Private Sub tbrFont_ButtonClick(ByVal Button As MSComctlLib.Button)
On Local Error Resume Next
Select Case Button.Index
Case 1 'font
cdlgDialog.FontName = txtNotes.SelFontName
cdlgDialog.FontSize = txtNotes.SelFontSize
cdlgDialog.FontBold = txtNotes.SelBold
cdlgDialog.FontItalic = txtNotes.SelItalic
cdlgDialog.FontUnderline = txtNotes.SelUnderline
cdlgDialog.ShowFont
txtNotes.SelFontName = cdlgDialog.FontName
txtNotes.SelFontSize = cdlgDialog.FontSize
txtNotes.SelBold = cdlgDialog.FontBold
txtNotes.SelItalic = cdlgDialog.FontItalic
txtNotes.SelUnderline = cdlgDialog.FontUnderline
Case 2 'separator
'nothing
Case 3 'bold
txtNotes.SelBold = Button.Value
Case 4 'italic
txtNotes.SelItalic = Button.Value
Case 5 'underline
txtNotes.SelUnderline = Button.Value
Case 6 'separator
'nothing
Case 7 'left
txtNotes.SelAlignment = rtfLeft
Case 8 'center
txtNotes.SelAlignment = rtfCenter
Case 9 'right
txtNotes.SelAlignment = rtfRight
End Select
End Sub
این کد خیلی سادست، در کیس 2 ما ابتدا خصوصیات فونت حاضر رو به کامان دیالوگ میدیم و با ShowFont امکان تغییرشون رو میدیم و بعد خصوصیات جدید رو به ریچ تکست باکس برمیگردونیم.
در کیسهای 3 و 4 و 5 ، bold یا italic یا underline بودن متن انتخاب شده رو بنا به مقدار دکمه روی تولبار (true / false ) تغییر میدیم.
در کیسهای 7 و 8 و 9 هم جهت متن رو تغییر میدیم.
حالا برای اینکه تغییرات روی دکمه های تولبار هم انجام بشه، یعنی اگر از یک قسمتی که bold بود به یک قسمت دیگه رفتیم که نبود، و این تغییر روی تولبار هم ظاهر بشه، این کدها رو هم توی ایونت SelChange ریچ تکست باکسمون می نویسیم:
کد:
Private Sub txtNotes_SelChange()
If txtNotes.SelBold Then
tbrFont.Buttons(3).Value = tbrPressed
Else
tbrFont.Buttons(3).Value = tbrUnpressed
End If
If txtNotes.SelItalic Then
tbrFont.Buttons(4).Value = tbrPressed
Else
tbrFont.Buttons(4).Value = tbrUnpressed
End If
If txtNotes.SelUnderline Then
tbrFont.Buttons(5).Value = tbrPressed
Else
tbrFont.Buttons(5).Value = tbrUnpressed
End If
Select Case txtNotes.SelAlignment
Case rtfLeft
tbrFont.Buttons(7).Value = tbrPressed
Case rtfCenter
tbrFont.Buttons(8).Value = tbrPressed
Case rtfRight
tbrFont.Buttons(9).Value = tbrPressed
End Select
End Sub
هر خصوصیت رو با یک شرط یا کیس بررسی میکنیم و تغییرات رو روی دکمه ها هم اعمال میکنیم.
ما یک تولبار به فرم اضافه کردیم، پس محل قرار گیری ریچ تکست باکسمون هم تغییر میکنه بصورت زیر:
کد:
Private Sub Form_Resize()
On Error Resume Next
txtNotes.Width = ScaleWidth
txtNotes.Top = tbrFont.Height + tbrFont.Top
txtNotes.Height = ScaleHeight - tbrFont.Height - tbrFont.Top
End Sub
خوب، ریچ تکست باکس، فرمت خاص خودش رو برای ذخیره متن داره، تا بتونه خصوصیات متن رو هم ذخیره کنه، این فرمت اسمش هست Rich Text Format با پسوند rtf.
روی cdlgDialog در فرم کلیک کنید و Filter رو به این صورت تغییر بدید:
کد:
*rtf (Rich Text Format)|*.rtf
این کنترل توابع آماده و خاص خودش رو برای ذخیره متن داره که کار ما رو خیلی ساده میکنه، ما دو تابع ساخته بودیم که متن معمولی رو ذخیره می کرد، حالا اونها رو هم تغییر میدیم به صورت زیر:
کد:
Sub open_file(strFilename As String)
On Error GoTo errs1
'Dim f As Integer
'Dim tmp As String
'
'f = FreeFile
'Open strFilename For Input As #f
'tmp = Input(LOF(f), #f)
'Close #f
'
'txtNotes.Text = tmp
txtNotes.LoadFile strFilename
TextStatus = NoChange Or TextSaved
lastFilename = strFilename
Exit Sub
errs1:
MsgBox "Error: Can not open file '" & strFilename & "'.", vbExclamation
'Close #f
End Sub
Sub save_file(strFilename As String)
On Error GoTo errs1
'Dim f As Integer
'Dim tmp As String
'
'f = FreeFile
'Open strFilename For Output As #f
'Print #f, txtNotes.Text
'Close #f
txtNotes.SaveFile strFilename
MsgBox "File saved successful.", vbInformation
TextStatus = NoChange Or TextSaved
lastFilename = strFilename
Exit Sub
errs1:
MsgBox "Error: Can not save file '" & strFilename & "'.", vbExclamation
'Close #f
End Sub
همونطور که میبینید، دو تابع آماده LoadFile و SaveFile کاری کرد که اکثر کدهای قدیمی کامنت بخورن و در حقیقت میتونیم اونها رو از کد برنامه پاک کنیم.
اگر چیزی رو از کی برد ننداخته باشم همش همین بود!
موفق باشید!