我现在用的是Delphi 7.
在下列代码中(很简单的一个消息响应):
-------------------------------------------------------------------------
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;type
TForm1 = class(TForm)
private
{ Private declarations }
procedure WMPaint(var Msg: TWMPaint); message WM_PAINT;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.WMPaint(var Msg: TWMPaint);
begin
messagebeep(0);
inherited;
end;end.-------------------------------------------------------------------------《delphi 5 开发人员指南》说(具体见P119):在
procedure TForm1.WMPaint(var Msg: TWMPaint)中写了inherited,是为了让Windows完成他本该完成的事情,如果不写"inherited",Windows就没办法画窗体,即窗体不会显示出来。但是我屏蔽了inherited后,发现窗体依旧能显示,和写了inherited没有区别。我不知道是我理解有误还是Delphi 5与 Delphi 7的区别。我现在手头上没有delphi 5,就没办法实验。请知道的兄弟说说。
如果你有过VC经验的话就很好理解,《delphi 5 开发人员指南》的意思应是如果你的代码改变了窗体的DC,你不重画窗体是不能看到改变DC的效果的,而你的消息没有inherited的话,消息被你拦下,无论你怎样form.Repaint都没用的。
没做过具体实验,有错的话请原谅!!
偶没用过VC.:(原话是:
为了证明inherited的作用,可以在清单5 - l中把WMPaint( )方法中的inherited去掉,即代码变成:
procedure TForm1.WMPaint(var Msg: TWMPaint);
begin
messagebeep(0);
end;因为这样Windows就没有机会对WM_PAINT消息进行基本的处理,所以,窗体就不会被画出来。
屏蔽inherited后,窗口依旧能显示,只是重画有问题。个人认为D5那里翻译有误(当时也误导了我-_-)
确实没错。
窗体的"显示"和"画"区别在哪里呢?望指教。