delphi - 调整表单大小,即使它是无边框的 - 删除斜角边缘

标签 delphi delphi-xe7 vcl-styles

使用以下代码使无边框表单可调整大小非常有效:

type
 TForm1 = class(TForm)
 protected
   procedure CreateParams(var Params: TCreateParams); override;
 end;

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
 BorderStyle := bsNone;
 inherited;
 Params.ExStyle := Params.ExStyle or WS_EX_STATICEDGE;
 Params.Style := Params.Style or WS_SIZEBOX;
end;

但是,请看图片:

enter image description here 为什么顶部边缘有一个斜角?有什么建议可以删除它吗?

最佳答案

这是绝对的答案。也适用于 win 7,8 win10。 出现的奇怪的薄顶栏也消失了。
(如果您使用现代主题,请删除表单的样式元素(sefont、seclient、seborder))

是的,如果您有一个面板设置与所有客户端对齐,它就可以工作。只需修改 panel.alignwithmargins:=true;和 panel.margins>1

(注意:不要忘记将 form.borderstyle 设置为 bsNone;)

 protected
    procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;

..

procedure Tfmmain.WMNCHitTest(var Message: TWMNCHitTest);
const
  EDGEDETECT = 7; // adjust
var
  deltaRect: TRect;
begin
  inherited;
  if BorderStyle = bsNone then
    with Message, deltaRect do
    begin
      Left := XPos - BoundsRect.Left;
      Right := BoundsRect.Right - XPos;
      Top := YPos - BoundsRect.Top;
      Bottom := BoundsRect.Bottom - YPos;
      if (Top < EDGEDETECT) and (Left < EDGEDETECT) then
        Result := HTTOPLEFT
      else if (Top < EDGEDETECT) and (Right < EDGEDETECT) then
        Result := HTTOPRIGHT
      else if (Bottom < EDGEDETECT) and (Left < EDGEDETECT) then
        Result := HTBOTTOMLEFT
      else if (Bottom < EDGEDETECT) and (Right < EDGEDETECT) then
        Result := HTBOTTOMRIGHT
      else if (Top < EDGEDETECT) then
        Result := HTTOP
      else if (Left < EDGEDETECT) then
        Result := HTLEFT
      else if (Bottom < EDGEDETECT) then
        Result := HTBOTTOM
      else if (Right < EDGEDETECT) then
        Result := HTRIGHT
    end;
end;

关于delphi - 调整表单大小,即使它是无边框的 - 删除斜角边缘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38023579/

相关文章:

delphi - 如何在Delphi XE7中设置 'Version info'? 【Delphi设计问题】

德尔福XE2风格: Main Menu Ignored

delphi - 启用了 Delphi VCL 样式的平面工具栏按钮?

c# - 将 HSV 循环代码从 Delphi 转换为 C#

delphi - 如何在其所有者表单之上显示模态表单(其所有者是否设置为 fsStayOnTop),就像 TOpenDialog 一样

delphi - Delphi XE7下如何创建默认工程?

delphi - 类型化接口(interface)和 Spring4D

delphi - TMonthCalendar 和 Delphi 样式 (Delphi XE2)

delphi - TMemo无法正确处理Unix文本(LF作为行尾)

Delphi 从 RAD Studio 升级到 Delphi XE