发信人: liudq() 
整理人: windfire(2000-12-05 20:06:27), 站内信件
 | 
 
 
发信人: icefh (冰原)
 信  区: RAD
 标  题: Delphi的Tips(三)
 发信站: '紫金飞鸿' (Fri May  1 11:34:44 1998) , 转信
 
     我在用Delphi做程序时, 碰到这样一个问题, 就是有若干个Form在OnCreate 事件里
 具有相同的代码, 每次都要写一遍, 很是麻烦,后来我就将这段代码写成了一个 公用
 的Procedure, 这似乎是解决了问题,不过要在每一个Form的OnCreate事件里面都 
 要写句话来调用这个Procedure, 还是麻烦。现在,我想出了一个好办法
 
 
   实现这个方法并不难,让我们从Form谈起,在Delphi里,每建一个Form,
 它都是从Tform这个类继承下来的,OnCreate事件就是发生在执行构造函数
 以后,我的方法就是让我自己的代码执行在Form的构造函数执行之后,
 OnCreate事件发生之前,注意:让它自动执行,这样,我们就不用写那些
 重复的代码了,具体实现的办法是创建一个新类TMyForm, 让它继承自Tform
 在执行完构造函数后,让它执行自己的代码,然后修改所有需要执行这段
 代码的Form,让它继承自我们建的TMyForm就行了
 
 
     首先,建一个公用的Unit, 我通常把它命名为u_global.pas
 
 
 unit U_global;
 
 interface
 uses   SysUtils,classes,inifiles,forms,
        StdCtrls,explbtn,controls,DB,wwDBComb,DBTAbles;
 type
   TMyForm = class (TForm)
   protected
     constructor Create(Aowner: TComponent); override;
   end;
 
 
 implementation
 
 constructor TMyForm.Create(Aowner: TComponent);
 var
 i:integer;
 begin
   inherited Create( AOwner );
   with self do begin
     for i := 0 to ComponentCount-1 do begin
       if (Components[i] is TButton)  then
        (Components[i] as TControl).Cursor := 1;
       If Components[i] is TLabel then begin
        Tlabel(Components[i]).autosize:=false;
        Tlabel(Components[i]).autosize:=True;
       end;
     end;
   end;
 end;
 
 
 然后, 将原来Form中的从TForm继承改为从TMyForm继承,就象这样
 
 
 type
   TForm1 = class(TMyForm)
  .......
 
 --
 
                           /\           
   我在冰雪原中         // /\  \\       
        跋涉         / / /  |  \ \ \    
      远方的路啊    /^^^^--冰原--^^^^\  
       在哪里?    /__________________\ 
 
 ※ 来源:·紫金飞鸿 bbs.njupt.edu.cn·[FROM: 202.119.236.104]
 
 
 ---------------------------------------------------------------------- ----------
 
 [返回首页] [分类讨论区] [全部讨论区]
  -- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.167.200]
  | 
 
 
 |