gpt4 book ai didi

windows - 如何在不禁用子控件功能的情况下从其客户区拖动我的表单?

转载 作者:可可西里 更新时间:2023-11-01 13:54:53 27 4
gpt4 key购买 nike

我有一个 Delphi XE2 项目,其中包含 Label1BitBtn1Image1 等组件。我在没有标题栏的情况下实现了表单拖动,编写了以下代码:

  private
{ Private declarations }
procedure WMNCHitTest(var Msg: TWMNCHitTest) ; message WM_NCHitTest;

procedure TMainForm.WMNCHitTest(var Msg: TWMNCHitTest) ;
begin
inherited;
if Msg.Result = htClient then Msg.Result := htCaption;
end;

在我的表单中,Image1.OnMouseMoveLabel1.OnClick 事件对于我的项目是强制性的,但它们不起作用。除了Image1Label1 区域之外,如何从客户区拖动表单?我可以做一件事,我可以使用一个 TPanel,但它会破坏我表单的 GlassFrameSheetOfGlass 属性。

最佳答案

您将需要使用包含在 WM_NCHITTEST 消息中的位置信息。使用它来确定此时是否存在控件。例如,您可以使用 ControlAtPos 方法。

procedure TMainForm.WMNCHitTest(var Msg: TWMNCHitTest);
begin
inherited;
if ControlAtPos(ScreenToClient(Msg.Pos), True, True, True)=nil then
if Msg.Result=htClient then
Msg.Result := htCaption;
end;

仅当您单击窗体上没有控件的点时才允许拖动。您可能希望使用替代标准,但使用 Msg.Pos 是关键思想。

关于windows - 如何在不禁用子控件功能的情况下从其客户区拖动我的表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11221665/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com