用VB做一個(gè)記事本實(shí)在不很復(fù)雜,,我們完全可以通過(guò)向?qū)?lái)很方便地做出來(lái),。但本文只打算討論用手動(dòng)方法制作記事本,旨在向VB初學(xué)者展示:學(xué)VB原來(lái)是如此容易,! 通過(guò)閱讀,、研究本文并按本文所述進(jìn)行嘗試,初學(xué)者將學(xué)到很多東西,如怎樣使用RichText控件來(lái)打開(kāi)和保存文件,,怎樣制作菜單,、工具欄和狀態(tài)欄以及如何對(duì)其編寫(xiě)代碼等。
第一章 讓我們的記事本馬上運(yùn)行
急于求成是初學(xué)者共有的心愿,。那好,,請(qǐng)按如下三個(gè)步驟做,我們的愿望立即就可以實(shí)現(xiàn),!
步驟一:繪制界面,。 新建一個(gè)標(biāo)準(zhǔn)EXE工程,將其Caption屬性改為“超級(jí)記事本”,,點(diǎn)擊Icon屬性給它找個(gè)合適的Icon圖標(biāo),。單擊菜單“工程”-“部件”,在彈出的“部件”對(duì)話框里找到Microsoft RichText Box 6.0和公共對(duì)話框Microsoft Common Dialog 6.0并選中它們,,單擊“確定”按鈕,。這時(shí)左邊的工具欄上出現(xiàn)了我們剛才新添的兩個(gè)控件了。在窗體上繪制RichText Box和Commn Dialog,,其中RichText Box的大小和位置可不用理睬,,我們將在代碼中處理它,當(dāng)然,,有必要把它的ScrollBar屬性設(shè)為2-rtfVertical,,這樣在打開(kāi)和編輯文件時(shí)垂直滾動(dòng)條才可用。
步驟二:編輯菜單,。 按Ctrl E調(diào)出菜單編輯器,,我們來(lái)做如下幾個(gè)菜單: 一.文件菜單: 文件(第一層) mnuFile 新建(第二層) mnuNew 打開(kāi)(第二層) mnuOpen 保存(第二層) mnuSave - (第二層) mnuFileSep (分隔線) 退出(第二層) mnuExit 二.編輯菜單: 編輯(第一層) mnuEdit 復(fù)制(第二層) mnuCopy 剪切(第二層) mnuCut 粘貼(第二層) mnuPaste - (第二層) mnuEditSep (分隔線) 全選(第二層) mnuSelecAll 三.搜索菜單: 搜索(第一層) mnuSearch 查找(第二層) mnuFind 查找下一個(gè)(第二層) mnuFindOn 四.幫助菜單: 幫助(第一層) mnuHelp 使用說(shuō)明(第二層) mnuUsage 關(guān)于(第二層) mnuAbout (注:各菜單項(xiàng)的快捷鍵請(qǐng)自行設(shè)置)
好了,其它的菜單項(xiàng)以后再根據(jù)需要添加?,F(xiàn)在進(jìn)入:
步驟三:編寫(xiě)代碼,。
‘聲明查找變量 Dim sFind As String ‘聲明文件類型 Dim FileType, FiType As String
‘初始化程序 Private Sub Form_Load() ‘設(shè)置程序啟動(dòng)時(shí)的大小 Me.Height = 6000 Me.Width = 9000 End Sub
‘設(shè)置編輯框的位置和大小 Private Sub Form_Resize() On Error Resume Next ‘出錯(cuò)處理 RichTextBox1.Top=20 RichTextBox1.Left=20 RichTextBox1.Height = ScaleHeight-40 RichTextBox1.Width = ScaleWidth-40 End Sub
‘新建文件 Private Sub mnuNew_Click() RichTextBox1.Text = "" ‘清空文本框 FileName = "未命名" Me.Caption = FileName End Sub
‘打開(kāi)文件 Private Sub mnuOpen_Click() CommonDialog1.Filter = "文本文檔(*.txt)|*.txt|RTF文檔(*.rtf)|*.rtf|所有文件(*.*)|*.*" CommonDialog1.ShowOpen RichTextBox1.Text = "" ‘清空文本框 FileName = CommonDialog1.FileName RichTextBox1.LoadFile FileName Me.Caption = "超級(jí)記事本:" & FileName End Sub
‘保存文件 Private Sub mnuSave_Click() CommonDialog1.Filter = "文本文檔(*.txt)|*.txt|RTF文檔(*.rtf)|*.rtf|所有文件(*.*)|*.*" CommonDialog1.ShowSave FileType = CommonDialog1.FileTitle FiType = LCase(Right(FileType, 3)) FileName = CommonDialog1.FileName Select Case FiType Case "txt" RichTextBox1.SaveFile FileName, rtfText Case "rtf" RichTextBox1.SaveFile FileName, rtfRTF Case "*.*" RichTextBox1.SaveFile FileName End Select Me.Caption = "超級(jí)記事本:" & FileName End Sub
‘退出 Private Sub mnuExit_Click() End End Sub
‘復(fù)制 Private Sub mnuCopy_Click() Clipboard.Clear Clipboard.SetText RichTextBox1.SelText End Sub
‘剪切 Private Sub mnuCut_Click() Clipboard.Clear Clipboard.SetText RichTextBox1.SelText RichTextBox1.SelText = "" End Sub
‘全選 Private Sub mnuSelectAll_Click() RichTextBox1.SelStart = 0 RichTextBox1.SelLength = Len(RichTextBox1.Text) End Sub
‘粘貼 Private Sub mnuPaste_Click() RichTextBox1.SelText = Clipboard.GetText End Sub
‘查找 Private Sub mnuFind_Click() sFind = InputBox("請(qǐng)輸入要查找的字、詞:", "查找內(nèi)容", sFind) RichTextBox1.Find sFind End Sub
‘繼續(xù)查找 Private Sub mnuFindOn_Click() RichTextBox1.SelStart = RichTextBox1.SelStart RichTextBox1.SelLength 1 RichTextBox1.Find sFind, , Len(RichTextBox1) End Sub
‘使用說(shuō)明 Private Sub mnuReadme_Click() On Error GoTo handler RichTextBox1.LoadFile "Readme.txt", rtfText ‘請(qǐng)寫(xiě)好Readme.txt文件并存入程序所在文件夾中 Me.Caption = "超級(jí)記事本:" & "使用說(shuō)明" Exit Sub handler: MsgBox "使用說(shuō)明文檔可能已經(jīng)被移除,請(qǐng)與作者聯(lián)系,。", vbOKOnly, " 錯(cuò)誤信息" End Sub
‘關(guān)于 Private Sub mnuAbout_Click() MsgBox "超級(jí)記事本 Ver1.0 版權(quán)所有(C) 2001 土人",vbOKOnly,"關(guān)于" End Sub
‘設(shè)置彈出式菜單(即在編輯框中單擊鼠標(biāo)右鍵時(shí)彈出的動(dòng)態(tài)菜單) Private Sub RichTextBox1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then Popu
pMenu mnuEdit, vbPopupMenuLeftAlign Else Exit Sub End If End Sub ‘防止在切換輸入法時(shí)字體自變(感謝王必成先生提供此方案) Private Sub RichTextBox1_KeyUp(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeySpace Then RichTextBox1.SelFontName = CommonDialog1.FontName End If End Sub 至此,,我們的記事本可以編譯使用了。點(diǎn)擊菜單“文件”-“生成XXX.EXE”,,回到桌面運(yùn)行我們的記事本看看,,是不是頗有成就感? 當(dāng)然,,這樣的記事本還比較粗糙,我們還需要做些工作,,請(qǐng)看下一章。
第二章 美化程序界面
多數(shù)字處理軟件都有工具欄和狀態(tài)欄,。工具欄和狀態(tài)欄除了能美化我們的程序使其更具有專業(yè)性質(zhì)外,,還給用戶帶來(lái)操作上的便利。現(xiàn)在我們就來(lái)做一做這兩樣?xùn)|西,。
一.工具欄 (一)制作工具欄 單擊“工程”-“部件”,選中Microsoft Windows Common Control 6.0并確定,。這時(shí),,我們要用到的控件就出現(xiàn)在左邊的工具欄上了。 要做工具欄,,首先需要一個(gè)叫ImageList的控件來(lái)裝載圖像,。在程序界面上添加它,然后右鍵單擊此控件,,左鍵單擊“屬性”,,彈出“屬性頁(yè)”對(duì)話框的“圖像”,再單擊“插入圖片”就可以一次性裝載圖片了(如不滿意,,以后還可以添加),。圖片可在C:\Microsoft Visual Studio\Common\Graphics\Bitmaps\TlBr_W95下選擇(這里假設(shè)你的VB安裝在C盤(pán)下)。注意了:在插入圖片時(shí)給每一張圖片注明關(guān)鍵字,,以便在引用圖片時(shí)不至于混亂,。如插入“新建”的圖片,我們?cè)?#8220;關(guān)鍵字”欄注明“New”,。 圖片有了,,接下來(lái)在程序界面添加工具欄(ToolBar)。添加后工具欄就出現(xiàn)在菜單下面,,右鍵單擊它,,選擇“屬性”,在彈出的“屬性頁(yè)”對(duì)話框中的“通用”項(xiàng)作些設(shè)置,,主要如下兩項(xiàng): 1.“圖像列表”:選擇ImageList1 2.“樣式”:根據(jù)喜愛(ài)選擇1-trbStandard或者2-trbFlat 繼續(xù)點(diǎn)擊“屬性頁(yè)”的“按鈕”選項(xiàng),,插入若干按鈕。按鈕有多種樣式,,請(qǐng)根據(jù)需要設(shè)置,。這里請(qǐng)一定注意:每一個(gè)與用戶操作有關(guān)的按鈕都必須注明關(guān)鍵字,、裝載圖片,如“新建”按鈕,,在“關(guān)鍵字”項(xiàng)注明“新建”,,在“圖像”項(xiàng)鍵入“New”(即ImageList1中的圖片關(guān)鍵字),需要的話還可以在“工具提示文本”項(xiàng)填入適當(dāng)?shù)奶崾菊Z(yǔ)。 (二)編寫(xiě)工具欄的按鈕代碼 工具欄按鈕的代碼編輯很簡(jiǎn)單,,可以按照下面的格式去編寫(xiě): Private Sub ToolBar1_ButtonClick(ByVal Button As MSComctlLib.Button) On Error Resume Next ‘出錯(cuò)處理 Select Case Button.Key ‘按關(guān)鍵字選擇 Case "新建" mnuNew_Click ‘等于菜單項(xiàng)“新建”被單擊 Case "打開(kāi)" ‘等于菜單項(xiàng)“打開(kāi)”被單擊 mnuOpen_Click ‘......(繼續(xù)編寫(xiě)其它按鈕的代碼) End Select End Sub
完成后試運(yùn)行一下我們的程序,,我們發(fā)現(xiàn),有了工具欄之后,,程序變得漂亮多了,,只是有一個(gè)問(wèn)題:打開(kāi)一個(gè)較長(zhǎng)的文檔后,編輯框的下拉滾動(dòng)條向上的箭頭不見(jiàn)了,。原因是:工具條占用一定的空間,。解決方法:將“設(shè)置編輯框的位置和大小”中的RichTextBox1.Top = 20 和 RichTextBox1.Height = Me.ScaleHeight - 40分別改為RichTextBox1.Top = 380,RichTextBox1.Height = Me.ScaleHeight - 400即可,。
二.狀態(tài)欄 (一)制作狀態(tài)欄 狀態(tài)欄的英文名字叫StatusBar,,在窗體上添加它后會(huì)默認(rèn)出現(xiàn)在窗體的最下方。用鼠標(biāo)右鍵點(diǎn)擊它,,調(diào)出“屬性頁(yè)”對(duì)話框,,單擊“窗格”項(xiàng),插入一些窗格,,可以將各個(gè)窗格的“樣式”設(shè)置為: 0-sbrText 顯示文本,,需編寫(xiě)代碼 1-sbrCaps 顯示大小寫(xiě)狀態(tài),無(wú)需編程 2-sbrNum 顯示NumLock鍵開(kāi)關(guān)狀態(tài),,無(wú)需編程 3-sbrIns 顯示Insert鍵狀態(tài),,無(wú)需編程 4-sbrScr1 5-sbrTime 顯示時(shí)間,不編程時(shí)時(shí)間不會(huì)隨系統(tǒng)時(shí)鐘變化 6-sbrDate 顯示日期,,無(wú)需編程 注意:加進(jìn)狀態(tài)欄后需將Form_Resze中的RichTextBox1.Height = Me.ScaleHeight - 400改為RichTextBox1.Height = Me.ScaleHeight - 600,。 (二)狀態(tài)欄根據(jù)其“樣式”屬性決定用不用編寫(xiě)代碼(如上文所述)。下面舉些例子,,讀者可以認(rèn)真揣摩,,從而達(dá)到舉一反三的效果。
例一:用戶選取了“新建”后,,讓第一個(gè)窗格顯示:“目前狀態(tài):正在打開(kāi)文件《……》”,。請(qǐng)將下面代碼寫(xiě)進(jìn)“打開(kāi)”菜單里面: StatusBar1.Panels(1).Text = "目前狀態(tài):正在打開(kāi)文件" & "《" &CommonDialog1.FileTitle & "》"
例二:讓第三個(gè)窗格顯示時(shí)間并讓時(shí)間跟隨系統(tǒng)時(shí)鐘變化。 首先,,給程序加一個(gè)Timer控件,,將其Interval屬性設(shè)為1000。然后: 在Form_Load過(guò)程加入:StatusBar1.Panels(1).Text = Time;然后給Timer控件編寫(xiě)代碼:
Private Sub Timer1_Timer() If StatusBar1.Panels(3).Text <> CStr(Time) Then StatusBar1.Panels(3).Text = Time End If End Sub
例三:當(dāng)編輯框的文本發(fā)生變化時(shí)讓第一個(gè)窗格顯示:“正在編輯文檔:文件名”,。 Private Sub RichTextBox1_Chang() StatusBar1.Panels(1).Text = "正在編輯文檔:" & CommonDialog1.FileName End Sub
辛苦了那么久,,我們現(xiàn)在已經(jīng)擁有一個(gè)象模象樣的記事本了。這個(gè)記事本由于用了RichText控件,,理論上它能打開(kāi)和編輯任意大的文檔,,使用起來(lái)的確比Windows自帶的記事本方便得多。當(dāng)然,,還有一些其它的功能需要添加和完善,,這就靠你慢慢去完成了。
|