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