一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

細品RibbonX(16):RibbonX開發(fā)基礎(chǔ)問答

 yuxinrong 2009-11-10
在前面的一系列關(guān)于RibbonX的介紹中,我們一起認識了Office 2007的功能區(qū)界面,了解了RibbonX開發(fā)的基礎(chǔ)知識,介紹了一些有用的資源,并重點講解了RibbonX開發(fā)的工具以及步驟,關(guān)鍵的XML知識和回調(diào)基礎(chǔ)。下面,我們以問答的形式對前面的一些主要知識進行小結(jié)。

問題1 沒有任何第三方工具,我如何創(chuàng)建自定義的選項卡?

如果有第三方工具輔助,例如Custom UI Editor,那么自定義功能區(qū)是很方便的。不過沒有也不要緊,只是稍微復(fù)雜一點罷了。

步驟1 打開Excel,輸入數(shù)據(jù)后,使用xlsm擴展名保存該文件。

確保使用xlsm擴展名保存Excel文件,否則Excel會去除包含宏的文件。

步驟2 關(guān)閉Excel,然后在Windows中打開保存該文件的文件夾。

步驟3 在該文件夾中創(chuàng)建一個名為customUI的新文件夾。

步驟4 在這個新文件夾中添加一個名為customUI.xml的新文本文件。記住,該文本文件的擴展名為xml

customUI.xml文件中添加自定義選項卡的XML代碼:

<?xml version=”1.0″ encoding=”UTF-8″ standalone=”yes” ?>

<customUI xmlns=”http://schemas.microsoft.com/office/2006/01/customui”>

    <ribbon>

        <tabs>

            <tab id=”myTab” label=”我的選項卡” keytip=”MT”>

            </tab>

        </tabs>

    </ribbon>

</customUI>

說明:上述代碼中有一個keytip屬性,代表用戶按Alt鍵時選項卡出現(xiàn)的提示鍵,即用戶按Alt+MT鍵就可以選擇自定義的選項卡。在定義提示鍵時,選擇的字符應(yīng)避免與相同級別已有的提示鍵相沖突,例如,每個選項卡必須有唯一的提示鍵,然而其中的控件可以與選項卡有相同的提示鍵,只要它不與其它控件的提示鍵相同。

步驟5 將剛創(chuàng)建的Excel文件的擴展名改為ZIP

步驟6 ZIP文件中提取_rels文件夾,并修改其中的.rels文件,用于告訴Excel存在customUI.xml文件。在.rels文件中添加下面的代碼:

<Relationship Id=”rId4″ Type=”http://schemas.microsoft.com/office/2006/relationships/ui/extensibility” Target=”customUI/customUI.xml” />

必須提供唯一的Id屬性值。Type屬性必須指向自定義用戶界面擴展的架構(gòu),因此使用如代碼中顯示的URLTarget屬性指向自定義文件的位置。

步驟7 _rels文件夾放回到ZIP文件中。

步驟8 customUI文件夾放到ZIP文件中。

步驟9 ZIP文件的擴展名修改回Excel的擴展名。

此時,打開Excel文件后,將看到如下圖1所示的自定義選項卡。該選項卡是空的,因為我們還沒有在其中添加任何的組。注意,該選項卡顯示了MT提示鍵。

 

ribbonx16-1

1:添加空白選項卡

問題2 如何在選項卡中添加組?

在上文中,我們已經(jīng)創(chuàng)建了一個新的選項卡。那么,在該選項卡中添加組也是相當(dāng)容易的,只需要修改customUI.xml文件。此時,首先應(yīng)該設(shè)計好布局,然后再添加相應(yīng)的VBA代碼。

下面是修改后在customUI.xml文件中添加的xml代碼:

           <tab id=”myTab” label=”我的選項卡” keytip=”MT”>

 

                <group id=”Default” label=”默認組“>

                </group>

 

                <group id=”SeparatorGroup” label=”使用分隔條的組“>

                    <separator id=”SeparatorItem” visible=”true” />

                </group>

 

                <group id=”DialogBoxLaunch” label=”使用對話框啟動器的組“>

                    <dialogBoxLauncher>

                        <button id=”LaunchDialog”

                                screentip=”對話框啟動器

                                supertip=”單擊此按鈕通常會顯示一個對話框.”

                                keytip=”LD” />

                    </dialogBoxLauncher>

                </group>

 

            </tab>

上述代碼在選項卡中添加了三個組。按上文所述步驟,將修改后的customUI.xml文件替換ZIP文件夾中原來的customUI.xml文件,然后將ZIP文件擴展名修改回xlsm擴展名,打開Excel文件,結(jié)果如下圖2所示。

 

ribbonx16-2

2:添加了三個組的選項卡

下面我們對上述代碼進行簡單的說明。

上述代碼以標準的組開始,沒有包括任何特定的功能。通常,可以在<group></group>標簽之間放置控件。組能夠使用下列屬性:

l         image(添加圖像到組中)

l         imageMso(添加內(nèi)置圖像到組中)

l         keytip(為組提供加速鍵)

l         screentip(為使用組顯示一條簡短的提示)

l         supertip(為使用組顯示一條較詳細的提示)

然而,在通常情況下,我們不會使用這些額外的屬性。事實上,由于組本身的特點,即使設(shè)置了這些屬性,相應(yīng)的特點可能也不會反映到界面中,因為Office忽略了這些屬性。

除了在組中放置控件外,還有兩個額外的子元素。<separator>元素在組中放置一條分隔條,提供控件之間的分隔,例如“視圖”選項卡中的一些組,為我們提供了如何放置分隔條以提供更好的外觀的示例。

一些組中還包括有對話框啟動器,單擊它將提供更多的功能。如上述代碼所示,使用<dialogBoxLauncher>元素來提供對話框啟動器。<dialogBoxLauncher>元素需要包括<button>控件,否則Office不會顯示,并且<dialogBoxLauncher>元素必須包含一個且唯一一個<button>控件,不能使用任何其它的控件。

問題3 使用記事本定制Ribbon太麻煩且易出錯,有沒有第三方工具可以簡化定制Ribbon的過程?

有。包括一款名為Office 2007 Custom UI Editor的工具和XML NotePad的工具,此外,還可以使用Visual Studio 2008來定制Ribbon

問題4 Office 2007 Custom UI Editor是什么?

Office 2007 Custom UI Editor是一款小巧的用于自定義Office功能區(qū)的工具,使用該工具非常方便。不僅可以直接輸入代碼,還可以驗證代碼、添加圖像,產(chǎn)生回調(diào)。但遺憾的是,不支持中文。

問題5 如何使用Office 2007 Custom UI Editor自定義功能區(qū)?

使用Office 2007 Custom UI Editor創(chuàng)建自定義功能區(qū)非常簡單。仍以上述代碼為例,簡要地介紹其步驟:

步驟1 創(chuàng)建需要自定義功能區(qū)的Excel文件并保存。

步驟2 關(guān)閉Excel文件。

注意,在使用Custom UI Editor自定義功能區(qū)之前,必須首先關(guān)閉相應(yīng)的Excel文件。

步驟3 打開Custom UI Editor。

步驟4 Custom UI Editor中打開Excel文件。

步驟5 編寫xml代碼。

 

ribbonx16-3

3:在CustomUIEditor中輸入代碼

步驟6 保存并關(guān)閉Custom UI Editor

步驟7 打開Excel文件。此時,將出現(xiàn)自定義的功能區(qū)元素。

問題6 我要在Office 2007中開發(fā)中文的選項卡和組,如何進行?

可以采取使用記事本的方法,只不過在保存xml文件時,選擇utf-8格式。

問題7 在哪里可以獲取Office圖標?

您可以從Microsoft的網(wǎng)站上搜索Office2007IconsGallery.EXE,下載該文件后安裝。然后找到Office2007IconsGallery.xlsm文件并打開,此時在“開發(fā)工具”選項卡中將包含一個Office圖標組,可以確定所有內(nèi)置圖標的名字。

您也可以從下列站點獲得:

http://www./wordpress/2009/05/06/ribbonxstudy8/

問題8 如何獲取控件的標識符

Microsoft提供了一種簡單的方法很容易獲得控件的標識符名。單擊“Office按鈕——選項”,調(diào)出應(yīng)用程序選項對話框。在該對話框中,選擇“自定義”選項卡。在“從下列位置選擇命令”組合框中選擇,然后將鼠標懸浮在下方列表框中的某個命名上,即可顯示其標識符。然而,這僅對控件有用,如果需要知道選項卡和組的標識符,應(yīng)在Microsoft的網(wǎng)站上下載專門的文檔。

問題9 如何添加自定義功能?

在使用XML自定義功能區(qū)后,除了使用內(nèi)置控件或者希望利用內(nèi)置控件的功能外,還可以添加自定義功能。這需要使用回調(diào),即使自定義的界面工作的VBA代碼。

1)為含有組和控件的選項卡編寫VBA代碼

最常見的任務(wù)之一是創(chuàng)建帶有組和控件的選項卡,以添加自定義的功能。下面介紹如何處理“My Tab”選項卡的“My Group”組中名為“My Button”的按鈕。

步驟1 Custom UI Editor中編寫XML

<?xml version=1.0 encoding=UTF-8 standalone=yes?>

<customUI xmlns=http://schemas.microsoft.com/office/2006/01/customui>

  <ribbon>

    <tabs>

 

    <tab id=myTab label=My Tab>

      <group id=myGroup label=My Group>

        <button id=myButton

                  label=My Button

                  image=Colorblk2

                  size=large

                  onAction=myButton_ClickHandler/>

      </group>

      </tab>

 

    </tabs>

 

  </ribbon>

</customUI>

步驟2 插入圖標

單擊“Insert Icons”按鈕,插入名為Colorblk2的圖標。這里,使用的是自定義圖像,因此使用image屬性。

步驟3 生成回調(diào)代碼

單擊“Generate Callbacks”按鈕,生成回調(diào)代碼:

‘Callback for myButton onAction

Sub myButton_ClickHandler(control as IRibbonControl)

End Sub

復(fù)制該段代碼,并關(guān)閉Custom UI Editor

步驟4 編寫VBA代碼

打開工作簿,切換到VBE,插入一個新模塊,并粘貼代碼。然后,在其中編寫要實現(xiàn)的功能的代碼。最后的代碼如下:

‘Callback for myButton onAction

Sub myButton_ClickHandler(control As IRibbonControl)

    MsgBox control.ID + “被單擊.”

End Sub

此時,保存Excel文件,切換到“My Tab”選項卡,單擊“My Button”按鈕,會出現(xiàn)包含該按鈕標識符信息的消息框,如圖4所示。

 

ribbonx16-4

4:單擊自定義的按鈕后執(zhí)行相應(yīng)的VBA代碼的結(jié)果

2)修改已有的選項卡、組和控件

只要知道相應(yīng)的標識符,我們就能夠修改已有的選項卡、組和控件。下面,首先在現(xiàn)有的選項卡中添加一個新組和控件,然后實現(xiàn)該控件的自定義操作。

在現(xiàn)有的選項卡中添加新組和控件的XML如下:

      <tab idMso=TabHome>

        <group id=BehaviorChange

               label=Behavior

               insertAfterMso=GroupFont>

          <toggleButton id=StopUnderline

                        label=Stop Underlining

                        onAction=StopUnderline_ClickHandler

                        getPressed=StopUnderline_GetPressed

                        size=large

                        imageMso=ShapeFillColorPicker

                        insertBeforeMso=UnderlineGallery/>

        </group>

      </tab>

從上述代碼可知,新組出現(xiàn)在“開始”選項卡中,其名稱為“Behavior”,并且將該組插入到“字體”組之后,該組中包含一個大尺寸的切換按鈕。必須為該切換按鈕提供兩個回調(diào):onActiongetPressed。在單擊切換按鈕時,onAction回調(diào)執(zhí)行與標準按鈕相同的任務(wù),而getPressed回調(diào)記錄切換按鈕的狀態(tài)。該切換按鈕使用了Office提供的圖標。

界面如下圖5所示:

 

ribbonx16-5

5:在“開始”選項卡中添加新組和控件

(注意,在Custom UI Editor生成的回調(diào)中,不總是提供正確的參數(shù),例如OnAction回調(diào),其正確的參數(shù)為:

Sub OnAction(control as IRibbonControl,pressed as Boolean,ByRef fCancelDefault)

可以參考:

http://msdn2.microsoft.com/en-us/library/ms406047.aspx

下面的XML用于重利用“下劃線”按鈕:

  <commands>

    <command idMso=Underline

             onAction=myUnderline/>

  </commands>

接著,在Custom UI Editor中生成回調(diào)代碼并復(fù)制到VBE中,添加代碼如下:

‘Define a global variable to hold the Ribbon reference.

Dim Rib As IRibbonUI

 

‘Determines the behavior button state.

Dim lBehavior As Boolean

 

‘Callback for customUI.onLoad

Sub RibbonLoaded(ribbon As IRibbonUI)

 

    ‘Save the ribbon reference.

    Set Rib = ribbon

   

    ‘Initialize the behavior state.

    lBehavior = False

   

    ‘Tell the user the Ribbon is loaded.

    MsgBox “Ribbon Loaded”

End Sub

 

‘Callback for myUnderline onAction

Sub myUnderline(control As IRibbonControl, pressed As Boolean, ByRef fCancelDefault)

    If (lBehavior) Then

        MsgBox “No Underlined Allowed!”

        pressed = False

        fCancelDefault = True

    Else

        fCancelDefault = False

    End If

End Sub

 

‘Callback for StopUnderline onAction

Sub StopUnderline_ClickHandler(control As IRibbonControl, pressed As Boolean)

 

    ‘ Change the behavior state.

    lBehavior = pressed

   

    ‘ Update the control.

    Rib.InvalidateControl (control.ID)

End Sub

 

‘Callback for StopUnderline getPressed

Sub StopUnderline_GetPressed(control As IRibbonControl, ByRef returnedVal)

 

    ‘ Return the current behavior state.

    returnedVal = lBehavior

End Sub

上述代碼在開始部分定義了一個變量來追蹤應(yīng)用程序的狀態(tài),以確保添加的控件反映正確的狀態(tài)。StopUnderline_ClickHandler()過程接受當(dāng)前的控件及其按下的狀態(tài),代碼在lBehavior中存儲該控件的狀態(tài),然后使用InvalidateControl()重繪。通過返回lBehavior到功能區(qū),StopUnderline_GetPressed()過程執(zhí)行顯示當(dāng)前切換按鈕狀態(tài)的處理。由于首次裝載文檔時功能區(qū)調(diào)用該過程,因此必須在RibbonLoaded()中提供lBehavior的默認值。本例中,當(dāng)lBehaviorFalse時,myUnderline()執(zhí)行默認的行為。當(dāng)用戶設(shè)置Stop Underlining按鈕并且lBehaviorTrue時,代碼顯示一條消息告訴用戶不允許添加下劃線。

3)修改或重利用Office菜單

也可以修改或重利用Office菜單項。下面的XMLOffice菜單中添加項目:

    <officeMenu>

      <menu idMso=FilePrepareMenu>

        <button id=NewPrepButton

                label=My Prepare Button

                description=Prepare Time

                image=TIME

                insertBeforeMso=FileProperties

                onAction=NewPrepButton_ClickHandler/>

      </menu>

 

      <splitButton idMso=FileSaveAsMenu>

        <menu idMso=FileSaveAsMenu>

          <button id=SayHello

                  label=Say Hello

                  description=This button says hello!

                  image=Colorblk2

                  onAction=SayHello_ClickHandler/>

        </menu>

      </splitButton>

 

    </officeMenu>

如上所示,Office菜單項出現(xiàn)在<officeMenu>元素中。本例中,代碼在“準備”菜單里添加了一個名為“My Prepare Button”的新按鈕,放置在菜單列表的頂部并使用了自定義圖標。

應(yīng)該注意到,“另存為”(FileSaveAsMenu)菜單以<splitButton>開始,因為它是一個拆分按鈕。

接著,在Custom UI Editor中生成回調(diào)代碼并復(fù)制到VBE中,添加代碼如下:

‘ Callback for My Prepare Button on the

‘ Prepare menu of the Office menu.

Sub NewPrepButton_ClickHandler(control As IRibbonControl)

   

    ‘ Display a message.

    MsgBox “Are you prepared?”, vbYesNo

End Sub

 

‘ Provides support for the Say Hello Button on the

‘ Save As menu of the Office Menu.

Sub SayHello_ClickHandler(control As IRibbonControl)

 

    ‘ Display a message.

    MsgBox “Hello!”

End Sub

下面的XML用于重利用另存為“Excel 97-2003工作簿”命令:

  <commands>

    <command idMso=FileSaveAsExcel97_2003

             onAction=FileSaveAs_ClickHandler/>

  </commands>

下面是相應(yīng)的VBA代碼:

‘ Repurposes callback for the File Save As button.

Sub FileSaveAs_ClickHandler(control As IRibbonControl, ByRef fCancelDefault)

 

    ‘ Holds the user response.

    Dim Answer As VbMsgBoxResult

   

    ‘ Display a message.

    Answer = MsgBox(”Saving as an older version. Are you sure?”, vbYesNo)

   

    ‘ Act on the response.

    If Answer = vbYes Then

        fCancelDefault = False

    Else

        fCancelDefault = True

    End If

End Sub

注意參數(shù)fCancelDefault的使用。代碼開始顯示一條消息框,如果用戶單擊“是”,那么代碼將fCancelDefault設(shè)置為False,表示顯示“另存為”對話框;否則,代碼將fCancelDefault設(shè)置為True,表示不做任何操作。

上述所有代碼中,最重要的回調(diào)之一是功能區(qū)裝載,即在<customUI>元素中使用onLoad屬性:

<customUI onLoad=RibbonLoaded

          xmlns=http://schemas.microsoft.com/office/2006/01/customui>

在工作簿打開時,將產(chǎn)生onLoad回調(diào),查找VBA代碼中的RibbonLoaded過程。該過程的代碼如下:

‘Define a global variable to hold the Ribbon reference.

Dim Rib As IRibbonUI

 

‘Callback for customUI.onLoad

Sub RibbonLoaded(ribbon As IRibbonUI)

 

    ‘Save the ribbon reference.

    Set Rib = ribbon

   

    ‘Initialize the behavior state.

    lBehavior = False

   

    ‘Tell the user the Ribbon is loaded.

    MsgBox “Ribbon Loaded”

End Sub

使用Invalidate方法告訴功能區(qū)進行重繪,顯示移除、修改或添加的特征。

問題10 可以從頭開始設(shè)計功能區(qū)嗎?

可以。Microsoft提供了一個名為startFromScratch的屬性,將其值設(shè)置為true,將移除現(xiàn)有的功能區(qū)界面。從頭開始設(shè)計功能區(qū)可以限制用戶訪問您不希望其使用的功能。

只需在<ribbon>元素中添加startFromScratch屬性并設(shè)置其值為true,即可從頭開始設(shè)置功能區(qū):

<ribbon startFromScratch=”true”>

問題11 可以從功能區(qū)中調(diào)用自定義的用戶窗體嗎?

可以,其實這也是取代自定義復(fù)雜的功能區(qū)的一種方式,您可以在用戶窗體中實現(xiàn)一系列RibbonX控件的操作。而您只需要在功能區(qū)中添加一個按鈕,用來調(diào)用用戶窗體。

下面介紹一個顯示和使用簡單用戶窗體的示例。

首先,在功能區(qū)中添加一個用于訪問用戶窗體的按鈕。其XML代碼如下:

<customUI xmlns=http://schemas.microsoft.com/office/2006/01/customui>

  <ribbon>

    <tabs>

      <tab idMso=TabHome>

        <group id=FormList label=Forms>

          <button id=ShowForm

                  label=Show Form

                  imageMso=HappyFace

                  size=large

                  onAction=ShowMyForm />

        </group>

      </tab>

    </tabs>

  </ribbon>

</customUI>

在工作簿中添加回調(diào)代碼:

‘ Callback for ShowMyForm onAction

Sub ShowMyForm(control As IRibbonControl)

    ‘ Call the common processing routine.

    ProcessForm

End Sub

其中,ProcessForm是一個過程的名稱,該過程用于處理用戶窗體的操作。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    91偷拍与自偷拍精品| 日韩精品你懂的在线观看| 国产水滴盗摄一区二区| 成人精品欧美一级乱黄| 欧美日韩综合在线精品| 四季av一区二区播放| 美女黄片大全在线观看| 冬爱琴音一区二区中文字幕| 亚洲国产欧美久久精品| 麻豆精品在线一区二区三区| 少妇熟女亚洲色图av天堂| 欧美日韩乱一区二区三区| 久久精品国产第一区二区三区| 不卡免费成人日韩精品| 精品女同一区二区三区| 亚洲av秘片一区二区三区| 一区二区三区四区亚洲另类| 国产不卡最新在线视频| 久久国产亚洲精品成人| 日本特黄特色大片免费观看 | 人妻人妻人人妻人人澡| 国产老熟女超碰一区二区三区| 国产成人精品资源在线观看| 最近的中文字幕一区二区| 精品午夜福利无人区乱码| 日本欧美一区二区三区高清| 成在线人免费视频一区二区| 中日韩美一级特黄大片| 欧美激情区一区二区三区| 日韩av欧美中文字幕| 日本大学生精油按摩在线观看| 色婷婷在线视频免费播放| 欧美日韩综合综合久久久| 国产亚洲神马午夜福利| 国产一区欧美一区日本道| 成年男女午夜久久久精品| 日韩人妻免费视频一专区 | 五月天综合网五月天综合网| 国产精品成人一区二区在线| 中文字幕一区二区熟女| 日本欧美一区二区三区在线播|