WM_SIZING中用于高度非常小的窗口的错误边信息

 磊仔2502898265 发布于 2023-02-13 16:04
  • php
  • 2 个回答
    • 看起来像操作系统的一个错误.在您的测试用例的条件下,命中测试处理错误,默认窗口过程返回HTTOP时应返回HTBOTTOM.您可以覆盖命中测试处理以获得变通方法:

      procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest);
      begin
        inherited;
        if (Message.Result = HTTOP) and
            (Message.Pos.Y > Top + Height - GetSystemMetrics(SM_CYSIZEFRAME)) then
          Message.Result := HTBOTTOM;
      end;
      

      2023-02-13 16:07 回答
    • 干得好,谢谢.我确认这是一个操作系统错误,与delphi无关(我能够使用WINDOWS API创建一个简单的窗口重现问题).

      我现在最终得到:

      procedure TForm2.WMNcHitTest(
                           var msg : TWMNCHitTest);
      begin
        inherited;
      
        case msg.result of
      
            HTTOP:
              begin
                if msg.pos.y > top + height div 2 then
                    msg.result := HTBOTTOM;
              end;
      
            HTTOPRIGHT:
              begin
                if msg.pos.y > top + height div 2 then
                    msg.result := HTBOTTOMRIGHT;
              end;
      
            HTTOPLEFT:
              begin
                if msg.pos.y > top + height div 2 then
                    msg.result := HTBOTTOMLEFT;
              end;
      
        end;
      end;
      

      2023-02-13 16:07 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    热门标签
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有