gpt4 book ai didi

delphi - 如何为窗体的标题栏、系统菜单图标以及最小化、最大化和关闭按钮设置自定义光标?

转载 作者:行者123 更新时间:2023-12-02 08:08:07 26 4
gpt4 key购买 nike

是否有 Windows API 用于为表单的标题栏、系统菜单图标以及最小化、最大化和关闭按钮设置自定义光标?

我有一个为给定控件加载和设置光标的函数:

type

TFrm_Main = class(TForm)
....
private
procedure SetCursor_For(AControl: TControl; ACursor_FileName: string;
Const ACurIndex: Integer);
...
end;
const
crOpenCursor = 1;
crRotateCursor = 2;
crCursor_Water = 3;

var
Frm_Main: TFrm_Main;
...
procedure TFrm_Main.SetCursor_For(AControl: TControl; ACursor_FileName:
string; const ACurIndex: Integer);
begin
Screen.Cursors[ACurIndex] := Loadcursorfromfile(PWideChar(ACursor_FileName));
AControl.Cursor := ACurIndex;
end;

我以这种方式使用它的形式:

SetCursor_For(Frm_Main, 'Cursors\Cursor_Rotate.ani', crRotateCursor);

但是我缺少一种为特定表单部分(例如表单标题栏、系统菜单图标以及最小化、最大化和关闭按钮)设置光标的方法。有没有办法为这些表单部分设置光标?

最佳答案

处理 WM_SETCURSOR 消息并针对以下 HitTest 代码值之一测试消息参数的 HitTest 字段,并通过使用向消息 SetCursor 返回 TrueResult 函数设置光标(Windows API 宏 < strong>TRUE 和 FALSE 恰好与 Delphi 的 Boolean 类型值匹配,因此您只能在那里进行类型转换):

例如:

type
TForm1 = class(TForm)
private
procedure WMSetCursor(var Msg: TWMSetCursor); message WM_SETCURSOR;
end;

implementation

procedure TForm1.WMSetCursor(var Msg: TWMSetCursor);
begin
case Msg.HitTest of
HTCAPTION:
begin
Msg.Result := LRESULT(True);
Winapi.Windows.SetCursor(Screen.Cursors[crHandPoint]);
end;
HTSYSMENU:
begin
Msg.Result := LRESULT(True);
Winapi.Windows.SetCursor(Screen.Cursors[crHelp]);
end;
HTMINBUTTON:
begin
Msg.Result := LRESULT(True);
Winapi.Windows.SetCursor(Screen.Cursors[crUpArrow]);
end;
HTMAXBUTTON:
begin
Msg.Result := LRESULT(True);
Winapi.Windows.SetCursor(Screen.Cursors[crSizeAll]);
end;
HTCLOSE:
begin
Msg.Result := LRESULT(True);
Winapi.Windows.SetCursor(Screen.Cursors[crNo]);
end;
else
inherited;
end;
end;

关于delphi - 如何为窗体的标题栏、系统菜单图标以及最小化、最大化和关闭按钮设置自定义光标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49591826/

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