亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

如何使程序在運行時自動注冊ActiveX控件

2019-11-18 18:06:09
字體:
來源:轉載
供稿:網友
 

編寫Delphi應用程序時,經常會遇到一些ActiveX控件[注:擴展名為OCX的控件或DLL的類型庫],它們為應用程序的開發提供了簡單的操作途徑。然而,這些程序在發布的同時,面臨ActiveX控件注冊問題。解決途徑:一、用安裝程序制作打包文件,往往會給增加程序本身的大小,系統重裝時,則必須重新安裝它;二、用程序本身進行代碼編寫函數的形式處理它。
使用方法分為兩種:
一、直接把可視化的ActiveX控件放到程序中;
二、運行時根據需要實時建立。
如果是直接使用,則應用程序在初始化的過程中會自動尋找、創建所需的ActiveX控件,如果控件沒有注冊,初始化程序會產生一個異常,捕捉并處理這個異常。
在程序Form中加入一個新的方法:
unit UAutoRegActiveX;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComObj; //加入ComObj單元

type
  TAutoRegActiveXFrm = class(TForm)
    PRocedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  protected
    { Public declarations }
    procedure CheckException(Sender: TObject; EAbort: Exception);
  end;

var
  AutoRegActiveXFrm: TAutoRegActiveXFrm;

implementation

{$R *.dfm}

{-------------------------------------------------
標準ActiveX控件中,有兩個函數DLLRegisterServer 、DLLUnRegisterServer可調用,
其中函數用于注冊控件,用于卸載控件。我們可用LoadLibrary裝載DLL/OCX文件,用
GetProcAddress獲取DLLRegisterServer和DLLUnRegisterServer兩個函數的指針,然
后再直接運行這兩個函數即可實現注冊和卸載ActiveX控件的操作,從而代替Windows
系統的RegSvr32.exe實現ActiveX控件的注冊和卸載。
--------------------------------------------------}
{-------------------------------------------------
參數說明:
sOleFileName 一個DLL或OCX文件名;
OleAction 表示注冊操作類型:1表示注冊,0表示卸載
返回值:True表示操作執行成功,False表示操作執行失敗
--------------------------------------------------}
function OLERegister(sOleFileName: String; OleAction: Byte):Boolean;
const
  RegisterOle = 1; //注冊
  UnRegisterOle = 0; //卸載
type
  TOleRegisterFunction = function: HResult; //注冊或卸載函數原型
var
  hLibraryHandle: 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;

{ TAutoRegActiveXFrm }

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);
  end
  else
    application.ShowException(EAbort);
end;
//將CheckException方法賦值給系統Application變量,在主Form的OnCreate事件中。
procedure TAutoRegActiveXFrm.FormCreate(Sender: TObject);
var
  DemoOcx: Variant; //變量聲明
begin
  Application.OnException := CheckException;
  //是否產生類名稱字符串錯誤
  try
    DemoOcx := 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
        Application.MessageBox('控件注冊失敗,程序將無法正常運行',PChar('注冊控件'),MB_OK+MB_ICONERROR);
        Application.Terminate;
      end;
    end;
  end;
end;

end.


上一篇:發掘ListBox的潛力(二):鼠標拖放插入點提示

下一篇:發掘ListBox的潛力(一):自動調整橫向滾動條寬度

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久午夜| 久久综合免费视频| 欧美久久精品午夜青青大伊人| 亚洲人成在线电影| 日韩在线中文字| 最新的欧美黄色| 狠狠久久五月精品中文字幕| 欧美乱人伦中文字幕在线| www.亚洲一区| 国产精品综合久久久| 亚洲国产三级网| 欧美日韩在线免费| 欧美性猛交99久久久久99按摩| 精品一区二区亚洲| 成人福利网站在线观看| 欧美激情一区二区三级高清视频| 中文字幕久精品免费视频| 日韩av免费看| 91麻豆国产语对白在线观看| 一区二区中文字幕| 国产精品99久久久久久久久久久久| 日韩的一区二区| 欧美性猛xxx| 亚洲色图综合网| 欧美色欧美亚洲高清在线视频| 国产精品av免费在线观看| 亚洲国产精品女人久久久| 国产香蕉97碰碰久久人人| 色综合五月天导航| 精品在线观看国产| 欧美在线观看网站| 亚洲高清免费观看高清完整版| 全球成人中文在线| 亚洲人成电影网站| 日本视频久久久| 国产精品第一视频| 国产午夜精品久久久| 国产精品网站大全| 久热爱精品视频线路一| 亚洲国产成人精品女人久久久| 欧美大片网站在线观看| 亚洲国语精品自产拍在线观看| 97国产精品人人爽人人做| 欧美在线观看视频| 97在线视频国产| 国产精品久久久久久久久影视| 欧美日韩精品二区| 91九色国产在线| 亚洲一区二区久久久| 欧美激情精品久久久久久久变态| 成人福利视频在线观看| 97在线看福利| 久久99热这里只有精品国产| 亚洲欧美日韩天堂一区二区| 夜夜嗨av一区二区三区四区| 992tv成人免费视频| 一区二区三区视频在线| 久久综合电影一区| 亚洲精品在线不卡| 国产日韩av在线播放| 欧美精品在线看| 亚洲人成伊人成综合网久久久| 国产精品亚洲自拍| 日本成人精品在线| 91精品国产色综合久久不卡98口| 日韩免费精品视频| 日韩久久午夜影院| 性夜试看影院91社区| 亚洲韩国日本中文字幕| 中文字幕欧美日韩在线| 国产一区二区三区高清在线观看| 亚洲精品动漫100p| 91成人性视频| 国产精品一区二区女厕厕| 国产综合在线观看视频| 欧美黄色小视频| 国产免费观看久久黄| 中国china体内裑精亚洲片| 欧美老女人www| 91超碰中文字幕久久精品| 亚洲国模精品一区| 亚洲乱码国产乱码精品精| 日韩精品欧美国产精品忘忧草| 国产成人精品日本亚洲| 久久久久久国产免费| 欧美日韩高清区| 午夜精品福利视频| 97婷婷大伊香蕉精品视频| 91精品国产成人| 国产日韩欧美自拍| 亚洲女同性videos| 亚洲天堂免费在线| 69影院欧美专区视频| 91精品啪aⅴ在线观看国产| 欧美日韩国产一区在线| 国产精品自拍偷拍| 亚洲成人xxx| 久久影视电视剧凤归四时歌| 亚洲免费精彩视频| 国产精品亚洲第一区| 日韩欧中文字幕| 国产精品久久网| 高清在线视频日韩欧美| 91地址最新发布| 岛国精品视频在线播放| 一区二区三区天堂av| 日韩av三级在线观看| 成人欧美一区二区三区黑人| 亚洲人成网站777色婷婷| 91av视频在线观看| 国产精品电影网| 精品视频久久久久久久| 亚洲精品美女在线观看| 亚洲国产精品久久久| 成人激情视频在线| 欧美色视频日本版| 亚洲免费高清视频| 亚洲成色999久久网站| 久久久精品一区二区三区| 日韩中文字幕在线精品| 国产精品v日韩精品| 久久久久久国产精品三级玉女聊斋| 国产福利视频一区| 精品久久久av| 国产中文字幕91| 亚洲午夜性刺激影院| 国产精品av网站| 久久久久久久久久久久av| 国产精品久久久久久久久久久新郎| 性欧美视频videos6一9| 国产精品美女在线| 黑人巨大精品欧美一区二区一视频| 国产视频在线一区二区| 中文字幕av日韩| 精品视频—区二区三区免费| 亚洲福利在线观看| 日韩激情在线视频| 日韩成人av网| 6080yy精品一区二区三区| 久久偷看各类女兵18女厕嘘嘘| 日韩av在线免费观看一区| 黑人巨大精品欧美一区免费视频| 国产精品一二三在线| 欧美最顶级丰满的aⅴ艳星| 91精品国产99| 成人黄色短视频在线观看| 亚洲久久久久久久久久| 色与欲影视天天看综合网| 亚洲综合av影视| 欧美第一黄色网| 国产亚洲精品美女| 久久国产精品亚洲| 色小说视频一区| 精品福利在线看| 亚洲成人网在线观看| 国产精品久久久久久久久久久新郎| 日本aⅴ大伊香蕉精品视频| 国产香蕉精品视频一区二区三区| 日韩久久午夜影院| 亚洲精品一区av在线播放| 91精品国产九九九久久久亚洲| 亚洲成av人片在线观看香蕉| 中文亚洲视频在线| 久久久免费在线观看|