アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。

excel vba でマウスポインタの変更を教えてほしいのですが、「Application.Cursor」で使用可能な
 ・xlDefault
 ・xlNorthwestArrow
 ・xlIBeam 
 ・xlWait
以上の4つではなく、クロス型(+のような形)のポインタに変更することはできないでしょうか?
図形をコピー⇒貼り付けするタイミングでこのマウスポインタ型に変更できたらと思っています。

windowsAPIを使用した下記の方法では、一時的には可能ですが、マウスポインタを動かすと元に戻ってしまいます。
書き方、使用方法など間違っているのでしょうか。

-----winAPIを使用したソース---------------------------------------------------------
Private Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long

Private Declare Function SetCursor Lib "user32" (ByVal hCursor As Long) As Long

Private Const IDC_CROSS = 32515&

Sub CursorChangeTest()
Dim i As Double
Dim waitTime As Variant
SetCursor (LoadCursor(0, IDC_CROSS))
'ループ処理
For i = 1 To 5
waitTime = Now + TimeValue("0:00:01")
Debug.Print "きました " & i
Application.Wait waitTime
Next i
End Sub
------------------------------------------------------------------------------------

よろしくお願いします。

A 回答 (1件)

LoadCursorに加え、SetSystemCursor,CopyCursor の関数を使えばできると思います。


Application.Cursorで使用可能なシステムカーソル(例えばxlIBeam)をSetSystemCursorで変更するわけです。

モジュール単位で変数を追加し
Private hOldCursor As Long
変更前に
hOldCursor = CopyCursor(LoadCursor(0, IDC_IBEAM))
で退避しておいて
Call SetSystemCursor(CopyCursor(LoadCursor(0, IDC_CROSS)), IDC_IBEAM)
Application.Cursor = xlIBeam

解除は
Call SetSystemCursor(hOldCursor, IDC_IBEAM)
Application.Cursor = xlDefault
で戻します。
変数リセットが心配な場合 SaveSetting|GetSetting でレジストリを使うのも良いかもしれません。

失敗してカーソルが戻らなくなった時は、
コントロールパネルの[マウス]-[ポインタ]タブ-[OK]で戻してください。

#APIに詳しいわけではないので、ご自分で追加調査した上で、自己責任で試してくださいね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!