使用Delphi快速開發ActiveX控制項 收藏 ActiveX控制項也就是一般所說的OCX控制項,它是ActiveX技術的一部分。ActiveX是微軟公司推出的基於元件物件模型COM的技術,包括對Windows 32位應用編程介面(Win32 API)和元件物件模型的一系列擴充和增強,目標是把電腦案頭環境與網際網路環境整合起來,同時保護在Windows技術中現有的開發投資。微軟的ActiveX技術根本上就是修改過的OCX技術,使它能夠跨越Internet,主要是使用WWW來傳遞控制項。 ActiveX控制項可以被整合到很多支援ActiveX的應用當中去,或者直接用來擴充應用的功能,這些支援ActiveX的應用程式套件括C++ Builder、Delphi、Visual dBASE、 Visual Basic、Visual C++、Internet Explorer、Netscape Navigator等。ActiveX控制項還可以使用在網際網路上,在網頁上使用它來發布資訊、處理與使用者的互動,但是需要使用支援ActiveX的瀏覽器才能閱讀這些網頁。目前已經開發出來的ActiveX控制項越來越多,由於ActiveX控制項具有很好的特性,我們可以在編程的時候選擇使用合適的控制項來加快自己的應用開發。可以不誇張地說,ActiveX控制項是Windows平台編程必不可少的法寶。 使用ActiveX控制項是相對比較簡單的。但是,開發ActiveX控制項並不是一件簡單的事情,必須要熟悉而不只是瞭解ActiveX技術才能開發出好的ActiveX控制項。而COM、OLE等ActiveX技術對於一般的程式員來說,是比較複雜難懂的。所以,ActiveX控制項的開發人員一般都是“老鳥”層級的程式員。 但是如果您有了Inprise公司的Borland Delphi,那又另當別論了。Delphi作為Windows平台上最優秀的程式開發工具之一,為ActiveX控制項的開發提供了強有力的支援,讓您輕鬆地開發ActiveX控制項。Delphi的開發人員僅僅需要瞭解一些ActiveX控制項的簡單知識,就可以使用Delphi提供的工具來快速開發自己的ActiveX控制項。本文詳細介紹了利用Delphi所提供的工具來快速開發ActiveX控制項的技巧。 一、ActiveX控制項 要開發ActiveX控制項,我們先得簡單瞭解一下ActiveX控制項的一些相關知識。在Delphi中,一個ActiveX控制項由如下幾個部分組成:VCL(可視化構件庫)控制項、屬性、方法、事件,以及一個或者多個相關的類型庫,其中每個部分都有各自的作用。現在對每個部分介紹如下: 1、VCL構件 在Delphi中,一個ActiveX控制項是由一個或者多個VCL構件經過封裝以後得到的。所以,要使用Delphi來開發ActiveX控制項,必須先得開發出或者選擇要進行封裝的VCL構件。也正是由於這個原因,我們可以將Delphi裡大量優秀的VCL構件封裝成ActiveX控制項,從而可以在別的不能夠直接使用VCL構件的開發工具(如Visual Basic、Visual C++)裡也能夠使用到這些控制項啦! 但是,在Delphi裡可以用來做ActiveX控制項的VCL構件必須是TWinControl的後代。如果想用一個TGraphiControl的子類做ActiveX控制項,在大多數情況下只需要把它的基類變為TCustomControl即可。有的VCL構件是被註冊成非ActiveX控制項的,例如EditControl,這些控制項也不能做ActiveX控制項。 2、類型庫 類型庫包含了控制項的類型定義資訊,提供了比介面更多的詳細資料,是控制項向它的宿主程式提供服務資訊的一種途徑。類型庫的目的是為其他應用和編程工具提供關於它包含的構件對象的資訊。開發ActiveX控制項時,Delphi把類型庫資訊存入一個.TLB檔案中及一個對應的Pascal檔案(.TLB檔案的Pascal語言版本),編譯時間類型庫將作為資源鏈入DLL或者EXE中。 類型庫的元素包括:(1)類型庫資訊:包括類型庫的總體資訊和特徵、當前類型庫引用的其他類型庫;(2)構件類:代表整個ActiveX控制項,包含了提供給客戶應用的介面;(3)介面屬性和方法、事件;(4)枚舉類型:一種用作資料類型的相關常量,可以用在類型庫的其他地方定義屬性和方法。 Delphi提供了一個類型庫編輯器,用於觀察或修改類型庫,見圖1,可以使用它來增加、修改、刪除類型庫的各種元素。從圖1類型庫的介面上可以看到,左邊是一個樹形結構,各種元素的成員作為子節點出現;右邊是根據左邊所選中的元素類型顯示不同的頁簽,可以對該元素的一些屬性進行編輯。 3、屬性、方法和事件 VCL構件的屬性、方法和事件自然就變成為ActiveX控制項的屬性、方法和事件。控制項的屬性,例如顏色、標籤等;控制項的方法是請求控制項執行某些動作;事件則是控制項給宿主程式的一個通知,發生了一些事情。 4、屬性頁面 ActiveX控制項所帶的屬性頁面可以讓控制項的使用者查看和修改控制項的屬性。您可以把幾個屬性捆綁在一個屬性頁面上,也可以只為一個屬性提供一個屬性頁面。 二、快速開發ActiveX控制項 下面就讓我們來使用Delphi具體做一個ActiveX控制項。 假設我們現在面臨的問題是,在使用Visual C++(VC)開發一個應用的時候,需要使用一個Grid控制項來處理介面的事情,而使用VC所提供的FlexGrid控制項又很麻煩,發現Delphi裡的TStringGrid構件非常合適。但是TStringGrid是Delphi裡的VCL構件,又不能直接被VC使用,怎麼辦呢?不用愁,我們只要把TStringGrid封裝成為VC可以使用的ActiveX控制項就可以解決這個問題了。 Delphi為ActiveX控制項的開發提供了兩個嚮導: * ActiveX控制項嚮導可以讓你把一個VCL構件封裝成為一個ActiveX控制項。下面將會使用到這個嚮導。 * ActiveForm嚮導則可以把幾個VCL構件封裝成為一個ActiveX控制項或者開發一個完整的ActiveX應用。 在Delphi當中把TStringGrid封裝成一個ActiveX控制項的過程如下: 首先,要啟動ActiveX控制項嚮導,選擇File菜單裡的New命令,在彈出的對話方塊裡選擇ActiveX頁簽,然後雙擊ActiveX Control表徵圖即可,2所示。嚮導中的第一個域要求選擇一個要進行封裝的VCL構件,點擊選擇TStringGrid。其他幾個域取預設值即可,如果需要包含版本資訊等其他資訊,也可以選上。點擊OK按鈕,嚮導將產生一個Delphi的ActiveX控制項開發項目StringGridXControl1,包括以下幾個的檔案: 1. 一個ActiveX專案檔,包含了啟動、初始化一個ActiveX控制項所需要的代碼。通常是不需要修改這個檔案的。 2. 一個類型庫檔案(TLB副檔名),定義和實現了ActiveX控制項向外所提供的介面、屬性、方法和事件。Delphi專門為這個檔案提供了一個Pascal版本的檔案,而且自動維護這兩個檔案的一致性。 3. 一個ActiveX實現的檔案,使用了Delphi ActiveX架構(DAX)定義和實現了這個ActiveX控制項,具體實作類別型庫裡定義的介面。這個檔案是我們經常需要修改的。DAX是Delphi對ActiveX控制項的COM規約的實現方式。 4. 如果選擇了包括一個“關於”對話方塊的話,還有一個對應的對話方塊實現檔案。 Delphi的ActiveX控制項嚮導根據所封裝的VCL構件的屬性、方法和事件產生了ActiveX控制項相應的屬性、方法和事件。但是它沒有把VCL構件使用非OLE類型(如集合、數組等)的屬性、方法和事件轉換過去。例如,TStringGrid的Options屬性是集合類型的,RowHeights是數群組類型的,在控制項嚮導所產生的屬性中就沒有這些屬性。但是有時候偏偏這些屬性、方法和事件是很重要的,這時就需要手工添加一些屬性、方法和事件! 現在為這個ActiveX控制項添加一個BRowSelect屬性,這個屬性本來是TStringGrid的Options屬性的子屬性,控制Grid是否處於行選中狀態。在StringGridXControl1項目裡開啟ActiveX實現檔案StringGridImp1.pas,選擇Edit菜單裡的Add To Interface命令(注意:只有開啟了實現檔案,這個命令才能使用),Delphi將彈出增加介面對話方塊,3所示。在對話方塊裡的Interface項選擇Properties/Methods-IStringGridX,然後在Declaration裡寫入BRowSelect屬性的聲明(如果你選中了對話方塊裡的Syntax Helper選項,Delphi將隨時提示你應該輸入的內容): Property BRowSelect:WordBool; 點擊OK後,這個屬性的相關資訊將自動加入到控制項的實現檔案、類型庫檔案和對應的Pascal檔案中。因為控制項的介面是雙向的,所以在Pascal檔案裡使用了讀和寫兩個方法來實現控制項的屬性。 Delphi自動在類型庫裡加入了以下聲明: property BRowSelect: WordBool read Get_BRowSelect write Set_BRowSelect; 這說明了:對於BRowSelect這個屬性,有一個讀方法Get_BRowSelect,一個寫方法Set_BRowSelect。 Delphi自動在控制項的實現檔案裡加入了對BRowSelect屬性的讀和寫存取方法的聲明和實現: function Get_BRowSelect: WordBool; safecall; procedure Set_BRowSelect(Value: WordBool); safecall; 這時候這兩個方法的實現體是空的,必須得自己填入具體實現的代碼: function TStringGridX.Get_BRowSelect: WordBool; begin //以下代碼由自己根據需要編寫 //獲得現在是否處於行選中狀態 with FDelphiControl do Result:=goRowSelect in Options ; end; procedure TStringGridX.Set_BRowSelect(Value: WordBool); begin //以下代碼由自己根據需要編寫 //設定行選中狀態 with FDelphiControl do begin if Value then Options:=Options+[goRowSelect] else Options:=Options-[goRowSelect]; end; end; 這時候,使用類型庫編輯器來查看類型庫,可以看到新增加的BRowSelect屬性。類似的,我們還可以往ActiveX控制項裡加入更多的屬性。 還可以往ActiveX控制項加入新的方法、事件,加入的方法與加入屬性類似。而且加入以後,Delphi也會自動往相應的檔案中加入對應方法和事件的聲明和實現,具體的實現體還得自己編寫,這裡不再多說。 我們可以注意到,Delphi自動產生了把VCL構件封裝成ActiveX控制項所需的封裝代碼。我們為ActiveX控制項增加新的屬性、方法和事件的時候,只需要在介面方法的實現裡把ActiveX控制項的資料與VCL構件的資料聯絡起來,或者使用VCL構件的方法來完成ActiveX控制項的行為,而基本上不需要關心編寫一個ActiveX控制項的具體細節,例如COM規約等。 前面提到,還可以為ActiveX控制項添加定製的屬性頁面。這裡不必專門添加新的屬性頁面,因為大多數支援ActiveX的IDE編程環境已經預設為每個ActiveX控制項提供了一個包含所有屬性的屬性頁面了,我們使用這個預設的屬性頁面即可。 好了,做好了前面這些工作以後,選擇Project菜單的Build StringGridXControl1命令即可產生我們所需要的ActiveX控制項。在項目的目錄下,我們可以找到StringGridXControl1.ocx這個檔案,這個就是我們的ActiveX控制項啦!把它拷貝到Windows 9x的System目錄或者Windows NT/2000的System32目錄裡面,然後使用命令regsvr32 StringGridXControl1.ocx在系統中註冊這個StringGridX控制項,就可以在VC編程中使用了。 三、小結 由於有了Delphi對開發ActiveX控制項強有力的支援,我們基本不費什麼功夫就很快得到了一個新的ActiveX控制項。Delphi讓使用它來開發ActiveX控制項的開發人員把注意力集中到了作為ActiveX控制項基礎的VCL構件上,而不必過多地關心ActiveX控制項的細節,所以讓對ActiveX技術不是太熟悉的開發人員也能夠享受到開發ActiveX控制項的樂趣,而且也大大豐富了在VC、VB裡開發能夠利用的控制項。 本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/chenyq2008/archive/2008/01/30/2072596.aspx
2008-11-13開發IE控制項ActiveX(Delphi 列印控制項)
文章分類:Java編程 關鍵字: activex ie控制項 fastreport 一直以來都覺得開發IE控制項是一件非常難的事情,都是一些比較資深的程式員開發的,對於開發IE控制項真的是覺得無從下手。
經過這幾天的,查資料,問別人,瞎摸索終於做出了我的第一個IE控制項--汽車電子客票列印控制項。下面按照自己的步驟,記錄一下,以免以後自己都忘了,我這裡是用Delphi7開發的(學校的課程設計時學過,後來一直都沒用過,手生得很),使用了FastReport報表列印控制項(http://fast-report.com/en/),以及Delphi7 WebDeploy發布工具(http://www.2ccc.com/article.asp?articleid=4381):
1、安裝Delphi及外掛程式,由於不會在Delphi上安裝外掛程式,還是費了不少功夫,問別人。
2、建立一個ActiveX工程,我這裡選的是“ActiveX Form”,至於其它的選項,我還真不知道是用來開發什麼的。
3、開發Delphi程式,接下來的事情,就是拖控制項,寫代碼了。其中很多時候需要調試,不知道有沒有什麼好的辦法,自己覺得開發ActiveX控制項,調試還是比較麻煩的,所以,我基本上是先在普通的Application Form上先把一些比較難弄、需要多次的程式寫好,再拷到“ActiveX Form”工程中(詳細的delphi+fastReport的開發過程下面再說)。
4、用WebDeploy發布,之前需要先在“Web deployment options”裡,選擇發布路徑,發布後,會自動產生一個html檔案了一個ocx控制項,其中html裡的代碼還需要自己去調一下,大小啊,位置啊,還有就是object標籤的ocx路徑,最好改成相對路徑,否則好像會報access拒絕的錯誤。
5、用IE開啟這個html,選擇警告中的“允許封鎖的內容”,這樣就會安裝控制項了,它安裝在了“C:/WINDOWS/Downloaded Program Files”這個路徑下,如果需要再次改代碼、調試,你需要從這裡把它右鍵刪除掉(需要關掉這個html頁面,否則刪不掉)
6、接下來你會覺得,安裝的這個控制項的表徵圖有點醜(delphi的預設表徵圖),在project->options->application發現這個東西,還不讓改,怎麼辦,查資料,“http://topic.csdn.net/t/20041021/14/3477746.html”我好像兩種辦法都試了一次,但總是改不了,後來重啟一次,發現這個是已經改掉了。 引用3樓myy()回複於 2004-10-27 10:28:59 得分 30兩種辦法皆可:
1. 用Image Editor開啟 工程名.res 檔案,編輯裡面的“MAINICON”,儲存。
2.寫個 .rc 檔案,內容:
A_MY_ICON ICON E:/MyWork/MyOcx/my.ico
添家加到工程中即可,注意“A_MY_ICON”這個名字按字串排序,
不能排在“MAINICON”後面。
7、還會發現個問題,自己寫的ocx控制項好像體積很大,我自己用了fastReport控制項總共下來ocx有1550k,這麼大,得減肥。接著查資料“http://www.delphibbs.com/keylife/iblog_show.asp?xid=19233”,我好像把那個勾打上,就成了248K了,真的很神奇!如果有時間,再把裡面的包一個一個刪的試試。 引用KeyLife富翁筆記
作者: 木樁
標題: 一步給你的Delphi程式減減肥(從443KB減到34KB)
關鍵字: 減肥 包
分類: 個人專區
密級: 公開
(評分:★ , 回複: 5, 閱讀: 1654) »»
是不是覺得Delphi2006編譯出的檔案都是大塊頭呢?
動不動就300KB,確實麻煩。實際上那是因為檔案裡包含的Packages太多的緣故,下面就教你一種方法,去掉不要的Packages!
選菜單裡的 Project -> Options.. (Shift+Ctrl+F11)
出現Project Options for Project1.exe視窗,在左邊選 Packages
出現如的東西,這樣修改:
1> 將Runtime packages裡的[ ]Build with runtime packages鉤上
2> 將不需要的包去掉就行了。(一般編寫Win32的程式,只要rtl;vcl就行)
如果實在不知道該去哪個,可以在上面的Design packages裡選擇一個包,點Components按鈕就可以查看這個包提供的控制項。如果沒用過這個包,去掉前面的鉤就行了。
8、真實的web應用(目前還沒弄好,弄好後再補上)
下面說一下delphi+fastReport的開發中遇到問題:
1、fastReport根本沒用過,查資料學習:
demo:在官網上下載過來的檔案裡有一些demo可以看
FastReport開發指南:http://download.csdn.net/source/573124
一篇短小文章:http://www.qq08.net/article/2007/1019/article_26559.html
2、在用barCode(條碼控制項)時,總是會報錯,原來除了在報表在放barCode,還需要在form上放一個frxBarCodeObject控制項,(FastReport開發指南中也提到了)。
3、怎麼樣給barCode動態傳Code進去,這裡有個牛人,回答的非常棒http://delphi.ktop.com.tw/board.php?cid=168&fid=916&tid=66419
4、因為自己安裝的是英文版的fastReport,在控制項的預覽列印中,介面是英文,怎麼漢化?
http://www.newasp.net/code/dl004719,這裡也有安裝說明,但我裝的過程似乎不需要那麼複雜, 在/Res檔案夾下,建立一個"Chinese"把那6個源檔案放在裡面,運行fastReport目錄下的recompile.exe選擇好選項,運行編譯,就OK
5、預覽列印的左上方表徵圖是FR的表徵圖,不爽,換!
http://topic.csdn.net/t/20041015/13/3459272.html,但不知道這裡用的是什麼版本,我的是3.07找不到那個源檔案,我發現有另外一個檔案,“frxPreview.pas”(其實搜一下,有三個同名檔案,為了保險起見,我改了兩個我認為需要的地方)
由於項目的需要,近期開始學慣用delphi開發一個軟電話控制項。
以前接觸過一些delphi開發方面的東西(當然都是些皮毛啦),但沒接觸過ocx控制項的開發,在此把一些簡單的東西記下來,一方面以後自己可以再學習,另一方面希望對剛剛學習delphi開發ocx控制項的初學者有所協助,如果有什麼寫的不對和寫的不好的地方,還請各位多多指正,在此先謝謝了。
關於ocx控制項的一些基礎知識在這裡就不說這麼多了,網路上有很多這方面的文章,有興趣的朋友可以到網上去搜搜!!
Delphi整合式開發環境對開發ocx控制項提供了很好的支援,只要簡單的幾步就可以開發出屬於自己的ocx控制項了,下面是delphi開發ocx的一些簡單的步驟:
1、 開啟delphi整合式開發環境,選擇File->new->other,此時彈出一個多頁的視窗,選擇ActiveX頁,選擇ActiveX Form,點擊OK後,彈出工程屬性框,為ActiveX起一個名字,這樣一個ocx控制項的工程就建立好了
2、 儲存工程
這樣一個ocx控制項就建好了,但這個ocx不具備任何功能,不過這時可以對這個ocx進行編譯然後通過web發布,再通過我們就瀏覽器就可以調用這個ocx控制項了,下面介紹下編譯和發布的一些簡單步驟:
1、選擇project->compile project(ctrl+F9)a編譯工程
2、註冊組件:Run->register ActiveX server(說明,當往form中增加新的組件後,編譯完後要重新註冊,不然的話,新加的組件顯示不出來)
3、發布:project->web deploy ......