如何为表单的标题栏、系统菜单图标设置自定义光标,并最小化、最大化和关闭按钮?



是否有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, 'CursorsCursor_Rotate.ani', crRotateCursor);

但是,我缺少一种设置光标的方法,用于特定形式的零件,例如表单标题栏,系统菜单图标并最小化,最大化和关闭按钮。有没有办法为这些形式零件设置光标?

处理 WM_SETCURSOR 消息并测试消息参数的 HITTEST field field for以下命中测试代码之一,并设置CRURSOR通过使用 setCursor 函数返回 true 到消息结果(Windows api api macros true strong>偶然地匹配Delphi的 boolean 类型值,因此您只能在此处打字(:

  • htcaption - 标题bar
  • htsysmenu - 系统菜单图标
  • htminbutton - 最小化按钮
  • htmaxbutton - 最大化按钮
  • HTCLOSE - 关闭按钮

例如:

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;

最新更新