vb外接程序的制做二,在vb中創建您自己工具條和菜單 創建工具條依然需要使用到vbi,只要和vb打交道,必須有它,同時在上篇文章所闡述的菜單項的制做方法是對你現在即將做的工作有用的.有一點你必須知道,無論是創建按鈕,還是創建菜單項,他們之間是沒有區別的.只是有一些地方有一點點不同而已. 怎樣創建工具條呢?非常簡單. vbi.commandbars.add cbstoolsbarname 此方法后面當然有其它可選參數,但是有些東西對于現在我要闡述的問題是無關的. function add([name], [position], [menubar], [temporary]) as commandbar [position] 是位置.是浮動在vb中還是在vb的上邊,下邊,左邊,右邊?參數,你待參考 msobarposition.至于 [menubar]參數,指定是哪個菜單欄啦,這個就自己去摸索吧.當然,最后一個參數,我也不知道它有什么用,單至少不會影響你當前的工作,而且以后也不會的. vbi.commandbars.add cbstoolsbarname中的cbstoolsbarname當然是我們的工具條名稱.你最好用常量方式.每次向它加按鈕時,將會節約你寫漢字的事件,如果你寫英文,當用戶在工具欄點右鍵時出現的菜單里寫的工具條名稱是英文的.如果你寫中文的話,就是中文的.在處理工具條上我不是高手,因為目前為止,我還不能向菜單條添加一個和[文件]菜單這樣的菜單,只能添加它的子項.曾經有一次試圖添加,但是可能由于不恰當,造成又一次的失敗.如果你知道了一定別忘了告訴我! 在添加了一個工具欄后,向工具條里添加按鈕是和向[工具]這樣的菜單中添加菜單項是一樣的.只是結果是添加到你的工具條里了,同時字符串將用于按鈕的tooltiptext而已,這里,你必須為每個按鈕準備個圖標,一般是32*32的.其它大小當然也可以,只是會變形而已.使用剪貼板加載圖標,然后使用上篇文章中所說的pasteface粘貼就可以了.無論何中格式,均可以添加到按鈕上.只要是vb支持的圖形.當然,vb支持gif但是粘貼上的絕對不是動畫.這個方法只是封裝了bitblt,把剪貼板中的圖象放到一個 dc對象,然后bitblt到按鈕上而已.即使你加載一個gif,按鈕上只能看到的是gif的第一幀,這何用[圖畫]程序打開一個gif是一個道理.我把一段我在開發coderhelper里用來添加按鈕的代碼復制出來給你也許它對你非常有用. public function addtomenu(txtcaption as string, owner as string, resiconid as long, optional before, optional id as long) as commandbarevents dim cmenu as object set cmenu = addcommandbar(txtcaption, owner, resiconid, before) '吸取事件 set addtomenu = vbi.events.commandbarevents(cmenu) end function function addcommandbar(scaption as string, owner as string, resiconid as long, optional before) as office.commandbarcontrol dim cbmenucommandbar as office.commandbarcontrol '命令欄對象 dim cbmenu as commandbar on error goto addtoaddincommandbarerr '察看能否找到外接程序菜單 set cbmenu = vbi.commandbars(owner) if cbmenu is nothing then '沒有有效的外接程序,過程失敗 exit function end if '添加它到命令欄 set cbmenucommandbar = cbmenu.controls.add(1, , , before) '設置標題 cbmenucommandbar.caption = scaption clipboard.clear clipboard.setdata loadrespicture(resiconid, vbresbitmap) '為此按鈕設置圖標 cbmenucommandbar.pasteface clipboard.clear set addcommandbar = cbmenucommandbar exit function addtoaddincommandbarerr: end function 在 onconnection 我是這樣使用的. 先 vbi.commandbars.add myname 'myname是工具條的名稱常量,public const myname = "程序員助手工具條" public const myfunname = "程序員助手快捷命令" '這兩個常量是在模塊modmain中定義的.所以在整個coderhelper中都可用.因此方便了你在任何一個子程序中添加按鈕.雖然我不哪么對,原因非常實在,那樣你就是非常愚蠢的,亂亂的代碼會讓你發瘋,所以最好不要哪樣做.vbi.commandbars.add myname 完了后你可以象我下面的代碼這么做 set cbevbexport = addtomenu("share dll編譯向導", myname, 109) set pjtexplorer = addtomenu("工程類瀏覽器", myname, 113) set ucfileeditor = addtomenu("文件編輯器", myname, 112) set wecmdline = addtomenu("命令行", myname, 111) 109,112,113,111 是資源代碼,在addcommandbar中,loadrespicture(resiconid, vbresbitmap)的語句是針對位圖資源的.而這些數字就是位resiconid準備的.給你的代碼省去了你很多事情,你要做的只是給按鈕聲明個事件名稱,找個圖片,找個字符串,然后把圖片加載到資源文件中,然后 set 事件名稱= addtomenu ("字符串",工具條名稱,圖片資源代碼) 然后在 象我在coderhelper 中一樣 : private sub cbevbexport_click(byval commandbarcontrol as object, handled as boolean, canceldefault as boolean) docommand "vbexport", "" end sub 就可以了.其中的三個參數很明顯.這個現在不是我要為你所闡述的.這個目前的工作無關.不用去操心.干嗎非操心與正題無關的呢! 也許你可以看到,我的coderhelper 中的 命令行 負責了很多任務.你猜對了.為了運行可靠,何編程的需要.這種方式是相當不錯的.只要在 docommand 中處理好錯誤.其它地方就不用操心了!不用到處都是 on error ....等代碼. 第一個按鈕添加完了.添第二個是同樣的方法. 菜單是同樣的道理.向菜單里添加些項.同樣是這種方法.是沒有任何區別的.到了這里你有可能發現,外接程序調用了office 的運行庫 mso.dll.包括目前所有微軟的大軟件,幾乎都在使用它,這就是為什么有時候 office 做了安裝更改后啟動vb時會無聊的運行 office 的安裝程序.國內最大的酷站演示中心!