有个控件,界面类的,具有这个功能,仿佛叫TflatButtom之类的,忘了

解决方案 »

  1.   

    给个例子看看:
    ------------------------------
     移动无标题栏窗口
    通过消息的转换可以实现移动无标题栏窗口。当鼠标移动、按下或释放时,会产生
    W M _ N C H I T T E S T消息,当检测到鼠标在窗体中按下的消息(消息值为h t C l i e n t )时,将鼠标在标
    题栏上按下的消息(消息值为h t C a p t i o n )发出,这样就可以拖动窗体了。
    例程S3_12 该例程对移动无标题栏窗口进行了说明
    1) 通过主菜单的File | New Application命令创建一个新工程。
    2) 在F o r m 1的p r i v a t e部分声明过程和W M _ N C H I T T E S T消息:
    t y p e
    TForm1 = class(TForm)
    p r i v a t e
    { Private declarations }
    procedure WMNChitTest(var Msg:TWMNChitTe s t ) ;
    Message WM_NCHITTEST;
    . . .
    3) 将光标定位在类T F o r m 1的定义处,通过鼠标右键菜单Complete class at cursor 或
    C t r l + S h i f t + C热键自动创建W M N C h i t Te s t过程的定义体,添加代码如下:
    procedure TForm1.WMNChitTest(var Msg: TWMNChitTe s t ) ;
    b e g i n
    i n h e r i t e d ;
    if Msg.Result = htClient then
    M s g . R e s u l t : = h t C a p t i o n ; // 消息转换
    e n d ;
    4) 编译、链接和运行程序,测试效果。可以按下A l t + F 4关闭程序。
    5) 读者可以在窗体上增加一个按钮,实现当按下该按钮后就关闭程序。
      

  2.   

    第一个问题:
    procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState;
      X, Y: Integer);
    begin
      ReleaseCapture;
      Perform(WM_SYSCOMMAND,$f012,0);end;
      

  3.   

    可以拦截WM_NCHITEST消息。显然当鼠标按到窗体的标题时就能移到窗体,而你的
    窗体没有标题栏。我们就在WM_NCHITEST消息中,让系统认为当鼠标按到窗体的Client区时总是按到窗体的标题栏,这样就可以移到窗体了。如下:
    .................
    procedure WMNChitTest(var Msg:TMessage);Message,WM_NCHITTEST;
    ..............
    procedure TForm1.WMNChitTest(var Msg: TWMNChitTe s t ) ;
    begin
     inherited ;
      if Msg.Result = htClient then
      Msg.Result:=htCaption ;
    end;
      

  4.   

    写错一个地方:
    procedure TForm1.WMNChitTest(var Msg: TWMNChitTe s t ) ;
    为:
    procedure TForm1.WMNChitTest(var Msg: TMessage) ;