调整大小时防止光标变化使用Delphi样式

时间:2016-02-17 12:09:42

标签: delphi vcl-styles

我有一个相当大的形式,可以水平调整,但不能垂直调整(我已将constraints.minwidth设置为窗体的初始宽度。我想保持光标在光标位于左侧时更改为调整大小光标右边框或角落;光标只应在顶部或底部边框上方更改。有一个解决方案可以在没有VCL样式的情况下工作:http://codeverge.com/embarcadero.delphi.vcl.using/how-to-hide-resize-mouse-cursor/1071845。但是,我有相同的要求,除了我正在使用一个VCL样式(Luna),当使用样式并且链接中的示例不起作用时,似乎不会触发WM_NCHITTEST。

当使用VCL样式时,如何防止光标更改为调整大小光标?

1 个答案:

答案 0 :(得分:1)

样式挂钩消息从WndProc的{​​{1}}分支。如果样式钩子报告处理了消息,则TWinControl返回并且不分派消息。这就是为什么表单的WndProc消息处理程序在设置样式时不会被触发的原因。

因此,一个选项是覆盖表单的WM_NCHITTEST

WndProc


另一种选择是使用正在使用的样式挂钩的后代来覆盖消息的处理。

type
  TTestForm = class(TForm)
  protected
    procedure WndProc(var Message: TMessage); override;
    ...

procedure TTestForm.WndProc(var Message: TMessage);
begin
  inherited;
  if (Message.Msg = WM_NCHITTEST) and (Message.Result in [HTLEFT, HTRIGHT]) then
    Message.Result := HTBORDER;
end;