zoukankan      html  css  js  c++  java
  • Delphi中拖动无边框窗口的5种方法

    1.MouseMove事件中加入:

    // ReleaseCapture;
    // Perform(WM_SYSCOMMAND, $F017 , 0); 

    2.MouseDown事件中加入:

    // POSTMESSAGE(Self.Handle,WM_LBUTTONUP,0,0);
    // POSTMESSAGE(Self.Handle,274,61458,0); 

    3.MouseDown事件中加入:

    // ReleaseCapture;
    // Perform(WM_SYSCOMMAND, $F012, 0); 

    4.截获WM_NCHITTEST消息

    procedure WMNCHITTEST(var Msg:TWMNCHITTEST);message WM_NCHITTEST; 

    procedure TForm1.WMNCHITTEST(var Msg: TWMNCHITTEST);
    begin
    inherited;
    //Msg.Result:=HTCaption;
    end; 

    5.

    private
    procedure AppMessage(var Msg:TMsg;var Handled:Boolean); 

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    Application.OnMessage:=AppMessage;
    end; 

    procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean);
    begin
    //(GetKeyState(vk_CONTROL) < 0)
    if (Msg.message=WM_LButtonDown) and
    (DefWindowProc(Handle,WM_NCHitTest,
    0,GetMessagePos)=HTClient) and
    (True) then
    begin
    SendMessage(Handle,WM_NCLButtonDown,
    HTCaption,GetMessagePos);
    //发送鼠标在标题栏内按下的消息
    Handled:=true;
    end;
    end;



    在MousDown事件中写
    ReleaseCapture;//释放鼠标控制区域
    SendMessage(Handle,WM_SYSCOMMAND,SC_MOVE+HTCaption,0);//发送移动标题栏消息
    如,要在Panel上可以移动窗口
    procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    begin
    ReleaseCapture;
    SendMessage(Handle,WM_SYSCOMMAND,SC_MOVE+HTCaption,0);
    end; 

    http://blog.csdn.net/diligentcatrich/article/details/18164361

  • 相关阅读:
    oracle-DML-2
    Oracle--DML
    jquery 调用asp.net后台代码
    hdu--1505--稍微特别的子矩阵求和<修改第一次发表的错误>--<增加stack写法>
    hdu--2159--二维费用背包<一维错误解法>
    hdu--2571--dp
    hdu--1231&&1003--dp
    hdu--1251--字典树
    hdu--1075--字典树||map
    hdu--1421--dp&&滚动数组
  • 原文地址:https://www.cnblogs.com/findumars/p/6430726.html
Copyright © 2011-2022 走看看