gpt4 book ai didi

delphi - 使用 "drag area"移动无标题窗口

转载 作者:行者123 更新时间:2023-12-03 15:03:14 25 4
gpt4 key购买 nike

我想要拥有自己的标题栏,因此我基本上使用一个面板(名称:pnCaption)并删除 CreateParams 中的原始标题栏。但是在新面板中通过 MouseDown-MouseMove 移动窗口的能力是一个问题。

通常您会使用 NCHITTEST 消息。但如果鼠标位于面板上(我自己的标题),则不会发出信号。查看代码...

procedure TForm1.CreateParams(var params: TCreateParams);  
begin
inherited Createparams(Params);
with Params do
Style := (Style or WS_POPUP) and (not WS_DLGFRAME);
end;

procedure TForm1.WM_NCHitTest(var Msg: TWMNcHitTest);
begin
inherited;
if PtInRect(pnCaption.BoundsRect, ScreenToClient(Point(Msg.XPos, Msg.YPos)))
then Msg.Result := HTCAPTION;
end;

如果有任何关于如何完成该任务的提示,我将不胜感激。

基督教

最佳答案

您始终可以通过使用带有 WM_SYSCOMMAND 消息的“Magic”$F012 数字,通过任何具有 mousedown 事件的控件来拖动窗口。这是我从 Ray Kanopka(出色的 Raize 组件的作者)那里学到的东西,但我已经不记得这是如何传授给我的了。

这也是一种简洁的方式,允许用户通过给他们一个看起来像标题的面板标签来移动无边框表单。例如,我用它来允许用户移动无边框对话框:

procedure TAbout_Dlg.LblTitleMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
const
sc_DragMove = $F012;
begin
ReleaseCapture;
Perform( wm_SysCommand, sc_DragMove, 0 );
end;

关于delphi - 使用 "drag area"移动无标题窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3976610/

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