procedure WMncHitTest(var Msg: TWMNCHitTest); message WM_NCHITTEST;procedure TForm1.WMncHitTest(var Msg: TWMNCHitTest);
begin
  Msg.Result := HTCAPTION;
end;

解决方案 »

  1.   

    这样做,模拟按下标题栏的消息type
      TForm1 = class(TForm)
        //.........
      private
        { Private declarations }
        procedure AppMessage(var Msg:TMsg);message WM_LButtonDown; 
      public
        { Public declarations }
      end;procedure TForm1.AppMessage(var Msg:TMsg);
    begin
       SendMessage(Handle,WM_NCLButtonDown,HTCaption,GetMessagePos);
    end;
      

  2.   

    procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
    begin
      inherited;//--------最好加个他
    if M.Result=htClient then
      M.Result := htCaption;
    end;
      

  3.   

    To chechy(chechy):
      這種方法﹐肯定是不行的﹐可以移動﹐但按鈕卻不起作用了﹐我查了一下幫助﹐好像沒有別的適合的返回值
      

  4.   

    To WilliamGui:我试过,所以才贴。我这里按钮可以按,Combobox可以写东西。不受任何影响。
    原因:我只截获Form的消息,并没有截获Form上面控件的消息。
      

  5.   

    to chechy(chechy):你的方法真的可以吗?用WM_NCHITTEST确实可以实现继承自TGraphicControl的控件,但继承自TWinControl的控件自己是窗口,无法获得TForm
    的消息,按钮是可以按,当无法拖动。
    To WillianGui: 现在我是双管齐下,Form用WM_NCHITTEST,TWinControl的用MouseDown手工编。
      

  6.   

    是啊,WilliamGui不是说按钮要能按吗?所以能按,当然就不能拖动了。难道按着还要拖动?
      

  7.   

    试试用onmousemove事件,判断鼠标是否按下了,若按下,就计算鼠标移动的距离,
    form1的x,y就加上鼠标移动的数值,看这样行不行。
      

  8.   

    可以用mouse事件﹐但是沒有邊拖邊移動的畫面﹐可以在mousemove中寫代碼﹐但閃爍的太歷害
      

  9.   

    当鼠标在窗体上按下时产生的消息是htClient,而当鼠标在标题栏上按下时产生的消息是htCaption。所以如果我们把消息值htClient改为htCaption即可实现。具体做法如下:
    1 .声明一个过程ChangeMessageValue(var msg:TWMNCHitTest); message WM_NCHITTEST;
    2 .代码实现:
    Procedure TForm1.ChangeMessageValue(var msg:TWMNChitTest);
    begin
      inherited;
      if htClient=msg.Result then 
        msg.Result:=htCaption;
    end;
    其中,TWMNChitTest是Messages单元中的一个记录。
      

  10.   


    感謝大家的回答﹐大家還是先試試再說﹐
    一個沒邊框的窗口﹐加一個speedbutton的按鈕﹐作為close﹐拖動﹐且支持點擊按鈕退出這個問題困擾了我四五個月﹐不過﹐昨晚我基本上解決了﹐很簡單﹐只寫一句話﹗﹗﹗