labview界面分隔和自定義窗口大小

>>>>>>我的博客目錄導航

轉自 statemicLabVIEW程序界面的佈局

       控件的顯示效果與監視器是密切相關的,因此在程序設計時需要考慮目標監視器的顏色、分辨率等因素,並明確運行該應用程序所需要的最低硬件要求。在很多的論壇中經常會看到問題:如何才能確保應用程序的界面在更高的分辨率上運行時不會變形?這實際上是一個界面設計問題,而思考如何解決它卻是應該從程序設計時就開始,而不是等到程序設計完成後再探討解決方案。LabVIEW中並沒有提供一種有效的方式或工具來解決這個問題,但是我個人認爲這與LabVIEW無關,更應該把它歸納爲通用的程序設計問題,解決它需要比較良好的界面設計、佈局和分配作爲前提。

       事實上,程序往往會規定一個最低的運行分辨率,在此分辨率以上的顯示器上程序界面應該能夠正確地被顯示出來。而在LabVIEW中,控件往往在高分辨率的顯示器上被拉大或者留有部分的空白,這使得整個界面完全扭曲了程序員最初的設計。

       爲了能夠更加清晰問題的本質和尋求解決問題的方案,有必要對LabVIEW的前面板界面進行確認和分析。如圖 11所示,一個VI的窗口由幾個部分組成:整個紅色的區域稱爲一個窗口(Windows),而藍色的區域稱爲一個面板(Panel)。從圖中可以看出,窗口中的標題欄、菜單欄和工具欄並不屬於面板。

                                                               LabVIEW程序界面的佈局 - statemice - Change

                                                                                         圖11 VI窗口區域定義

      LabVIEW允許程序員將面板(Panel)劃分爲若干個獨立的窗格(Pane)。使用Controls>>Modern>>Containers選板中的Horizontal Splitter Bar和Vertical Splitter Bar可以將VI的面板進行任意的劃分,如圖 12所示。

                                                                                       LabVIEW程序界面的佈局 - statemice - Change

                                                                                            圖12 Containers選板

      劃分之後的VI前面板如圖 13所示,可以看出圖中的Panel(藍色區域)已經被劃分爲了5個窗格Pane,每一個綠色區域都被稱爲一個Pane。當Panel上只有一個Pane時,Panel與Pane會重合。因此,窗口(Windows)包含整個界面,而1個窗口只有1個面板(Panel),該面板能夠被劃分爲若干個獨立的窗格(Pane)。每個Pane都包含其特有的屬性和滾動條,而Pane之間使用Splitter進行分隔。

                                                                       LabVIEW程序界面的佈局 - statemice - Change

                                                                                         圖13 劃分之後的VI窗口定義

      在Splitter上右擊可以設置Splitter的相關屬性,如圖 14所示。Locked屬性可以設置Splitter是否被鎖定,被鎖定的Splitter的位置將無法被移動。與控件類似,LabVIEW提供了3種Splitter樣式:Modern、System和Classic。程序員可以使用着色工具設置Modern和Classic Splitter的顏色,使用手型工具調整Splitter的位置以及使用選擇工具調整Splitter的大小。

                                                                                         LabVIEW程序界面的佈局 - statemice - Change

                                                                                            圖14 Splitter右鍵快捷菜單

        現在再回頭看本小節開頭提到的分辨率問題,從常識上判斷,當程序從低分辨率界面向高分辨率界面轉移時,可以有如下的解決方案:

1、  界面上的控件變大;

2、  界面控件的位置重新分佈,以平衡空白位;

3、  界面控件的相對位置不動,留出適當的空白位。

        在實際操作中,上述的3種方式似乎很難實現以滿足界面大小變化帶來的自適應問題。比如第3種方式看似簡單,卻同樣存在着疑問:應該在哪裏留出空白位,是現有控件的左邊?右邊?上邊?還是下邊?打開一些標準的Windows界面程序,不難看出,往往程序中結合使用了上面的3種方式。部分的控件位置和大小不變,留出適當的空白位給其它的控件,如Listbox、Graph、Tree等。因此這類控件顯示的信息較多,並且外觀單一,改變它們的大小對整個界面的佈局不會產生影響。

       因此,在程序開始設計的初級階段就有必要設計界面的大致控件佈局和分佈,以明確界面在不同分辨率下的調整方式。如果界面控件過多,則可以通過其它的方式進行規避(比如對話框等),確保界面的大小調整不會影響到控件佈局的變化。

【應用(下載)】

        本節將以一個標準的Windows測試界面爲例說明界面設計的方式和步驟。首先,需要根據程序的功能劃分VI的Panel,並決定將其分爲多少個Pane。圖 15將界面分爲了8個Pane,依次爲:工具欄、幫助欄、測試信息欄、波形採集欄、狀態欄(登陸人員欄、說明欄、測試內容欄和測試時間欄)。

                                                           LabVIEW程序界面的佈局 - statemice - Change

                                                                                                   圖15 劃分Panel

       其次,在狀態欄的四個區域中分別加入一個String型Indicator,並且勾選Indicator的右鍵快捷菜單選項:Fit Control to Pane,也就是說當Pane變化的時候String的大小也隨之發生改變以確保String控件能夠填充整個Pane,如圖 16所示。

                                                            LabVIEW程序界面的佈局 - statemice - Change

                                                                                 圖16 在狀態欄中加入Indicator控件

單擊窗口的最大化按鈕,可以看出整個狀態欄的高度變大而最右側子狀態欄的寬度變大,如圖 17所示。

                                                          LabVIEW程序界面的佈局 - statemice - Change

                                                                                       圖17 最大化之後的狀態欄

        事實上,當窗口(或者Pane)大小發生變化時往往不希望狀態欄的高度發生改變,而只需要改變其中某一個Pane的長度就可以了。單擊“還原”按鈕,使窗口回到圖 16所示的狀態。在底部的藍色Splitter上右擊,選擇快捷菜單中的Splitter Stick Bottom選項,如圖 18所示。該選項表示在Splitter變化時始終保持底部的相對位置不變。

                                                              LabVIEW程序界面的佈局 - statemice - Change

                                                                                        圖18 Splitter右鍵快捷菜單

再次最大化窗口,此時狀態欄的高度將保持不變,而最右側的子狀態欄的寬度將變大,如圖 19所示。

                                                              LabVIEW程序界面的佈局 - statemice - Change

                                                                                         圖19 最大化之後的狀態欄

       如果希望在VI窗口改變時,修改第2個子狀態欄的寬度,而其它的子狀態欄寬度保持不變,應該如何設置呢?單擊“還原”按鈕,使窗口回到圖 16所示的狀態。如圖 20所示,單擊圖中所示的紅色Splitter,勾選Splitter Sticks Right,此時再次改變窗口的大小將會改變第2個子狀態欄的寬度。

                                                               LabVIEW程序界面的佈局 - statemice - Change

                                                                                             圖20 設置Splitter屬性

        同理,設計工具欄如所示。圖中使用的按鈕都是LabVIEW自帶的按鈕樣式,需要使用Type Def.自定義控件加以替換。程序將工具欄分爲2個部分:操作按鈕部分和幫助部分。而對比圖 19可以看出,將最上層的Splitter顏色設置爲與Pane的底色一致,這樣可以隱藏Splitter。

                                                                 LabVIEW程序界面的佈局 - statemice - Change

                                                                                                圖 21 設置Splitter屬性

        LabVIEW運行對每一個Pane設置不同的背景色,確保Pane的獨立性。如圖 22所示,在界面上放置不同的控件以豐富界面顯示效果,勾選Tab控件和Graph控件的右鍵快捷屬性:Fit Control to Pane。因爲Graph控件大小的改變對整個界面的佈局沒有影響,因此將界面的Splitter屬性設置爲當Pane變化時修改Graph的大小就可以了。

                                                                 LabVIEW程序界面的佈局 - statemice - Change

                                                                                                             圖22 VI前面板

       如前所述,對任一個程序而言都有一個最低的分辨率要求,同時也存在着一個最小的界面要求,確保在最小的界面上能夠將所有控件完整顯示出來。調整整個VI前面板窗口的大小,確保所有的控件均能夠完整顯示。按下Ctrl+I鍵打開VI Properties屬性面板,選擇Windows Size頁,如圖 23所示。單擊“Set to Current Panel Size”,單擊OK按鈕。

                                                                 LabVIEW程序界面的佈局 - statemice - Change

                                                                                                        圖23 Windows Size屬性頁

       再次改變VI的前面板大小,可以看出整個界面的佈局並不受Panel大小的影響,能夠正常顯示。因此,界面的分辨率自適應問題的解決並不是一蹴而就的,而是需要在程序界面設計階段就加以考慮和佈局的。

Ø  在程序可接受的最低分辨率的顯示器上開發;

Ø  劃分Panel的區域,並且明確各個區域的功能;

Ø  儘量至少選擇一種大小可伸縮的控件(ListBox、Tab、Multicolumn Listbox、Table、Tree、Chart、Graph、Picture、Sub Panel等);

Ø  儘可能地使用Splitter劃分不同的區域,對部分Splitter而言可以將其背景色設置爲與Pane的背景色一致以隱藏Splitter;

Ø  設置Splitter的屬性,明確Splitter的變化方式;

Ø  設置Pane的屬性(顏色、是否顯示滾動條等);

Ø  設置Panel的最小顯示大小;

Ø  結合Type Def.和Strict Type Def.控件,完善控件的擺放和顯示效果;

Ø  將Splitter的Lock屬性設置爲True。

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