編寫delphi應用程式時,經常會遇到一些activex控制項[注:擴充套件名為ocx的控制項或dll的型別庫],它們為應用程式的開發提供了簡單的操作途徑。然而,這些程式在發布的同時,面臨activex控制項註冊問題。
解決途徑:一、用安裝程式製作打包檔案,往往會給增加程式本身的大小,系統重灌時,則必須重新安裝它;二、用程式本身進行**編寫函式的形式處理它。
使用方法分為兩種:
一、直接把視覺化的activex控制項放到程式中;
二、執行時根據需要實時建立。
如果是直接使用,則應用程式在初始化的過程中會自動尋找、建立所需的activex控制項,如果控制項沒有註冊,初始化程式會產生乙個異常,捕捉並處理這個異常。
在程式form中加入乙個新的方法:
unit uautoregactivex;
inte***ce
uses
windows, messages, sysutils, variants, classes, graphics, controls, forms, dialogs, comobj; //加入comobj單元
type
tautoregactivexfrm = class(tform)
procedure formcreate(sender: tobject);
private
public
protected
procedure checkexception(sender: tobject; eabort: exception);
end;
varautoregactivexfrm: tautoregactivexfrm;
implementation
function oleregister(solefilename: string; oleaction: byte):boolean;
const
registerole = 1; //註冊
unregisterole = 0; //解除安裝
type
toleregisterfunction = function: hresult; //註冊或解除安裝函式原型
varhlibraryhandle: thandle; //由loadlibray返回的dll或ocx控制代碼
hfunctionaddress: tfarproc; //dll或ocx中的函式控制代碼,由getproaddress返回
regfunction: toleregisterfunction; //註冊或解除安裝函式指標
begin
result := false;
//開啟檔案,返回dll或ocx控制代碼
hlibraryhandle := loadlibrary(pchar(solefilename));
if (hlibraryhandle > 0) then //dllakg ocx控制代碼正確
try//返回註冊或解除安裝函式指標
if (oleaction = registerole) then //返回註冊函式指標
hfunctionaddress := getprocaddress(hlibraryhandle,pchar(''dllregisterserver''))
else //返回解除安裝函式指標
hfunctionaddress := getprocaddress(hlibraryhandle,pchar(''dllunregisterserver''));
if (hfunctionaddress <> nil) then //判斷註冊或解除安裝函式是否存在
begin
regfunction := toleregisterfunction(hfunctionaddress); //獲取操作函式的指標
if regfunction >=0 then //執行註冊或解除安裝操作,返回值》=0表示執行成功
result := true;
end;
finally
freelibrary(hlibraryhandle); //關閉已開啟的檔案
end;
end;
procedure tautoregactivexfrm.checkexception(sender: tobject;
eabort: exception);
begin
if eabort is eolesyserror then
begin
if hresult(eolesyserror(eabort).errorcode) = regdb_e_classnotreg then
oleregister(''d:/flash.ocx'',1);
endelse
end;
procedure tautoregactivexfrm.formcreate(sender: tobject);
vardemoocx: variant; //變數宣告
begin
//是否產生類名稱字串錯誤
trydemoocx := createoleobject(''demo.demo'');
except
on eabort:eolesyserror do
if hresult(eabort.errorcode) = co_e_classstring then
begin
if oleregister(''d:/flash.ocx'',1) then
demoocx := createoleobject(''demo.demo'')
else
begin
end;
end;
end;
end;
end.
如何使程式在執行時自動註冊ActiveX控制項
編寫delphi應用程式時,經常會遇到一些activex控制項 注 擴充套件名為ocx的控制項或dll的型別庫 它們為應用程式的開發提供了簡單的操作途徑。然而,這些程式在發布的同時,面臨activex控制項註冊問題。解決途徑 一 用安裝程式製作打包檔案,往往會給增加程式本身的大小,系統重灌時,則必須...
程式執行時間
要獲得乙個c語言程式的執行時間,常用的方法是呼叫標頭檔案time.h,其中提供了clock 函式,可以捕捉從程式開始執行到clock 被呼叫時所 耗費的時間。這個時間單位是clock tick,即 時鐘打點 同時還有乙個常數clk tck,給出了機器時鐘每秒所走的時鐘打點數。於是為了獲 得乙個函式f...
程式執行時間
時間限制 1000 ms 記憶體限制 32768 kb 長度限制 100 kb 判斷程式 standard 來自 小小 要獲得乙個c語言程式的執行時間,常用的方法是呼叫標頭檔案time.h,其中提供了clock 函式,可以捕捉從程式開始執行到clock 被呼叫時所 耗費的時間。這個時間單位是cloc...