Jad*_*ade 5 forms delphi resize smooth borderless
我正在尝试调整无边框形状的大小,但是当我使用右/底侧增加大小时,边界和旧客户区之间会出现间隙,这取决于移动鼠标的速度.
当你从左边界或从左下角调整大小时,效果更明显,到处都是可怕的(我尝试过其他商业应用程序也会发生这种情况).当我改变为相当大的边框时,这种效果也会发生,但它并不像我删除表格边框那样糟糕
表单布局包含一个顶部面板,用于执行标题栏功能(带有一些tImages和按钮),还有一些其他面板显示其他信息(如备忘录,其他控件等)
有一段我的代码,我捕获鼠标按钮并向Windows发送消息,但我也尝试手动执行类似的结果
激活顶部面板的双缓冲区可避免闪烁,但调整面板大小不会与窗体大小调整同步,从而出现间隙或面板部分消失
 procedure TOutputForm.ApplicationEvents1Message( var Msg: tagMSG;
  var Handled: Boolean );
const
  BorderBuffer = 5;
var
  X, Y: Integer;
  ClientPoint: TPoint;
  direction: integer;
begin
  Handled := false;
  case Msg.message of
    WM_LBUTTONDOWN:
      begin
        if fResizable then
        begin
          if fSides = [sTop] then
            direction := 3
          else if fSides = [sLeft] then
            direction := 1
          else if fSides = [sBottom] then
            direction := 6
          else if fSides = [sRight] then
            direction := 2
          else if fSides = [sRight, sTop] then
            direction := 5
          else if fSides = [sLeft, sTop] then
            direction := 4
          else if fSides = [sLeft, sBottom] then
            direction := 7
          else if fSides = [sRight, sBottom] then
            direction := 8;
          ReleaseCapture;
          SendMessage( Handle, WM_SYSCOMMAND, ( 61440 + direction ), 0 );
          Handled := true;
        end;
      end;
    WM_MOUSEMOVE:
      begin
        // Checks the borders and sets fResizable to true if it's in a "border" 
        // ...
      end; // mousemove
  end; // case
end;
Run Code Online (Sandbox Code Playgroud)
我怎样才能避免该区域和/或强制重绘窗口?我正在使用Delphi,但通用解决方案(或其他语言)甚至是前进的方向对我来说都没问题
先感谢您
War*_* P 6
上次我尝试手动创建一个通过WM_SYSCOMMAND和鼠标拖动调整大小的顶级窗口,无论是否涉及任何嵌套面板,我发现问题不仅限于闪烁.
即使使用没有可调整大小边框的裸-TForm,添加我自己的可调整大小的边框并处理鼠标向下和鼠标移动和鼠标移动消息直接证明是有问题的.我放弃了你在这里展示的代码方法,而是找到了两种可行的方法:
使用一种方法,我接管非客户区域的绘画.这就是谷歌Chrome和许多其他完全自定义的窗口.您仍然有一个非客户区域,由您来绘制它并处理非客户端和边框绘制.换句话说,它不是真正的无边框,但如果你想要的话,它可能都是单一的颜色.阅读有关WM_NCPAINT消息的帮助,开始使用.
使用仍然可以识别的无边框可调整窗口(即使没有非客户区域作为可调整大小的窗口.想想一个post-it-note-applet.这是我前一段时间问的一个问题,在我的问题的底部是一个完整的工作演示提供了一个平滑的无闪烁方式,有一个无边框可调整窗口.答案的基础技术由David H.提供.