華表CELL組件的應用
更新時間:2006年12月17日 00:00:00 作者:
南京天相軟件有限公司 朱孝兵
本人所在單位于二○○二年購買了Cell組件,此期間使用Cell組件開發(fā)了不少項目,現(xiàn)將自己使用的一些感受及經(jīng)驗整理成文,拋磚引玉之作,期待得到大家指點。
安 裝 篇
Cell組件是遵循ActiveX標準的控件,很容易安裝到自己的開發(fā)環(huán)境中。
1、安裝華表公司的Cell組件。
2、打開DELPHI,選擇ComponentImport ActiveX Control…菜單。
3、在Import ActiveX窗體中選擇Cell5.2 ActiveX Control Module選項,點擊最下面的【Install…】按鈕。
4、在Package窗體中點擊【Compile】、【Install】按鈕,退出時選擇不保存。
5、在控件區(qū)的ActiveX頁中出現(xiàn)一個Cell圖標,表示安裝成功。
6、直接將Cell圖標拖到Form中即可使用。
7、Cell組件提供了幾種開發(fā)環(huán)境中的Demo,可以直接照辦使用,那基本就是一個現(xiàn)成的產品。
初 級 篇
初期使用Cell組件進行二次開發(fā),主要用于表格套打、表格計算、表的控制等功能。
1、表格套打
許多行政管理部門在發(fā)放證書或格式文件管理過程中,對套打功能要求是比較高的。南京建工系統(tǒng)發(fā)放的建筑工程竣工備案證書以前就是用Word排個模版,但是實際內容與模版預留空間不符時,或者多敲了換行鍵,整個格式就亂套了,工作人員又要重新排版,反復打印、調試,真是浪費時間、浪費紙張、浪費精力。我們就用Cell組件做了一個模版,結合業(yè)務系統(tǒng)自動提取工程概況,現(xiàn)在用戶點擊工程名稱,馬上就在屏幕上看到備案證書全部內容,各單元格中的文字可以用調整大小、自動換行等方法控制展現(xiàn),并且只打印原來要手工填寫的內容,大大地提高了工作效率和正確率。這點在金山WPS和微軟Word、Excel都沒有實現(xiàn)。
屏幕登記界面 套打預覽效果
技術提示:對套打中要控制單元格內容是否打印,有兩種方法:一是最終用戶進入單元格屬性直接設置。二是開發(fā)人員使用SetCellPrintHide命令控制打印機是否打印。
2、表格計算
這一點與Excel的計算功能類似,就不多說了。
3、表的控制
最近寫一個業(yè)務單操作與流程管理對應的軟件項目,要求在一張完整的業(yè)務單上,A登記前半部分申報內容,不能看到后面的記錄和審批內容,B只能查看A登記內容的一部分,且不允許修改A登記的任何內容,但對自己的內容可以輸入,如此一層一層的控制,最后F可以看到全部內容,但仍然不允許修改。經(jīng)過各種試驗比較,最后選用Cell組件完成了這個項目主體框架部分。整個程序只用了80多行語句就實現(xiàn)了控制50多種表,而且結構清晰,可維護性強,足以應付將來增加更多業(yè)務項目表的功能。
A登記(B試驗記錄不可見)
B試驗(A內容部分禁看,全部禁改)
技術提示:我們首先封閉單元格屬性的直接操作,然后結合各個流程點的操作權限和Cell組件的命令來控制表單的展現(xiàn)形式。具體使用的命令如下:SetCellShowHide控制哪些單元格內容在屏幕上顯示或隱藏,SetRowUnHidden/SetRowHidden控制哪些行需要顯示或隱藏,SetCellInput控制哪些單元格是輸入或只讀。
提 高 篇
Cell組件作為一個控件,似乎只能被動地填充數(shù)據(jù),實現(xiàn)表格自身的計算、套打等功能,很長一段時間我們也就這么用了。隨著應用的深入,我們感覺將Cell表格作為宿主程序,根據(jù)用戶在表格中輸入的內容向我們的開發(fā)環(huán)境提出請求很有必要,而且控制更加靈活。經(jīng)過華表公司的介紹,原來奧秘盡在Cell組件提供的自定義函數(shù)中,我們在自定義函數(shù)中可以實現(xiàn)一些表格無法實現(xiàn)的功能,包括界面控制和后臺數(shù)據(jù)庫處理,使Cell組件完全與我們的開發(fā)環(huán)境融為一體,最大限度地發(fā)揮Cell組件的功能和表格的便利。
在From的Create事件中定義函數(shù)接口。
procedure TForm1.FormCreate(Sender: TObject);
var
strFun: WideString;
begin
strFun := ''"天相函數(shù)" String txInterFace(double n)'';
Cell1.DefineFunctions(strFun); //將自定義函數(shù)添加至CELL中
strFun := ''"天相函數(shù)" Double txGetDb(double n)'';
Cell1.DefineFunctions(strFun);
End;
在Cell的自定義函數(shù)事件CalcFunc中定義函數(shù)的實現(xiàn)功能。CalcFunc事件根據(jù)表格中輸入內容確認時立即觸發(fā)的機制實現(xiàn)與開發(fā)環(huán)境的互動。而Cell內置函數(shù)對CalcFunc事件無效,華表公司在這點上設計的非常合理。
procedure TForm1.Cell1CalcFunc(Sender: TObject; const name: WideString;
rettype, paranum: Integer);
begin
if name=' txInterFace' then //執(zhí)行界面操作的自定義函數(shù)
begin
Application.CreateForm(TForm2, Form2);
Form2.ShowModal;
Form2.Free;
Cell1.SetFuncResult(1, ''調用窗體成功!'', 1);
//由于函數(shù)定義返回類型為string,所以實際返回‘調用窗體成功!'
end;
if name=''txGetDb'' then //執(zhí)行數(shù)據(jù)庫操作的自定義函數(shù)
with DataModal do
begin
if spTmp.Active then spTmp.Close;
// spTmp是ADOStoredProc的實例。返回從存儲過程獲取的數(shù)據(jù)
spTmp.ProcedureName:= ''PJC_SET_TRPT'';
spTmp.Parameters.Refresh;
spTmp.Parameters.ParamValues[''@XBH'']:= ''1010'';
spTmp.Parameters.ParamByName(''@RBH'').Direction:= pdOutput;
spTmp.ExecProc;
Cell1.SetFuncResult(spTmp.Parameters.ParamValues[''@RBH''], '''', 0);
spTmp.Close;
end;
end;
下面是實際使用情況。
在Cell表格中輸入“=”號,彈出公式框,通過“?”按鈕選擇txInterFace函數(shù)或直接輸入txInterFace函數(shù),最后選擇“√” 按鈕,將立即觸發(fā)CalcFunc事件中的txInterFace函數(shù)執(zhí)行體,彈出Form2窗體,在Form2窗體你可以盡情地做自己的事啦。
使用自定義函數(shù)的另一個好處就是別人沒法拷走你的表格,因為沒有你的程序配合就無法實現(xiàn)表格獨特的功能。
總而言之,我們已經(jīng)利用Cell組件的強大功能解決了許多實際問題。
本人所在單位于二○○二年購買了Cell組件,此期間使用Cell組件開發(fā)了不少項目,現(xiàn)將自己使用的一些感受及經(jīng)驗整理成文,拋磚引玉之作,期待得到大家指點。
安 裝 篇
Cell組件是遵循ActiveX標準的控件,很容易安裝到自己的開發(fā)環(huán)境中。
1、安裝華表公司的Cell組件。
2、打開DELPHI,選擇ComponentImport ActiveX Control…菜單。
3、在Import ActiveX窗體中選擇Cell5.2 ActiveX Control Module選項,點擊最下面的【Install…】按鈕。
4、在Package窗體中點擊【Compile】、【Install】按鈕,退出時選擇不保存。
5、在控件區(qū)的ActiveX頁中出現(xiàn)一個Cell圖標,表示安裝成功。
6、直接將Cell圖標拖到Form中即可使用。
7、Cell組件提供了幾種開發(fā)環(huán)境中的Demo,可以直接照辦使用,那基本就是一個現(xiàn)成的產品。
初 級 篇
初期使用Cell組件進行二次開發(fā),主要用于表格套打、表格計算、表的控制等功能。
1、表格套打
許多行政管理部門在發(fā)放證書或格式文件管理過程中,對套打功能要求是比較高的。南京建工系統(tǒng)發(fā)放的建筑工程竣工備案證書以前就是用Word排個模版,但是實際內容與模版預留空間不符時,或者多敲了換行鍵,整個格式就亂套了,工作人員又要重新排版,反復打印、調試,真是浪費時間、浪費紙張、浪費精力。我們就用Cell組件做了一個模版,結合業(yè)務系統(tǒng)自動提取工程概況,現(xiàn)在用戶點擊工程名稱,馬上就在屏幕上看到備案證書全部內容,各單元格中的文字可以用調整大小、自動換行等方法控制展現(xiàn),并且只打印原來要手工填寫的內容,大大地提高了工作效率和正確率。這點在金山WPS和微軟Word、Excel都沒有實現(xiàn)。
屏幕登記界面 套打預覽效果
技術提示:對套打中要控制單元格內容是否打印,有兩種方法:一是最終用戶進入單元格屬性直接設置。二是開發(fā)人員使用SetCellPrintHide命令控制打印機是否打印。
2、表格計算
這一點與Excel的計算功能類似,就不多說了。
3、表的控制
最近寫一個業(yè)務單操作與流程管理對應的軟件項目,要求在一張完整的業(yè)務單上,A登記前半部分申報內容,不能看到后面的記錄和審批內容,B只能查看A登記內容的一部分,且不允許修改A登記的任何內容,但對自己的內容可以輸入,如此一層一層的控制,最后F可以看到全部內容,但仍然不允許修改。經(jīng)過各種試驗比較,最后選用Cell組件完成了這個項目主體框架部分。整個程序只用了80多行語句就實現(xiàn)了控制50多種表,而且結構清晰,可維護性強,足以應付將來增加更多業(yè)務項目表的功能。
A登記(B試驗記錄不可見)
B試驗(A內容部分禁看,全部禁改)
技術提示:我們首先封閉單元格屬性的直接操作,然后結合各個流程點的操作權限和Cell組件的命令來控制表單的展現(xiàn)形式。具體使用的命令如下:SetCellShowHide控制哪些單元格內容在屏幕上顯示或隱藏,SetRowUnHidden/SetRowHidden控制哪些行需要顯示或隱藏,SetCellInput控制哪些單元格是輸入或只讀。
提 高 篇
Cell組件作為一個控件,似乎只能被動地填充數(shù)據(jù),實現(xiàn)表格自身的計算、套打等功能,很長一段時間我們也就這么用了。隨著應用的深入,我們感覺將Cell表格作為宿主程序,根據(jù)用戶在表格中輸入的內容向我們的開發(fā)環(huán)境提出請求很有必要,而且控制更加靈活。經(jīng)過華表公司的介紹,原來奧秘盡在Cell組件提供的自定義函數(shù)中,我們在自定義函數(shù)中可以實現(xiàn)一些表格無法實現(xiàn)的功能,包括界面控制和后臺數(shù)據(jù)庫處理,使Cell組件完全與我們的開發(fā)環(huán)境融為一體,最大限度地發(fā)揮Cell組件的功能和表格的便利。
在From的Create事件中定義函數(shù)接口。
procedure TForm1.FormCreate(Sender: TObject);
var
strFun: WideString;
begin
strFun := ''"天相函數(shù)" String txInterFace(double n)'';
Cell1.DefineFunctions(strFun); //將自定義函數(shù)添加至CELL中
strFun := ''"天相函數(shù)" Double txGetDb(double n)'';
Cell1.DefineFunctions(strFun);
End;
在Cell的自定義函數(shù)事件CalcFunc中定義函數(shù)的實現(xiàn)功能。CalcFunc事件根據(jù)表格中輸入內容確認時立即觸發(fā)的機制實現(xiàn)與開發(fā)環(huán)境的互動。而Cell內置函數(shù)對CalcFunc事件無效,華表公司在這點上設計的非常合理。
procedure TForm1.Cell1CalcFunc(Sender: TObject; const name: WideString;
rettype, paranum: Integer);
begin
if name=' txInterFace' then //執(zhí)行界面操作的自定義函數(shù)
begin
Application.CreateForm(TForm2, Form2);
Form2.ShowModal;
Form2.Free;
Cell1.SetFuncResult(1, ''調用窗體成功!'', 1);
//由于函數(shù)定義返回類型為string,所以實際返回‘調用窗體成功!'
end;
if name=''txGetDb'' then //執(zhí)行數(shù)據(jù)庫操作的自定義函數(shù)
with DataModal do
begin
if spTmp.Active then spTmp.Close;
// spTmp是ADOStoredProc的實例。返回從存儲過程獲取的數(shù)據(jù)
spTmp.ProcedureName:= ''PJC_SET_TRPT'';
spTmp.Parameters.Refresh;
spTmp.Parameters.ParamValues[''@XBH'']:= ''1010'';
spTmp.Parameters.ParamByName(''@RBH'').Direction:= pdOutput;
spTmp.ExecProc;
Cell1.SetFuncResult(spTmp.Parameters.ParamValues[''@RBH''], '''', 0);
spTmp.Close;
end;
end;
下面是實際使用情況。
在Cell表格中輸入“=”號,彈出公式框,通過“?”按鈕選擇txInterFace函數(shù)或直接輸入txInterFace函數(shù),最后選擇“√” 按鈕,將立即觸發(fā)CalcFunc事件中的txInterFace函數(shù)執(zhí)行體,彈出Form2窗體,在Form2窗體你可以盡情地做自己的事啦。
使用自定義函數(shù)的另一個好處就是別人沒法拷走你的表格,因為沒有你的程序配合就無法實現(xiàn)表格獨特的功能。
總而言之,我們已經(jīng)利用Cell組件的強大功能解決了許多實際問題。
相關文章
企業(yè)郵件管理有新招 網(wǎng)上網(wǎng)下輕松應對
隨著全球化趨勢的到來,市場競爭更加激烈,因此對于企業(yè)來說,信息化、電子商務成為了必需。正是由于中小企業(yè)信息化和電子商務的需求催生了企業(yè)郵箱的需求。2008-12-12觀察:中小網(wǎng)站將漸漸成為互聯(lián)網(wǎng)的主角
2008-07-07域名產業(yè)極速升溫 融入企業(yè)經(jīng)濟發(fā)展戰(zhàn)略
隨著互聯(lián)網(wǎng)的加速發(fā)展,“域名”也在不斷升溫,而近年來各著名的域名搶注、域名開發(fā)以及各級政府對域名的重視,使得域名產業(yè)從萌生到火爆。2009-06-06