电竞比分网-中国电竞赛事及体育赛事平台

分享

ActiveX控件在Delphi中的使用方法

 Kenshin0_0 2016-09-09

在開(kāi)始一切工作之前,請(qǐng)確保ActiveX控件已經(jīng)注冊(cè)到計(jì)算機(jī),請(qǐng)運(yùn)行系統(tǒng)安裝目錄下面“registeractivex.bat”。

在Delphi6.0中,先要把控件安裝進(jìn)去才能使用。

在菜單上選擇Component

選擇“Import ActiveX Control...”,打開(kāi)一個(gè)對(duì)話盒

按“Install...”按鈕后,詢問(wèn)要把控件加載到哪個(gè)包(Package)中。

按“OK”

按“Compile”,編譯這個(gè)包。

在工具欄上將出現(xiàn)下面兩個(gè)圖標(biāo),注意,如果上面“Palette Page”中選擇的不是“Standard”,這兩個(gè)圖標(biāo)將出現(xiàn)在其他工具頁(yè)。

左邊的控件是主要的Visual Graph ActiveX控件,右邊那個(gè)是屬性列表窗口。

新建一個(gè)程序(Application),選擇工具欄上左邊那個(gè)Visual Graph ActiveX控件,在應(yīng)用程序主窗口上用鼠標(biāo)拉框創(chuàng)建一個(gè)控件,這個(gè)控件的缺省名為vgctrl1。


第一步:填寫下面的代碼

procedure TForm1.FormShow(Sender: TObject);
begin
vgctrl1.Design( '' );
end;

這句程序執(zhí)行后,將在控件中設(shè)計(jì)一個(gè)新的Visual Graph視圖文件,控件支持Design(設(shè)計(jì))和Run(運(yùn)行)兩個(gè)函數(shù),無(wú)論接下來(lái)要干什么,一開(kāi)始必須執(zhí)行這兩個(gè)函數(shù)其中一個(gè),在繪圖版本中,多用Design函數(shù),用戶將可以用鼠標(biāo)在控件窗口上編輯圖形;在工業(yè)監(jiān)控等領(lǐng)域一般多用Run函數(shù),用戶不能用鼠標(biāo)直接編輯圖形,但用鼠標(biāo)點(diǎn)擊畫面上不同的圖形時(shí)會(huì)有各種控制事件發(fā)生,而且某些圖形還會(huì)產(chǎn)生動(dòng)作。如果要打開(kāi)一個(gè)視圖文件,參數(shù)是文件名。


第二步:在窗口上放一個(gè)按鈕Button1,雙擊這個(gè)按鈕,編寫下面的代碼

procedure TForm1.Button1Click(Sender: TObject);
var
ASheet : ISheet;
AShape : IUnit;
begin
ASheet := vgctrl1.vg.ActiveSheet;
AShape := ASheet.AddUnit( nil, 'Rect' );
AShape.SetBounds( 0, 0, 100, 100 );
AShape.Text := 'Hello World!'
end;

ActiveSheet是視圖文件的當(dāng)前頁(yè)面(頁(yè)面類),Visual Graph圖形系統(tǒng)支持多個(gè)頁(yè)面,當(dāng)前畫圖的工作都是在ActiveSheet上實(shí)現(xiàn)的,一般應(yīng)用中只要一個(gè)頁(yè)面就夠了,但是如果視圖文件是作為圖庫(kù)來(lái)用,它里面可能頁(yè)面就多了。

AddUnit是頁(yè)面類的函數(shù)成員,在ASheet頁(yè)面上添加一個(gè)文字單元,寬度和高度都是100。這句程序執(zhí)行后,用鼠標(biāo)點(diǎn)擊新生成的圖形,可以在上面輸入字符,或者用鼠標(biāo)移動(dòng)這個(gè)圖形,改變它的大小等。由于AddUnit返回的類型是通用的IUnit。

Text是基本圖形單元類的屬性成員,通過(guò)它修改圖形的文字屬性。


第三步:在窗口上再放一個(gè)按鈕Button2,雙擊這個(gè)按鈕,編寫下面的代碼

procedure TForm1.Button2Click(Sender: TObject);
begin
vgctrl1.vg.NewUnit( nil, 'Line' );
end;

NewUnit是視圖類的命令函數(shù),執(zhí)行這句程序后,可以在畫面上用鼠標(biāo)畫線。


第四步:下面,我們要給控件加上相應(yīng)的事件,例如右鍵事件。

procedure TForm1.vgctrl1RButtonDown(Sender: TObject; X, Y: Double);
var
ASheet : ISheet;
AUnit : IUnit;
begin
ASheet := vgctrl1.vg.ActiveSheet;
AUnit := ASheet.UnitAtPoint( X, Y, nil );
ShowMessage( '您在圖形:' + AUnit.Name + ' 上按下了右鍵!' );
end;

UnitAtPoint是頁(yè)面類的函數(shù)成員,返回當(dāng)前鼠標(biāo)位置處的圖形單元。我們一般在右鍵事件上掛上菜單,用這種辦法我們就能知道當(dāng)前要對(duì)什么圖形對(duì)象進(jìn)行操作,然后,根據(jù)不同的圖形對(duì)象,產(chǎn)生不同的菜單內(nèi)容。此處也可以用下面的寫法:
AUnit := ASheet.UnitAtCursor( nil ),這樣也得到當(dāng)前鼠標(biāo)位置所在的圖形。


第五步:上面這個(gè)程序有個(gè)漏洞,如果我們沒(méi)有首先單擊Button1按鈕創(chuàng)建一個(gè)圖形,那么這里的AUnit就是空,將使得最后一行程序出錯(cuò),因此,要修改為:

procedure TForm1.vgctrl1RButtonDown(Sender: TObject; X, Y: Double);
var
ASheet : ISheet;
AUnit : IUnit;
begin
ASheet := vgctrl1.vg.ActiveSheet;
AUnit := ASheet.UnitAtPoint( X, Y, nil );
if AUnit <> nil then
ShowMessage( '您在圖形:' + AUnit.Name + ' 上按下了右鍵!' );
end;


第六步:下面我們添加元件。在窗口上再放一個(gè)Visual Graph ActiveX控件,把它設(shè)法放到看不到的地方(但是Visible屬性不能設(shè)置成False)。修改FormShow代碼

procedure TForm1.FormShow(Sender: TObject);
begin
vgctrl1.Design( '' );
vgctrl2.Run( vgctrl1.DefaultPath + 'controls.tbl' );
end;

這里所指的controls.tbl在Visual Graph安裝目錄的bin子目錄下,此處編寫時(shí)要把路徑寫全。

在窗口上再放一個(gè)按鈕Button3,雙擊這個(gè)按鈕,編寫下面的代碼

procedure TForm1.Button3Click(Sender: TObject);
begin
vgctrl1.vg.NewUnit( vgctrl2.vg, 'button' );
end;

NewUnit是視圖類的命令函數(shù),執(zhí)行這句程序后,可以在畫面上用鼠標(biāo)畫出按鈕的形狀來(lái)。實(shí)際上,這句程序執(zhí)行后,將從當(dāng)前指定的元件庫(kù)(vgctrl2)中尋找相應(yīng)名字的頁(yè)面。可以放置若干個(gè)控件,打開(kāi)多個(gè)圖庫(kù)文件。如果需要用程序添加“button”這個(gè)元件,就執(zhí)行vgctrl1.vg.ActiveSheet.AddUnit( vgctrl2.vg, 'button' )。


第七步:下面我們給上面的按鈕增加一個(gè)雙擊事件,為它增加自定義屬性MyProp

procedure TForm1.vgctrl1DblClick(Sender: TObject);
var
ASheet : ISheet;
AUnit : IUnit;
begin
ASheet := vgctrl1.vg.ActiveSheet;
AUnit := ASheet.UnitAtCursor( nil );
if AUnit <> nil then
begin
if CompareText( AUnit.type_, 'button' ) = 0 then
AUnit.SetPropertyValue( 'MyProp', '1234' );
end;
end;

不同類型的元件,用Type屬性來(lái)區(qū)分。SetPropertyValue是圖形單元類的函數(shù),如果元件已經(jīng)有了MyProp這個(gè)屬性,就修改這個(gè)屬性的值。GetPropertyValue函數(shù)可以返回一個(gè)屬性的值。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多