報(bào)表的插件技術(shù)及其動(dòng)態(tài)設(shè)計(jì)的論文_第1頁(yè)
報(bào)表的插件技術(shù)及其動(dòng)態(tài)設(shè)計(jì)的論文_第2頁(yè)
報(bào)表的插件技術(shù)及其動(dòng)態(tài)設(shè)計(jì)的論文_第3頁(yè)
報(bào)表的插件技術(shù)及其動(dòng)態(tài)設(shè)計(jì)的論文_第4頁(yè)
報(bào)表的插件技術(shù)及其動(dòng)態(tài)設(shè)計(jì)的論文_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

-本文為網(wǎng)絡(luò)收集精選范文、公文、論文、和其他應(yīng)用文檔,如需本文,請(qǐng)下載-報(bào)表的插件技術(shù)及其動(dòng)態(tài)設(shè)計(jì)的論文本文從網(wǎng)絡(luò)收集而來(lái),上傳到平臺(tái)為了幫到更多的人,如果您需要使用本文檔,請(qǐng)點(diǎn)擊下載按鈕下載本文檔(有償下載),另外祝您生活愉快,工作順利,萬(wàn)事如意!作者:瞿有甜 童寶軍 丁健龍 論文 關(guān)健詞:插件技術(shù)多模板技術(shù) 動(dòng)態(tài)生成技術(shù) 動(dòng)態(tài)報(bào)表 論文摘要:介紹一種藎十插件技術(shù)、輔之以多模板技術(shù)和動(dòng)態(tài)生成技術(shù)的動(dòng)態(tài)報(bào)表設(shè)計(jì)方法,并可實(shí)現(xiàn)與mis無(wú)縫銜接。從而使mis開(kāi)發(fā)的高效性、靈活性、可擴(kuò)展性以及報(bào)表設(shè)計(jì)過(guò)程的簡(jiǎn)易性和智能化程度均有明顯改善和提高。 針對(duì)傳統(tǒng)mis系統(tǒng)開(kāi)發(fā)過(guò)程中報(bào)表設(shè)計(jì)繁瑣、低效等弊端,提出了一種全新的報(bào)表設(shè)計(jì)思想,就是以插件技術(shù)為主,以多模板技術(shù)為輔,結(jié)合報(bào)表動(dòng)態(tài)生成技術(shù),來(lái)實(shí)現(xiàn)對(duì)報(bào)表的動(dòng)態(tài)制作。對(duì)于企事業(yè)單位的數(shù)據(jù)庫(kù)中的任何數(shù)據(jù),可以利用本插件直接進(jìn)行報(bào)表的設(shè)計(jì)并實(shí)現(xiàn)報(bào)表數(shù)據(jù)的輸出,當(dāng)然也可以通過(guò)該插件生成報(bào)表模板并與用戶(hù)的mis系統(tǒng)實(shí)現(xiàn)無(wú)縫的銜接。所以本插件既可以獨(dú)立于mis系統(tǒng)單獨(dú)使用,也可以作為報(bào)表制作工具輔助軟件開(kāi)發(fā)人員進(jìn)行報(bào)表程序的設(shè)計(jì),以提高軟件開(kāi)發(fā)的效率。該插件對(duì)于遺產(chǎn)軟件進(jìn)行報(bào)表功能擴(kuò)充能發(fā)揮其獨(dú)到的作用。 l設(shè)計(jì)思想 這種新的報(bào)表設(shè)計(jì)綜合了多種動(dòng)態(tài)設(shè)計(jì)思想,充分體現(xiàn)了報(bào)表沒(méi)計(jì)中的靈活性和動(dòng)態(tài)性,使報(bào)表的沒(méi)計(jì)思想有了新的 發(fā)展 ,從而大大加快了mis系統(tǒng)的開(kāi)發(fā)速度。 (1)插件技術(shù)為主很多的著名應(yīng)用軟件都采用了這項(xiàng)技術(shù),如adobephotoshop、macromediadreamweaver等,它們都是利用這項(xiàng)技術(shù)來(lái)提高系統(tǒng)的靈活性和可擴(kuò)展性。 (2)多模板技術(shù)為輔多模板技術(shù)也是 現(xiàn)代 應(yīng)用軟件的一貫技巧,它的出現(xiàn)是為了滿足用戶(hù)不同的心理、興趣以及不同的需求變化。用戶(hù)可以根據(jù)自己的需要來(lái)選擇自己喜歡的模板,這樣就再一次擴(kuò)展了系統(tǒng)的功能。 (3)結(jié)合動(dòng)態(tài)生成技術(shù)動(dòng)態(tài)生成技術(shù)即“所見(jiàn)即所得”技術(shù),它能夠給用戶(hù)帶來(lái)更多的直觀性,簡(jiǎn)化了用戶(hù)的操作,使用戶(hù)可以在不需要進(jìn)行任何培訓(xùn)的情況下,只需要用自己的主觀邏輯去操作軟件,就可以得到用戶(hù)所需要的結(jié)果,這項(xiàng)技術(shù)不但給用戶(hù)帶來(lái)了方便,而且為程序員開(kāi)發(fā)報(bào)表的時(shí)候,減少了工作量,縮短了開(kāi)發(fā)時(shí)間,提高了工作效率。 2技術(shù)實(shí)現(xiàn) 現(xiàn)以基于組件技術(shù)、面向?qū)ο缶幊獭⒖梢暬?、有?qiáng)大的數(shù)據(jù)庫(kù)支持的靈活快速開(kāi)發(fā)軟件。以delphi為例,具體介紹一下插件技術(shù)、多模板技術(shù)以及報(bào)表的動(dòng)態(tài)生成等技術(shù)在實(shí)際軟件開(kāi)發(fā)過(guò)程中的應(yīng)用。 21系統(tǒng)結(jié)構(gòu)設(shè)計(jì) 根據(jù)模塊劃分原則,本插件功能如下所示: (1)設(shè)置數(shù)據(jù)源:完成數(shù)據(jù)源設(shè)置工作; (2)報(bào)表模板設(shè)計(jì):模板設(shè)計(jì)又分為直接設(shè)計(jì)和根據(jù)設(shè)計(jì)向?qū)гO(shè)計(jì),考慮到數(shù)據(jù)源的問(wèn)題,設(shè)計(jì)時(shí)又分單表模板沒(méi)計(jì)和多表關(guān)聯(lián)模板設(shè)計(jì); (3)顯示報(bào)表列表:顯示報(bào)表信息。 22主要技術(shù)的實(shí)現(xiàn) (1)插件調(diào)用示意圖(見(jiàn)圖1) 首先將報(bào)表單元文件通過(guò)編譯,生成相應(yīng)的插件文件,然后在開(kāi)發(fā)應(yīng)用系統(tǒng)的時(shí)候預(yù)留一個(gè)特殊的接口,就可以利用這個(gè)接口來(lái)調(diào)用插件文件。 (2)具體實(shí)現(xiàn) 插件是以特定的接口與父應(yīng)用程序交互,這個(gè)接口可以根據(jù)應(yīng)用的需要來(lái)定義。報(bào)表文件制作成相應(yīng)的插件文件。應(yīng)用程序在運(yùn)行時(shí)就會(huì)自動(dòng)檢測(cè)插件目錄,并將檢測(cè)到的報(bào)表插件文件顯示在插件列表中。如果沒(méi)有插件,它就不會(huì)出現(xiàn)在已安裝的插件列表中。插件通過(guò)loadplugin過(guò)程載入到這個(gè)應(yīng)用程序中,這個(gè)過(guò)程在顯示報(bào)表列表窗i:1的formcreate事件中調(diào)用。該過(guò)程使findfirst和findnext函數(shù)在應(yīng)用程序所在目錄中查找插件文件。每找到一個(gè)文件以后,就使用函數(shù)loadplugin過(guò)程將其載入。 loadplugin過(guò)程的部分函數(shù)代碼如下: procedureloadplugin(sr:tsearchrec); type tpluginlnit=procedure(parentiist:tlistbox); stdcall; var libhandle:integer; initproc:tplugininit; begin libhandle:=loadlbrary(pchar(plug+srname); irlibhandle0then begin initproc:=getprocaddress(lbhandle,initplugin): irassigned(injtproc)then begin listbox2itemsaddfsrname); initproc(1istbox1); end else begin messagedlg(文件”+srname+不是一個(gè)合法的插件, mtlnformation,mbok,0): end; end else messagedlg(導(dǎo)入插件+srname+”時(shí)發(fā)生嚴(yán)重錯(cuò)誤!, mterror,mbok,0): end; loadplugin方法展示了插件機(jī)制的核心。首先,插件被寫(xiě)成dll。其次,通過(guò)loadlibraryapi被動(dòng)態(tài)地加載。一旦dll被加載,就需要一個(gè)訪問(wèn)它所包含的過(guò)程和函數(shù)的路徑。api調(diào)用getprocaddress提供這種機(jī)制,它返回一個(gè)指向所需例程的指針。在這個(gè)簡(jiǎn)單的演示中,插件僅僅包含一個(gè)名為initplugin的過(guò)程,如果在dll中沒(méi)有找到請(qǐng)求的例程,getprocaddress將返回n|l,這樣就允許使用assigned函數(shù)測(cè)定返回值。 為了以一種易用的方式存儲(chǔ)指向一個(gè)函數(shù)的指針,有必要為用到的變量創(chuàng)建一個(gè)特定的類(lèi)型。注意,getprocaddress的返回值被存儲(chǔ)在一個(gè)變量中,initproc屬于tplugininit類(lèi)型。下面是它的聲明: type tplugininit=procedure(parentlist:tlistbox); stdcall; 由于過(guò)程存在于dll內(nèi)部,它通過(guò)標(biāo)準(zhǔn)調(diào)用、轉(zhuǎn)換,編譯所有導(dǎo)出例程,因此需要使用stdcall指示字。這個(gè)過(guò)程使用一個(gè)var參數(shù),當(dāng)過(guò)程返回的時(shí)候它包含插件的描述。 要調(diào)用剛剛獲得的過(guò)程,只需要使用保存地址的變量作為過(guò)程名,后面跟上任何參數(shù)。就本文的例子而言,聲明:initproc(1istbox1);將會(huì)調(diào)用在插件中獲得的相應(yīng)過(guò)程,并且初始化報(bào)表列表框listbox1。 23構(gòu)造報(bào)表插件 插件文件是一個(gè)標(biāo)準(zhǔn)的delphidll,dll文件不僅可以讓delphi自身調(diào)用,而且也可以在vc+、vb等其它語(yǔ)言程序中輕松調(diào)用。雖然插件是一個(gè)dll文件,但是不一定要給它一個(gè)dll的擴(kuò)展名。實(shí)際上,一個(gè)原因就足以讓我們有理由改變擴(kuò)展名,當(dāng)父應(yīng)用程序?qū)ふ乙虞d的文件時(shí),新的擴(kuò)展名可以作為特定的文件掩膜。通過(guò)使用別的擴(kuò)展名(如trio)可以在一定程度上確信應(yīng)用程序只會(huì)載入相應(yīng)的文件。 例子插件的代碼是比較簡(jiǎn)單的。部分關(guān)鍵程序代碼在下面已經(jīng)列出。此處initplugin原型與外殼應(yīng)用程序中的tinitplugin類(lèi)型應(yīng)一致,使用附加的export保留字指定該過(guò)程將被導(dǎo)出。被導(dǎo)出的過(guò)程名稱(chēng)也將會(huì)出現(xiàn)在主工程源代碼的exports段中。 unitusjxstbj; jnterface procedureinjtplugjn(parentljst:tlistbox);stdcall: 1mplementation procedureinitplugin(parentlist:tlistbox); begin parentlistitemsaddfbbname): end; 在測(cè)試這個(gè)插件之前,要先把它復(fù)制到相應(yīng)的路徑下(如plug)。最簡(jiǎn)單的辦法就是在主目錄的子目錄下創(chuàng)建插件,然后把輸出路徑設(shè)置為主路徑。 多模板技術(shù)也是動(dòng)態(tài)設(shè)計(jì)中必不可少的一項(xiàng)技術(shù),模板技術(shù)的實(shí)現(xiàn),用戶(hù)可以根據(jù)自己的需求進(jìn)行取舍,擴(kuò)大了用戶(hù)的選擇余地,不僅如此,這項(xiàng)技術(shù)還大大地增強(qiáng)了應(yīng)用軟件的通用性,以滿足不斷發(fā)展的需求。 本文所要介紹的多模板技術(shù),是指在同一張報(bào)表中,使其具備多個(gè)樣式模板,即用戶(hù)可以按自己的需要設(shè)置報(bào)表的字段,并保存為rep文件,并在相應(yīng)的ini文件中寫(xiě)入信息。本系統(tǒng)的模板技術(shù)的實(shí)現(xiàn)主要分為兩個(gè)部分設(shè)計(jì)并保存板和調(diào)用模板(見(jiàn)圖2)。 3報(bào)表動(dòng)態(tài)生成技術(shù)的實(shí)現(xiàn) 報(bào)表動(dòng)態(tài)生成技術(shù)是“所見(jiàn)即所得”技術(shù)的真實(shí)體現(xiàn),是指報(bào)表數(shù)據(jù)已經(jīng)準(zhǔn)備完畢后,無(wú)須手動(dòng)地去設(shè)計(jì)報(bào)表的排版。一切都是由相應(yīng)的報(bào)表程序自動(dòng)的按照需要生成報(bào)表模板,即將dbgrid中的數(shù)據(jù)集合直接映射為報(bào)表文件,并直接預(yù)覽。真正做到了所見(jiàn)即所得,使用戶(hù)界面更加直觀,用程序來(lái)控制報(bào)表排版,更能準(zhǔn)確地進(jìn)行定位,使打印出的報(bào)表更加實(shí)用、美觀。這樣既大大節(jié)省了報(bào)表的設(shè)計(jì)時(shí)間,也提高了應(yīng)用程序的易操作性。 (1)數(shù)據(jù)組織 數(shù)據(jù)組織層通過(guò)adoquery來(lái)向報(bào)表實(shí)現(xiàn)層傳遞打印數(shù)據(jù)。同時(shí)也通過(guò)adoquery向格式定義層的dbgrid和excel對(duì)象傳遞數(shù)據(jù)。為了實(shí)現(xiàn)報(bào)表打印的通用性和靈活性,在此提供一種數(shù)據(jù)的動(dòng)態(tài)組織方案。該方法能靈活實(shí)現(xiàn)動(dòng)態(tài)選擇打印列、調(diào)整打印列順序、加載數(shù)據(jù)(包括空列)到dbgrid中等功能。設(shè)計(jì)一個(gè)dataarrange類(lèi): type tdataarrange=class private proceduremoveup(clbfield:tflatchecklistbox);,記錄上移 proceduremovedown(clbfield:tflatchecklistbox); 記錄下移 procedurecheckall(clbfield:tflatchecklistbox) 選中所有選項(xiàng) procedureadddata(clbfield:tflatchecklistbox; 向dbgrid加載數(shù)據(jù) dbgrid1-tdbgrid;adoquery1:tadoquery); end; 其中adddata方法的實(shí)現(xiàn)函數(shù)如下f0ri:=0toclbfielditemscount-1do begin ifclb fieldcheckedithen begin dbgrid1columnsadd; dbgrid1co1umns【addcount】fieldname:=clbfieldhemsi; end; end; 該方法的好處是:因?yàn)橛脩?hù)對(duì)于報(bào)表數(shù)據(jù)的要求時(shí)有變化,程序員用adoquery組織的數(shù)據(jù)相對(duì)固定;所以需要提供比較靈活的用戶(hù)接el。dataarrange正符合這種要求,既可以讓用戶(hù)自由選擇打印數(shù)據(jù)字段,又可以自由調(diào)整打印先后順序,此外還可以添加空數(shù)據(jù)列。 (2)格式定義 根據(jù)dbgrid中的列數(shù)、列寬、列標(biāo)題、表格數(shù)據(jù)等信息,在報(bào)表實(shí)現(xiàn)層中運(yùn)用treport、tqrshape、tqrdbtext、tqrlabel等類(lèi)的create方法,動(dòng)態(tài)地構(gòu)造報(bào)表初步模型h】。鑒于單個(gè)報(bào)表的特殊性,可以設(shè)立不同的參數(shù)來(lái)描述不同的報(bào)表格式,從而實(shí)現(xiàn)普遍性與特殊性的完美結(jié)合。同時(shí)可以設(shè)計(jì)一個(gè)格式控制面板來(lái)設(shè)定這些參數(shù),使用報(bào)據(jù)友好的操作界面實(shí)現(xiàn)各個(gè)表單的特殊需求,同時(shí)可以保存每次設(shè)定的格式以便重用??刂泼姘逯芯唧w的參數(shù)列表說(shuō)明如下: (3)報(bào)表實(shí)現(xiàn) 通過(guò)數(shù)據(jù)組織層和格式定義層的工作,決定一張報(bào)表的數(shù)據(jù)和格式元素都已經(jīng)確定,剩下的就是如何有效利用這些元素動(dòng)態(tài)實(shí)現(xiàn)報(bào)表的功能。可以運(yùn)用treport、tqrshape、tqrdb-text、tqrlabel等類(lèi)的create方法,構(gòu)造dbgriderepon(dbgrid:tdbgrid;inifilename:string)函數(shù),動(dòng)態(tài)創(chuàng)建報(bào)表打印組件,然后根據(jù)格式定義參數(shù)信息,來(lái)設(shè)定相關(guān)組件的格式屬性參數(shù),從而最終成功地創(chuàng)建所需報(bào)表。具體步驟如下: 1)根據(jù)保存報(bào)表格式定義參數(shù)的文件名inifilename,從ini文件中讀入報(bào)表格式定義參數(shù); 2)創(chuàng)建quickrepl并定義紙張類(lèi)型以及紙張方向,并對(duì)數(shù)據(jù)庫(kù)進(jìn)行綁定; 3)根據(jù)dbgrid中的列名、數(shù)據(jù)列、列寬等信息,創(chuàng)建報(bào)表列標(biāo)題和數(shù)據(jù)列; 4)使用tqrshapecreate(f_reportset_noini)分別創(chuàng)建表格頂部線條、列標(biāo)題與數(shù)據(jù)列問(wèn)的分隔線、數(shù)據(jù)列之間的分隔線,和表格底部線條,并設(shè)置其相關(guān)屬性;5)使用tqrlabe1create(f_reportset_noini)分別創(chuàng)建報(bào)表主標(biāo)題、副標(biāo)題、頁(yè)碼標(biāo)題、時(shí)間標(biāo)題,同

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論