本人正在学DELPHI,看例题,但实现不了效果,望高手指点一二;)题意:普通窗体只能按住标题才能拖动.那么如何通过窗体的客户区(client区)来实现窗体的拖动呢?答案如下:
[步骤一]在窗体声明中(Type语句后)加入如下事例:
procedure WMNCHitTest(var M:TWMNCHitTest); message wm_NCHitTest;
//估计无法执行与这一句有关![步骤二]在窗体的实现部分(Implement语句后)添加如下语句:
//工程文件名:dragwindow.dpr
procedure TForm1.WMNCHitTest(var M:TWMNCHitTest);
begin
  inherited; {调用默认的事件处理程序}
  if M.Result=htClient then M.Result:=htCaption;
  {如果是在Client区让Windows认为是在Caption区}
end;=================================================================
我编写的程序:
=================================================================
=================================================================
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;type
  TForm1 = class(TForm);
  procedure WMNCHitTest(var M;TWMNCHitTest); message wm_NCHitTest;  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementationprocedure tform1.WMCHitTest(var M: TWMNCHitTest);
BEGIN
  inherited;
  if M.Result = htClient then M.Result :=htcaption;
END;{$R *.dfm}end.
=================================================================
=================================================================
错误提示:
=================================================================
Build
  [Error] Unit1.pas(11): Missing parameter type
  [Error] Unit1.pas(11): Unknown directive: 'wm_NCHitTest'
  [Error] Unit1.pas(13): Unknown directive: 'private'
  [Error] Unit1.pas(15): Unknown directive: 'public'
  [Error] Unit1.pas(17): 'IMPLEMENTATION' expected but ';' found
  [Error] Unit1.pas(22): '.' expected but 'IMPLEMENTATION' found
  [Error] Unit1.pas(11): Unsatisfied forward or external declaration: 'WMNCHitTest'
  [Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
=================================================================

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm1 = class(TForm);
       private
        procedure WMNCHitTest(var M;TWMNCHitTest); message wm_NCHitTest;
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationprocedure tform1.WMCHitTest(var M: TWMNCHitTest);
    BEGIN
      inherited;
      if M.Result = htClient then M.Result :=htcaption;
    END;{$R *.dfm}end.
      [Error] Unit1.pas(11): Missing parameter type
      [Error] Unit1.pas(11): Unknown directive: 'wm_NCHitTest'
      [Error] Unit1.pas(13): Unknown directive: 'private'
      [Error] Unit1.pas(15): Unknown directive: 'public'
    要把定义的过程写在private或者public
     [Error] Unit1.pas(17): 'IMPLEMENTATION' expected but ';' found
      [Error] Unit1.pas(22): '.' expected but 'IMPLEMENTATION' found
    用了中文的标点符号改过来
      

  2.   

    能不能解释这一句的意思?(是一句还是两句,起什么作用)
    procedure WMNCHitTest(var M:TWMNCHitTest); message wm_NCHitTest;
      

  3.   

    照抄,对比一下你错误的地方,也就是一个:和;的问题。unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm1 = class(TForm)
      private
        procedure WMNCHitTest(var M:TWMNCHitTest); message wm_NCHitTest;  public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
    begin
      inherited;
      if M.Result = htClient then M.Result :=htcaption;end;end.