何在?打开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了。
2 从OCX到EXE工程
(1)OCX工程框架
综上所述,OCX工程最好不要把ActiveForm作为主Form,而另外生成一个普通Form作为主Form,再按上面所说的方法进行处理。然后其它的数据操作Form也为普通Form,被主Form调用。
(2)转化到EXE工程
只要你按(1)做了,问题就非常好办。生成一个普通工程,把OCX工程除ActiveForm以外的所有Form加进工程就行了。ok,搞定!
EXE工程和OCX工程的转化(2002/5/30 三金 版权所有)