• 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; 
  • 相关阅读:
    uva 1584.Circular Sequence
    成为Java顶尖程序员 ,看这11本书就够了
    java 线程同步 原理 sleep和wait区别
    xargs -r
    java
    事故分析
    各大互联网公司架构演进之路汇总
    char 汉字
    nginx优化之request_time 和upstream_response_time差别
    学习进度05
  • 原文地址:https://www.cnblogs.com/windson/p/12570585.html
Copyright © 2020-2023  润新知