delphi 调用ocx控件6的一个新控件怎么用?

ActiveX控件在Delphi中的使用方法
在开始一切工作之前,请确保ActiveX控件已经注册到计算机,请运行系统***目录下面“registeractivex.bat”。
在Delphi6.0中,先要把控件***进去才能使用。
在菜单上选择Component
选择“Import ActiveX Control...”,打开一个对话盒
按“Install...”按钮后,询问要把控件加载到哪个包(Package)中。
按“Compile”,编译这个包。
在工具栏上将出现下面两个图标,注意,如果上面“Palette Page”中选择的不是“Standard”,这两个图标将出现在其他工具页。
左边的控件是主要的Visual Graph ActiveX控件,右边那个是属性列表窗口。
新建一个程序(Application),选择工具栏上左边那个Visual Graph ActiveX控件,在应用程序主窗口上用鼠标拉框创建一个控件,这个控件的缺省名为vgctrl1。
第一步:填写下面的代码
procedure TForm1.FormShow(Sender: TObject);
vgctrl1.Design( '' );
这句程序执行后,将在控件中设计一个新的Visual Graph视图文件,控件支持Design(设计)和Run(运行)两个函数,无论接下来要干什么,一开始必须执行这两个函数其中一个,在绘图版本中,多用Design函数,用户将可以用鼠标在控件窗口上编辑图形;在工业监控等领域一般多用Run函数,用户不能用鼠标直接编辑图形,但用鼠标点击画面上不同的图形时会有各种控制事件发生,而且某些图形还会产生动作。如果要打开一个视图文件,参数是文件名。
第二步:在窗口上放一个按钮Button1,双击这个按钮,编写下面的代码
procedure TForm1.Button1Click(Sender: TObject);
ASheet : IS
AShape : IU
ASheet := vgctrl1.vg.ActiveS
AShape := ASheet.AddUnit( nil, 'Rect' );
AShape.SetBounds( 0, 0, 100, 100 );
AShape.Text := 'Hello World!'
ActiveSheet是视图文件的当前页面(页面类),Visual Graph图形系统支持多个页面,当前画图的工作都是在ActiveSheet上实现的,一般应用中只要一个页面就够了,但是如果视图文件是作为图库来用,它里面可能页面就多了。
AddUnit是页面类的函数成员,在ASheet页面上添加一个文字单元,宽度和高度都是100。这句程序执行后,用鼠标点击新生成的图形,可以在上面输入字符,或者用鼠标移动这个图形,改变它的大小等。由于AddUnit返回的类型是通用的IUnit。
Text是基本图形单元类的属性成员,通过它修改图形的文字属性。
第三步:在窗口上再放一个按钮Button2,双击这个按钮,编写下面的代码
procedure TForm1.Button2Click(Sender: TObject);
vgctrl1.vg.NewUnit( nil, 'Line' );
NewUnit是视图类的命令函数,执行这句程序后,可以在画面上用鼠标画线。
第四步:下面,我们要给控件加上相应的事件,例如右键事件。
procedure TForm1.vgctrl1RButtonDown(Sender: TO X, Y: Double);
ASheet : IS
AUnit : IU
ASheet := vgctrl1.vg.ActiveS
AUnit := ASheet.UnitAtPoint( X, Y, nil );
ShowMessage( '您在图形:' + AUnit.Name + ' 上按下了右键!' );
UnitAtPoint是页面类的函数成员,返回当前鼠标位置处的图形单元。我们一般在右键事件上挂上菜单,用这种办法我们就能知道当前要对什么图形对象进行操作,然后,根据不同的图形对象,产生不同的菜单内容。此处也可以用下面的写法:
AUnit := ASheet.UnitAtCursor( nil ),这样也得到当前鼠标位置所在的图形。
第五步:上面这个程序有个漏洞,如果我们没有首先单击Button1按钮创建一个图形,那么这里的AUnit就是空,将使得最后一行程序出错,因此,要修改为:
procedure TForm1.vgctrl1RButtonDown(Sender: TO X, Y: Double);
ASheet : IS
AUnit : IU
ASheet := vgctrl1.vg.ActiveS
AUnit := ASheet.UnitAtPoint( X, Y, nil );
if AUnit && nil then
ShowMessage( '您在图形:' + AUnit.Name + ' 上按下了右键!' );
第六步:下面我们添加元件。在窗口上再放一个Visual Graph ActiveX控件,把它设法放到看不到的地方(但是Visible属性不能设置成False)。修改FormShow代码
procedure TForm1.FormShow(Sender: TObject);
vgctrl1.Design( '' );
vgctrl2.Run( vgctrl1.DefaultPath + 'controls.tbl' );
这里所指的controls.tbl在Visual Graph***目录的bin子目录下,此处编写时要把路径写全。
在窗口上再放一个按钮Button3,双击这个按钮,编写下面的代码
procedure TForm1.Button3Click(Sender: TObject);
vgctrl1.vg.NewUnit( vgctrl2.vg, 'button' );
NewUnit是视图类的命令函数,执行这句程序后,可以在画面上用鼠标画出按钮的形状来。实际上,这句程序执行后,将从当前指定的元件库(vgctrl2)中寻找相应名字的页面。可以放置若干个控件,打开多个图库文件。如果需要用程序添加“button”这个元件,就执行vgctrl1.vg.ActiveSheet.AddUnit( vgctrl2.vg, 'button' )。
第七步:下面我们给上面的按钮增加一个双击事件,为它增加自定义属性MyProp
procedure TForm1.vgctrl1DblClick(Sender: TObject);
ASheet : IS
AUnit : IU
ASheet := vgctrl1.vg.ActiveS
AUnit := ASheet.UnitAtCursor( nil );
if AUnit && nil then
if CompareText( AUnit.type_, 'button' ) = 0 then
AUnit.SetPropertyValue( 'MyProp', '1234' );
不同类型的元件,用Type属性来区分。SetPropertyValue是图形单元类的函数,如果元件已经有了MyProp这个属性,就修改这个属性的值。GetPropertyValue函数可以返回一个属性的值。Delphi组件开发教程指南(6)实现一个模拟动画显示控件
我的图书馆
Delphi组件开发教程指南(6)实现一个模拟动画显示控件
&&& 由于最近几天有点小忙,是以没多少时间来继续这个教程指南的编写。好容易捡到一个周末,挤着这个周末,有兴趣的跟着我继续向前走!在走之前,我希望大家先回顾回顾前5章的内容,看看通过前面的5章内容,是否能够扩充点简单的控件,并且能够注册到Delphi中使用了吧!如果还不会的请反复琢磨琢磨,多琢磨几次也就明白那么个理了,这些东西都不是啥难点,我本人觉得,只要你能够认字,没有啥东西是你学不会的!前面的基础讲过了之后,现在开始我想我会通过实现一些控件的编写实例入手来解说控件编写的始末,因为光讲理论,我实在不晓得如何讲,还是一切源于实践中来得快,然后我自己实现的控件,自己的思路也是瞑目了然,也能够更清晰的说出思路等,当然我实现的这些控件未必是我自己使用的组件,可能完全是心血来潮,即时想到的,未必会用于实际项目,同时也由于是临时起意的东西,目的在于教学,所以,在效率和完整度上,可能不会追求完美,有好思路的可以在帖子后面跟进写出自己的思路与实现方式。同时也可以让大家共同进步与学习。
&&& 好了,废话不多说了,进入正题,这次,我没有继续在Edit编辑框上做文章,相反却是想要实现一个能够模拟一个能够显示运动效果的动画控件,这个动画效果,就是类似于Windows登录的那个滚动,以及QQ登录那个反复滚动的效果图那样的!这样的动态图实际上比较多,如果做好了就可以用来模拟实现GIF图片的动画效果了。
先看看实现的效果如:
&&& 首先,我们来分析一下,这个控件的继承方式,这个根据个人需要,如果仅仅作为显示使用,不涉及到太多的消息以及事件响应消息的可以从TGraphicControl继承来实现,如果需要处理一些特殊消息以及句柄的处理的,那么请从TWinControl继承来实现。这里我选择直接从TGraphicControl来实现!
&& 其次,这个动画效果,我们通过什么来实现!这个很容易想到TImagelist,Delphi自己带有的一组图片集合控件,通过这个图片集合,我们可以设定一个延迟时间,每隔多少时间就从ImageList中取得一幅图片然后刷新到客户面前!那么不断的执行这个过程,不就实现了动画效果了哈!
& 那好,现在就开始编写代码,在上回我们的控件包中添加一个新的单元,我取名为DxAnimateControl,然后打一个框架如下
这个框架中,我什么都没写,上面说了,动画通过一个ImageList来取图,所以新建一个ImageList的开放属性,能够在设计期间使用的,所以放在Published域中
property ImageList: TImageL
另外,我们需要一个变量PicIndex,用来存储当前是哪一帧图片。至于那个取图片的重复过程,可以有两种方法来实现,方法一是采用Delphi自己的时钟控件,方法二是采用线程来模拟时钟的效果。我这里为了简单起见,就只用Delphi自己的时钟来实现了,所以需要一个Timer,然后Timer的时钟过程就是取得新的图片,然后通知刷新,这样显示给咱的就是动画效果了。时钟有了还需要一个属性,用来激活或者停止动画的开关,这个开关属性,咱设置为Active。属性定了,就可以写代码了,先实现ImageList赋值的过程
ImageList的设置过程中就会调用一次时钟过程进行一个初始设定,然后我们再看看时钟过程了
时钟过程就是用来取得图片的一个过程,取到图片了之后就调用Invalidate通知刷新,然后就会触发Paint过程,Paint过程相当简单,仅仅就是将取得的图片绘制出来就完事了
procedure TDxAnimateControl.Pbegin
if not bmp.Empty then
Canvas.CopyRect(ClientRect,bmp.Canvas,bmp.Canvas.ClipRect)
else inherited;end;
这个代码目前实现的是相当的简单的。希望大家都能够看懂,其他代码请大家先自己补齐完成,等到下次的时候,再给出所有代码,同时请大家思考,除了ImageList的方式之外,还能通过什么方式来实现这个动画效果。下次我就讲通过另外一种方式来实现这个动画效果了!
馆藏&23386
TA的最新馆藏
喜欢该文的人也喜欢

参考资料

 

随机推荐