a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > Delphi > 正文

用DELPHI開發(fā)自動化服器

2019-11-18 18:30:02
字體:
供稿:網(wǎng)友
 

自動化是從一個應用程序內(nèi)部自動控制另一個應用程序的方法,例如下面的代碼.
PRocedure CreateNewWord;
var
  WordObj: Variant;
begin
  WordObj := CreateOleObject('Word.Basic'); {此函數(shù)聲明于ComObj單元}
  WordObj.AppShow;
  WordObj.FileNew;
end;
  這段代碼將會打開WORD,并自動建立一個新的文檔(當然前提是你的機子上安裝了WORD),這看來很有趣,也是一種非常有用的功能.那么如何讓我們的程序也擁有類似WORD等的自動化功能并能讓其它任何語言開發(fā)的程序?qū)ξ覀兊某绦蜻M行自動化呢?用DELPHI來實現(xiàn)非常簡單.

  這篇文章將會以實例形式一步步的來說明如何開發(fā)一個簡單的自動化服務器.

  新建一個普通的應用程序,將工程保存為AutoSrv.bpr.在主窗體上放一個Edit控件,并保存為MainForm.pas,在這里我們打算給這個程序加上對窗口標題,窗體顏色,和Edit控件文本的自動化控制(當然這實現(xiàn)的功能很少,但對于講解如何開發(fā)自動化服務器程序足夠了),在主窗口中加入如下代碼:(注意:請自行將這些函數(shù)和過程的聲明加入TForm1的public區(qū))
function TForm1.GetCaption: string;
begin
  result := Self.Caption;
end;

procedure TForm1.SetCaption(ACaption: string);
begin
  Self.Caption := ACaption;
end;

procedure TForm1.SetColor(AColor: TColor);
begin
  Self.Color := AColor;
end;

procedure TForm1.SetEditText(AText: string);
begin
  Self.Edit1.Text := AText;
end;
  然后我們來給這個程序加上自動化的功能,點擊New Items按鈕,在彈出的New Items窗口中點擊ActiveX選項卡,選擇Automation Object點擊OK按鈕,在彈出的Automation Object Wizard窗口中CoClass Name一項中輸入MyAutoSrv, Delphi就會自動生成一個AutoSrv_TLB.pas文件(類庫)和實現(xiàn)類庫接口類的單元,將這個新的單元保存為AutoSrvClass.pas

  現(xiàn)在這個程序已經(jīng)成為一個自動化服務器了,我們再來為其加上自動化的接口函數(shù):
(1)點擊View->Type Libray菜單,在Type Library Editor選擇IMyAutoSrv接口,點擊New Property,選擇其屬性為Read|Write,并把其命名為Caption,Type設定為BSTR.
(2)點擊New Method,將其命名為SetColor,點擊右邊的Parameters選項卡,點擊ADD為新添的接口函數(shù)添加一個參數(shù),將參數(shù)名設為AColor,參數(shù)Type設為OLE_COLOR.
(3)再次點擊New Method,將其命名為SetEditText,以上面的方法為其添加一個參數(shù),將參數(shù)名設為AText,參數(shù)Type設為BSTR.

  最后添加上接口函數(shù)的實現(xiàn)代碼就OK了:
在AutoSrvClass.pas的Uses部分添加上MainForm,并將其代碼改為如下代碼.
unit AutoSrvClass;

{$WARN SYMBOL_PLATFORM OFF}

interface

uses
  ComObj, ActiveX, AutoSrv_TLB, StdVcl, MainForm;

type
  TMyAutoSrv = class(TAutoObject, IMyAutoSrv)
  protected
    function Get_Caption: WideString; safecall;
    procedure Set_Caption(const Value: WideString); safecall;
    procedure SetColor(AColor: OLE_COLOR); safecall;
    procedure SetEditText(const AText: WideString); safecall;

  end;

implementation

uses ComServ;

function TMyAutoSrv.Get_Caption: WideString;
begin
  Result := Form1.GetCaption;
end;

procedure TMyAutoSrv.Set_Caption(const Value: WideString);
begin
  Form1.SetCaption(Value);
end;

procedure TMyAutoSrv.SetColor(AColor: OLE_COLOR);
begin
  Form1.SetColor(AColor);
end;

procedure TMyAutoSrv.SetEditText(const AText: WideString);
begin
  Form1.SetEditText(AText);
end;

initialization
  TAutoObjectFactory.Create(ComServer, TMyAutoSrv, Class_MyAutoSrv,
    ciMultiInstance, tmApartment);
end.
  運行這個程序一次,將會自動注冊為自動化服務器.可以在注冊表中的HKEY_CLASSES_ROOT主鍵下面找到其相關的注冊信息.

  上面演示了如何開發(fā)一個自動化服務器,在這里我們將調(diào)用它.
  新建一個程序,添加一個Button,在其VAR區(qū)聲明一個Variant變量:  AutoSrv: variant
再在Button1中添加如下代碼.
procedure TForm1.Button1Click(Sender: TObject);
begin
  AutoSrv := CreateOleObject('AutoSrv.MyAutoSrv'); {這個字符串就是自動化服務器的工程名加上CoClass Name}
  Self.Caption := AutoSrv.Caption;
  AutoSrv.Caption := 'HEHE';
  AutoSrv.SetColor(CLRed);
  AutoSrv.SetEditText('HAHA');
end;
  其中的CreateOleObject函數(shù)將會返回一個IDispatch類型的接口,正是IDispatch接口讓我們的程序可以對自動化服務器接口的調(diào)用進行后期連接,比如我們在上面添加一句AutoSrv.Hello,程序也能被編釋通過,但在執(zhí)行時就會出錯. 使用Variant在執(zhí)行效率上會比直接使用接口聲明要慢一些.
  運行并點擊按鈕,可以看到自動化服務程序被加載,并按我們的代碼設置了窗體色和EDIT1中的字串,呵呵,是不是很簡單啊?


上一篇:《參透delphi》書評

下一篇:Delphi與匯編雜談(2)

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

新聞熱點

疑難解答

圖片精選

網(wǎng)友關注

主站蜘蛛池模板: 亚洲精品视频在线免费 | 毛片免费在线 | 久久六月 | 亚洲成人av在线 | 亚洲精品日韩激情在线电影 | 久久久久久久久久久成人 | 我和我的祖国电影在线观看免费版高清 | 国产免费黄色大片 | 欧美日韩亚洲国内综合网 | 精品国产一区二区三区久久久 | 日韩视频网站在线观看 | 中文字幕第31页 | 日韩黄色在线 | 久久亚洲天堂 | 日韩激情在线观看 | 91精品视频国产 | 免费观看特级毛片 | 操操操操操操操操操操操操操操 | 黄色在线观看 | 丝袜+亚洲+另类+欧美+变态 | 亚洲区在线 | 日本黄色免费观看 | 国产精品极品美女在线观看免费 | www.久久久久久久久久久久 | 美国一级黄色片 | 国产精品视频在线观看 | 91免费版在线观看 | 日韩毛片免费视频 | hd国产人妖ts另类视频 | av在线影院 | 黄色网址在线免费观看 | 亚洲综合在线播放 | 在线一区二区三区视频 | 不用播放器的免费av | 99精品网 | 亚洲免费观看视频 | 国产成人影院在线观看 | 操人在线观看 | 精品91| 欧美成人精品 | 国产精品一区二区三 |