是否有用于为表单的标题栏、系统菜单图标以及最小化、最大化和关闭按钮设置自定义光标的 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 函数设置光标,返回 真 到消息 Result(Windows API 宏 TRUE 和匹配 与 匹配到 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/