网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
EXE工程和OCX工程的转化
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12
下载{$ArticleTitle}原创论文样式

1 从EXE到OCX工程

此类转化有一个常用的也可以说较笨的的方法,把EXE工程主Form上的所有元素和其事件处理程序都拷贝过来。此法虽说稳妥,但麻烦的一塌糊涂。容易让人头大。下面着重介绍一个比较快捷省事的办法,通过类的继承来实现转化。概括来说,就是把EXE工程的主Form直接作为OCX工程的主Form,并把其父类由TForm改为TActiveForm。详细介绍如下。

(1)准备工作

在开始之前,最好把EXE工程的所有文件如.pas、.dfm(工程.dpr等除外)拷到一个新的目录下。如果不想这样做,也可以把OCX工程保存到同一目录,但不要和EXE工程重名,以免覆盖。生成一个ActiveForm(注意:此保持空白,不要往其上放任何组件),为了便于说明,设其name为ActiveFormX,单元文件存为ActiveFormX.pas,同时保存OCX工程。假设原来主Form的name为frmMain,单元文件为MainForm.pas.

(2)改变继承关系

打开MainForm.pas,找到TfrmMain类的声明部分:把TfrmMain = class(TForm)改为TfrmMain = class(TActiveFormX)

(3)把frmMain作为工程的主Form

打开ActiveFormX.pas,找到initialization 部分,如下所示:

initialization

TActiveFormFactory.Create(

ComServer,

TActiveFormControl,

TActiveFormX,

Class_ActiveFormX,

1,

'''',

OLEMISC_SIMPLEFRAME or OLEMISC_ACTSLIKELABEL,

tmApartment);

把第五行中TActiveFormX改为TfrmMain,这样OCX工程的主Form就成了原来EXE工程的主Form,即TfrmMain。

(4)属性声明

查看一下delphi源码,可以看到下面的继承链条:

TCustomForm->TCustomActiveForm->TActiveForm

TCustomForm->TForm

TForm的部分published属性在TActiveForm未被声明,而这些属性存在于它们共同的父类TCustomForm中,并且在public部分。所以,你如果在属性编辑器中改变了frmMain的这些属性,delphi就会从当前类按TActiveFormX->TCustomActiveForm->TCustomForm顺序在published部分查找并设置这些属性,而这三个父类published部分并未包含这些属性。这样,delphi将提示地址错误。所以,只要在TActiveFormX中声明这些属性,问题即可解决。以On开头的事件属性也是同样的道理。打开ActiveFormX.pas,把以下代码拷

到TActiveFormX的声明部分即可。

published

property Action;

property Align;

property AlphaBlend default False;

property AlphaBlendValue default 255;

property BiDiMode;

property BorderIcons;

property BorderStyle;

property ClientHeight;

property ClientWidth;

property TransparentColor default False;

property TransparentColorValue default 0;

property Ctl3D;

property UseDockManager;

property DefaultMonitor;

property DockSite;

property DragKind;

property DragMode;

property Enabled;

property ParentFont default False;

property FormStyle;

property HelpFile;

property Icon;

property Menu;

property ObjectMenuItem;

property ParentBiDiMode;

property Position;

property Visible;

property WindowState;

property WindowMenu;

property OnCanResize;

property OnClose;

property OnCloseQuery;

property OnConstrainedResize;

property OnDockDrop;

property OnDockOver;

property OnEndDock;

property OnGetSiteInfo;

property OnHide;

property OnHelp;

property OnMouseWheel;

property OnMouseWheelDown;

property OnMouseWheelUp;

property OnResize;

property OnShortCut;

property OnShow;

property OnStartDock;

property OnUnDock;

对于上面所列的事件属性,也不必全部都声明。frmMain中有处理程序的声明一下就行了。

(5)更改事件连接

如果你在TfrmMain的OnPaint事件中写了代码,可以发现,这些代码是不会被执行的。原因

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号