1.virtual、dynamic、abstract关键字
virtual 表示是虚拟方法; dynamic 表示是动态方法, 这两类方法的共同点是都可以被覆盖(override)。
在代码中调用一个指定的虚拟方法时编译器并不知道它的地址,编译器通过建立虚拟方法表(VMT)来查找在运行时的函数地址。所有的虚拟方法在运行时通过VMT来调度,一个对象的VMT表中除了自己定义的虚拟方法外,还有它的祖先的所有的虚拟方法,因此虚拟方法比动态方法用的内存要多,但它执行得比较快。
编译器为每一个动态方法指定一个独一无二的数字,用这个数字和动态方法的地址构造一个动态方法表(DMT)。不像VMT表,在DMT表中仅有它声明的动态方法,并且这个方法需要祖先的DMT表来访问它其余的动态方法。正因为这样,动态方法比虚拟方法用的内存要少,但执行起来较慢,因为有可能要到祖先对象的DMT中查找动态方法。
abstract 表示是抽象方法;是没有实现的方法,并且必须是virtual或dynamic方法,即在abstract前面必须有virtual或dynamic关键字,其实现部分在派生类中。
2.注册热键Ctrl+Enter
定义一个全局变量f_HotKey,一个过程procedure hotykey(var msg:TMessage); message WM_HOTKEY;