Building Coder(Revit 二次開發) - 翻譯 Revit Tooltip

原文鏈接:Translate Revit Tooltips

由於 AutoDesk 已經將其大部分產品的底層架構統一了,所以 Kean Walmsley (譯者注:AutoCAD二次開發博主 Through the Interface) 對 AutoCAD 界面定製的研究對於 Revit 同樣有效。本文從定製 Tooltip 入手,介紹如何利用 AdWindows.dll 定製化翻譯 Revit 的 Tooltip 文本。

AdWindows.dll 提供的命名空間 Autodesk.Windows 中提供了部分 Ribbon 用戶界面的定製接口。爲了捕獲 Revit 顯示的 Tooltip,需要註冊針對所有 Tooltip 都會觸發的
Autodesk.Windows.ComponentManager.TooltipOpened 事件。

當然,僅僅是實現設置 Tooltip 的語言,我們也可以使用獨立應用程序調用 AdWindows.dll 的方式來實現。但是顯然使用 Revit Add-in 的方式會更加直觀(譯者注:因爲我目前項目要求將一個數字平臺與 Revit 環境無縫綁定,所以插件形式是必選。而且通過 AdWindows.dll,我可以實現將 Revit 環境標誌位我自己的數字平臺的效果)。

下面這段代碼展示的是主要邏輯:

    Autodesk.Windows.ComponentManager.ToolTipOpened += ( s, e ) =>
    {
        Autodesk.Internal.Windows.ToolTip tt = s as Autodesk.Internal.Windows.ToolTip;
        if (tt != null)
        {
            if (tt.Content is RibbonToolTip)
            {
                RibbonToolTip rtt = (RibbonToolTip)tt.Content;

                if (rtt.Content == null && rtt.ExpandedContent == null)
                {
                    // 防止關閉 Revit 中的瀏覽器控件 Tooltip
                    if (!rtt.Title.Contains(" : "))
                    {
                        CloseAndReshowTooltip(tt);
                    }
                }
                else
                {
                    rtt.Content =TranslateIfString(rtt.Content, GetId(rtt));
                    TranslateObjectContent(rtt.Content, GetId(rtt));

                    // 翻譯擴展內容(添加ID到結尾來將其與基本內容區分開)
                    rtt.ExpandedContent = TranslateIfString(rtt.ExpandedContent, GetExpandedId(GetId(rtt)));
                    TranslateObjectContent(rtt.ExpandedContent, GetExpandedId(GetId(rtt)));

                    // 強制爲特定控件顯示 Tooltip(目前是硬編碼位移,更好的方式是基於當前鼠標的尺寸)
                    tt.Show(System.Windows.Forms.Cursor.Position.X, System.Windows.Forms.Cursor.Position.Y + 16);
                }
            }
            else if (tt.Content is UriKey)
            {
                // 針對需要系統解析的 Tooltip 將顯示交給系統延時處理
                CloseAndReshowTooltip(tt);
            }
            else
            {
                // 基本的只包含文本的 Tooltip
                tt.Content = TranslateIfString(tt.Content, null);
            }
        }
    }



請在此處下載完整代碼。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章