張翔宇 蔡文齋 劉劍鋒
摘 要 本文設計了數個通用狀態指示函數,用于解決Windows環境下應用程序中各種狀態指示問題。這些函數利用界面可視組件設計,包含各種狀態指示所需的參數并使用變體數組類型作為輸入。定義了一組公有數據數組作為函數與實際工程應用的內存交換區,調用前將界面元素及協議提示信息傳遞給該交換區,以便于多次調用時調用方式一致。設計了可視條件參數,該參數可控制狀態指示個數。設計了一款調用函數的調試程序,能在實際工程函數調用前給出調用效果。以上函數可結合具體工程項目通信協議快速調用,從而提高開發者效率。
【關鍵詞】狀態指示器 標簽組件 形狀組件 圖形組件 協議
任何控制類或相關應用項目軟件開發時,都會遇到這樣的問題:在通訊協議中,使用某些字節表示狀態變化。這樣的狀態表示字節在通訊協議中可能占幾個字節,字節中每一位代表一種狀態。每個字節就可代表8個具體物理參數狀態。在工程項目中,假定通信協議中有7個狀態字節,那么就有7*8=56種狀態指示,這就需要設計并制作出這56個狀態指示圖標。并以不同的顏色表示相應的狀態(例如,綠色代表正常,紅色代表異常)。當工程項目改變后,通訊協議隨之發生變化。開發者則又要依據工程要求編寫大量的狀態指示代碼。
本文試圖針對形式各異的通訊協議,設計一種在Windows操作系統下的通用狀態指示器,以節省大量的代碼工作量,提高程序開發效率。
現代的開發工具中,可視化狀態指示組件較多,本文以Rad Studio XE10.0中的Delphi語言為例展開討論。
1 狀態指示器基本內容
狀態指示器通常情況下信息表示應該為:狀態輸入值、告警信息級別、告警指示形狀、背景顏色、前景顏色、字體前景顏色、字體背景顏色、可視性控制變量等。
狀態指示器經常使用可視組件的標簽組件、形狀組件、圖形組件來表達。本文使用這三種可視組件制作了4個通用函數來表達工程中各種狀態指示問題。其中,3個函數用于各種“2值”邏輯狀態指示問題,1個函數用于各種告警級別邏輯指示問題。
1.1 “2值”邏輯問題
狀態輸入參數值為典型的“2值”邏輯問題。例如,為0代表正常,為1代表異常。
1.2 告警級別邏輯問題
該信息為多值邏輯問題,例如表示天氣狀況的指示問題,“0”代表晴天,“1”代表小雨,“2”代表中雨,“3”代表大雨等。在這種邏輯下,雨天表示方法就要使用不同顏色。
1.3 其它問題
在使用形狀組件和圖形組件作指示器時,函數參數中啞元應為:狀態輸入參數、形狀參數、狀態指示前景顏色、狀態指示背景顏色,應具備可視控制參數。如果帶Hit支持功能(當鼠標移動到這個圖形時能夠自動指示)則應該設計正確指示標題、錯誤指示標題。
2 通用狀態指示器函數設計
共設計三個函數。此三個函數形式相仿,分別使用Timage組件、Tshape組件和Tlabel組件作為界面可視組件表示狀態指示,其中輸入字節表示一次性處理8種狀態,所以其它啞元參數為動態指針型。
下面以標簽組件Tlabel作為例說明該通用函數形式化參數設計方法。狀態輸入參數為1字節,表示8個指示狀態,該函數調用后同時處理8個狀態指示,狀態信息級別參數表達在異常情況下告警級別。部分代碼段為:
Procedure DisplayLableLamp(
InputB:Byte;//輸入字節
Modellevel:Byte;//狀態信息級別
RzLabel:Array of TRzLabel;//界面可視組件
BackColor:Array of TColor;//背景顏色
FrontColor:Array of TColor;//前景顏色
PenColor:Array of TColor;//字體前景顏色
PenErrColor:Array of TColor;//字體背景顏色
Visible:Array of Boolean;//可視性控制變量
OKCaption:Array of String;//正確提示字符串
ErrorCaption:Array of String);//異常告警提示字符串
來一段實際代碼,判斷輸入某位為1或者0時的處理。
var
i:integer;
begin
if (InputB and $01)=$01 then
begin
RzLabel[0].Color:=FrontColor[0];
RzLabel[0].caption:=OKCaption[0];
RzLabel[0].Font.Color:=PenColor[0];
end
else
begin
Case Modellevel of
0:begin
RzLabel[0].Color:=BackColor[0];
RzLabel[0].caption:=ErrorCaption[0];
RzLabel[0].Font.Color:=PenErrColor[0];
end;
......//其它情況處理代碼略。
end;
......//其它位處理代碼略。
end;
For I:=0 To 7 do
RZlabel[i].visible:=visible0[i];//可視性控制。
3 調用方法
3.1 參數賦值
函數寫為動態數組引入參數形式,在實際使用時,工程開發者首先預留出實際調用實參接口,在調用函數前,首先依據具體工程的協議定義賦值實參變量,將界面對應的標簽或者形狀組件名賦給對應實參變量。
因為函數與開發界面無關,所以在真實調用函數前,才知道哪個指示等代表哪個實體標簽組件或者形狀組件。
3.2 調用代碼
下面為一段真實調用的例子代碼。
//-----------公用變量-------------------
Shape:Array[0..7] of TShape;
RzLabel:Array[0..7] of TRzLabel;
BackColor:Array[0..7] of TColor;
FrontColor:Array[0..7] of TColor;
PenColor:Array[0..7] of TColor;
PenErrColor:Array[0..7] of TColor;
Visible0:Array[0..7] of Boolean;
OKCaption:Array[0..7] of String;
ErrorCaption:Array[0..7] of String;
begin
//CALL 調用按鈕,在實際調用前依據通信協議及界面元素名稱賦值給公用變量。
Shape[0]:= Shape1;//實際形狀組件
Shape[1]:= Shape2;
......
RzLabel[0]:=RzLabel24;//實際標簽組件,界面元素
RzLabel[1]:=RzLabel25;
......
inputB:=RzNumericEdit1.IntValue;//測試輸入數據,或者協議中某狀態字節輸入變量。
Modellevel:=ModellevelByte;//狀態信息級別
Visible0[0]:=RzCheckBox9.Checked;//測試可視控制組件,
Visible0[1]:=RzCheckBox10.Checked;
......
OKCaption[0]:=RzEdit1.Text;//測試正確提示
OKCaption[1]:=RzEdit2.Text;
......
ErrorCaption[0]:=RzEdit9.Text;//測試異常提示
ErrorCaption[1]:=RzEdit10.Text;
......
FrontColor[0]:=RzColorComboBox1.SelectedColor;//測試前景色設置
FrontColor[1]:=RzColorComboBox2.SelectedColor;
.......
BackColor[0]:=RzColorComboBox9.SelectedColor;
BackColor[1]:=RzColorComboBox10.SelectedColor;//測試背景色設置
......
PenColor[0]:=RzColorComboBox17.SelectedColor;//測試字體前景顏色設置
PenColor[1]:=RzColorComboBox18.SelectedColor;
......
PenErrColor[0]:=RzColorComboBox25.SelectedColor;//測試字體背景
PenErrColor[1]:=RzColorComboBox26.SelectedColor;
......
//----------調用函數---------------------
DisplayLableLamp(InputB,
Modellevel,
RzLabel,
BackColor,
FrontColor,
PenColor,
PenErrColor,
Visible,
OKCaption,
ErrorCaption);
end;
3.3 標簽可視化處理
函數參數為動態數組,每一個輸入字節位都對應一個參數值。實際調用時同時控制8個狀態指示。每一個都可以單獨設置表現效果。
下面說明如果應用監控程序中只有22種狀態指示時如何調用函數的方法。注意該函數每次處理8個狀態,可視性控制變量控制到底有幾個顯示。這樣,當只有22位狀態時,函數仍處理為24個狀態指示,開發者需要在界面上放置24個可視組件,調用時將2個多余的可視組件Visible參數設置為假,這樣界面上就只顯示22個狀態指示。這樣,在工程應用中,無論多少狀態指示問題,都可以用這一個函數統一方法處理,不過是多次調用而已。
4 調試樣例編程
為了調試出這個通用函數,設計了一個專用調試界面,通過界面按位輸入組件及其它輸入參數設置可以調出各種指示效果。在應用程序界面設計前,就可以給出各種未來指示效果,這樣在應用程序開發時就提前設計出了實際效果。圖1為某天線伺服控制的監控程序中某8個狀態指示位調用例子效果。
這三個通用函數解決了各種狀態指示問題,特別是使用Tshape和Timage時可以制作為狀態各異的效果。如果希望作出更專業的效果,可以將這些組件換成專業的第三方組件包中的相應組件。例如Raize組件包等,這樣制作出的狀態指示將會更酷炫。
形狀與圖形函數(應用Timage組件和Tshape組件)同理。
5 結語
本文介紹了使用Delphi XE10開發工具設計的一套狀態指示統一函數處理方法,與具體控制工程項目無關。在實際使用中,結合具體控制項目協議定義,只需賦值各參數與界面元素一致。調用時自動給出效果,這種處理方法解決了所有這一類問題。本文給出的調用例子可以給出每一位的表現效果,在正式開發程序之前,就可以提前看到執行效果并觀察各種字體、配色等是否合適。
應用其它語言開發時,如果使用該方法設計出相似的功能函數同樣可以解決各種狀態指示問題,構造的通用函數可在多個工程項目中使用。這將節約大量有關狀態指示需要處理的代碼段編程,大幅提升編程效率。
參考文獻
[1]蔡文齋.實時監控程序的實驗室快速調試開發[J].計算機與網絡,2015(02):58-62.
[2]蔡文齋.全抽象監控軟件實現[J].飛行器測控學報,2009(04):65-68.
[3]王艷平(著).Windows網絡與通信程序設計(第2版)[M].北京:人民郵電出版社,2009(01):203-210.
[4]蔡文齋,王錄選.跟蹤、隨動系統監控軟件設計[J].現代電子技術,2007(03):29-31.
[5]周愛民(著).Delphi源代碼分析[M].北京:電子工業出版社,2004(09):193-205.
[6]蘇春曉,王鵬.基于網絡的數字示波器遠程集中軟件平臺[J].太赫茲科學與電子信息學報,2014,12(06):884-889.
[7]趙曉玲(著).可視化程序設計—Delphi [M].北京:機械工業出版社,2005(01):251-258.
[8]周愛民(著).Delphi源代碼分析[M].北京:電子工業出版社,2004(09):193-205.
[9]Jeffrey Richter(著),王書洪,劉光明(譯).Windows高級編程指南(第3版)[M].北京:清華大學出版社,1999(01):263-269.
[10]朱漢民(著).Delphi7高級應用開發教程[M].北京:科學出版社,2006(01):215-218.
作者簡介
張翔宇(1983-),河北省秦皇島市人。碩士學位。工程師。主要研究方向為遙感信息接收與處理、計算機仿真等。
蔡文齋(1962-),陜西省西安市人。工程碩士。高級工程師。主要研究方向為航天測控工程開發研究、工程控制類應用開發研究,軟件測試等。
劉劍鋒(1972-),黑龍江省綏化市人。博士學歷。高級工程師。主要研究方向為航天測控工程開發研究,遙感信息處理等。
作者單位
1.北京市遙感信息研究所 北京市 100011
2.中國電子科技集團公司第39研究所 陜西省西安市 710065