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; 
  • 相关阅读:
    hash算法
    2020/9/30计算机硬件组成day3
    NIO与IO区别
    Collection.toArray()方法使用的坑&如何反转数组
    Arrays.asList()使用指南
    JDK8的LocalDateTime用法
    Linux 删除文件夹和文件的命令
    list集合为空或为null的区别
    easyExcel使用
    java Object 转换为 Long
  • 原文地址:https://www.cnblogs.com/windson/p/12570585.html
Copyright © 2011-2022 走看看