主窗体和继承窗体

 程序将第一个创建的窗体作为主窗体。如果创建了一个后,在其他窗体尚未创建的时候便释放调,
此时又创建了一个窗体,那么第二次创建的窗体就会变成主窗体了。
 关闭主窗体,程序就认为是终止运行,并且调用 Free 释放掉主窗体资源,进而程序结束退出。
而关闭其他非主窗体,程序只是将其隐藏起来了。

  子窗体会将主窗体的属性方法继承下来,对于主窗体中手动增加的方法(即声明在访问控制级别
private、protected、published、public 中的方法),除非显示的增加 virtual 关键字,并在子
类中显示的使用 override 关键字,否则不会使用多态的方式来继承(即晚绑定的方式)。而窗体的
元素方法(即那些没有任何控制级别关键字限制的方法,如一个窗体的 FormCreate 方法,或者说窗
体根据用户的操作自动生成的方法),会默认的使用多态的方式来继承。

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);  // 子窗体默认会使用多态的的形式继承
  private
    { Private declarations }
  public
    { Public declarations }
    procedure DoSomething;  // 除非使用 virtual 和 override 关键字,否则子窗体不
                 //会以多态的方式继承
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.DoSomething;
begin
  // 除非使用 virtual 和 override 关键字,否则子窗体不会以多态的方式继承
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // 子窗体默认会使用多态的的形式继承
end;

end.

另注:在继承自己的窗体时,最好先将其加入工程,然后再使用向导来创建对应子类,否则
   会存在一个很“隐晦”,而且不易发现,虽然这个错误在运行时并没有发现有什么影
   响,但以防万一。(当用Ctrl+鼠标链接到父类窗体单元,再将其关闭,在鼠标放置
   到子类声明处class后括号中的父类时,编译器的提示信息好想就部能够检测到父类
   的信息了,于是报错了。还有就是创建的方法在使用ctrl + shift + c等自动创建代码
   的情况下,不会自动加入"inherited"关键字,似乎无法实现晚绑定。)

原文地址:https://www.cnblogs.com/spiritofcloud/p/3898367.html