知识大全 EXE工程和OCX工程的转化

Posted 工程

篇首语:忙于采集的蜜蜂,无暇在人前高谈阔论。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 EXE工程和OCX工程的转化相关的知识,希望对你有一定的参考价值。

EXE工程和OCX工程的转化  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  一 从EXE到OCX工程

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

  ( )准备工作

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

  ( )改变继承关系

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

  ( )把frmMain作为工程的主Form

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

initialization

TActiveFormFactory Create(

ComServer

TActiveFormControl

TActiveFormX

Class_ActiveFormX

OLEMISC_SIMPLEFRAME or OLEMISC_ACTSLIKELABEL

tmApartment);

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

  ( )属性声明

  查看一下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 ;

property BiDiMode;

property BorderIcons;

property BorderStyle;

property ClientHeight;

property ClientWidth;

property TransparentColor default False;

property TransparentColorValue default ;

property Ctl D;

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中有处理程序的声明一下就行了

  ( )更改事件连接

  如果你在TfrmMain的OnPaint事件中写了代码 可以发现 这些代码是不会被执行的 原因何在?打开ActiveFormX pas 找到TActiveFormX的Initialize过程 可以发现如下代码

inherited Initialize;

OnActivate := ActivateEvent;

OnClick := ClickEvent;

OnCreate := CreateEvent;

OnDblClick := DblClickEvent;

OnDeactivate := DeactivateEvent;

OnDestroy := DestroyEvent;

OnKeyPress := KeyPressEvent;

OnPaint := PaintEvent;

  原来问题出在这里 OnPaint事件被delphi吃掉了 改成了执行PaintEvent 怎么搞?把次行注释掉吧 然后再写一个你自己的OnPaint事件处理过程 不要忘了带参数sender

  如 procedure MyPaint(Sender:TObject);

  然后在TfrmMain的OnCreat事件中赋给OnPaint就行了 如 OnPaint:=MyPaint;

  上面列举的几个事件都和OnPaint类似 模仿OnPaint就ok了

  二 从OCX到EXE工程

  ( )OCX工程框架

  综上所述 OCX工程最好不要把ActiveForm作为主Form 而另外生成一个普通Form作为主Form 再按上面所说的方法进行处理 然后其它的数据操作Form也为普通Form 被主Form调用

  ( )转化到EXE工程

cha138/Article/program/Delphi/201311/24829

相关参考

知识大全 如何注册ocx文件

如何注册ocx文件文件Regsvr32用法及情况介绍使用过activex的人都知道,activex不注册是不能够被系统识别和使用的,一般安装程序都会自动地把它所使用的activex控件注册,但如果你拿

先有工程设计图,然后施工建成大厦,这一事实说明__

先有工程设计图,然后施工建成大厦,这一事实说明_____。A、意识产生物质B、意识可以转化为物质C、意识决定物质D、意识创造物质答案:B解析:建造大楼,第一步是搞设计,然后才有大楼的建成,这只能说明意

知识大全 无法使用MSHFLXGD.OCX控件的解决办法

无法使用MSHFLXGD.OCX控件的解决办法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一

知识大全 无法使用MSHFLXGD.OCX控件的一个解决办法

无法使用MSHFLXGD.OCX控件的一个解决办法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 详解两种C#自动实现DLL(OCX)控件注册的方法

详解两种C#自动实现DLL(OCX)控件注册的方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

基因工程在医学方面的应用是制造“超级药物”以消除遗传疾病及癌症、艾滋病一类绝症,其主要方向不包括__

基因工程在医学方面的应用是制造“超级药物”以消除遗传疾病及癌症、艾滋病一类绝症,其主要方向不包括_____。A、采用基因重组技术,使人体恢复胰岛素生产功能,根除糖尿病B、制造抗癌药物,使癌细胞转化为正

知识大全 机械电子工程,电子电气工程和机械工程哪个更好

机械电子工程,电子电气工程和机械工程哪个更好?电子电气专业性更强,学起来比较难,不过好就业,并且目前普遍收入高于机械行业,尤其输变电和建筑电气是高薪行业。机械电子机械工程偏向制造业和弱电自控行业,就业

生物技术是以生命科学为基础,利用生物体和工程原理等生产制品的综合性技术,包括基因工程、细胞工程、酶工程、微生物工程四大领

生物技术是以生命科学为基础,利用生物体和工程原理等生产制品的综合性技术,包括基因工程、细胞工程、酶工程、微生物工程四大领域。生物技术是21世纪技术的核心,生物技术不仅在医学等领域有重要的作用,而且对环

房屋工程保险的含义

房屋工程保险的含义房屋工程保险是承保房屋在建工程和安装工程因为一切不可预料的意外事故或安装不善所造成的损失、费用和责任的保险。房屋工程保险主要包括房屋在建工程一切险和房屋安装工程一切险;此外,房屋装修

知识大全 土方定额在建筑工程和市政工程里一样吗

土方定额在建筑工程和市政工程里一样吗?在哪个里边能高一点?土方定额在建筑和市政字面意思是一样的,但是做法不同,工料机不同,造成单价就不同;市政定额的高,但是有一点你得搞清楚,你的土方工程是建筑工程还是