マウスポインターを砂時計にするには?


もぅもぅ  2004-02-12 13:28:34  No: 81981  IP: [192.*.*.*]

データの登録・更新処理をする際に、確定ボタンを押下後
処理が終わるまでマウスポインターを砂時計にしたいのですが、
コーディングには書いているにもかかわらず、マウスポインターが
矢印のままで砂時計に変わりません・・
なにか、フォームの制御とかあるのでしょうか?

コーディングは
Screen.MousePointer = vbHourglass

データ登録・更新処理

Screen.MousePointer = vbDefault
です。

なにかわかる方、よろしくおねがいします

編集 削除
ねろ  2004-02-12 14:45:24  No: 81982  IP: [192.*.*.*]

Screen.MousePointer = vbHourglass
の後にDoEventsを入れてもだめですか?

編集 削除
もぅもぅ  2004-02-12 14:51:30  No: 81983  IP: [192.*.*.*]

ねろ様、アドバイスありがとうございます。

「DoEvents」を追加して実行してみましたが、
砂時計には変わりませんでした・・・

ステップ実行をして、
Screen.MousePointer = vbHourglass
の処理を通っていることを確認していた時に、
デスクトップにカーソルを合わせてみたら砂時計になっていました・・

このフォームに何か問題があるのでしょうか?
色々、試しているところです。
何かわかりましたらよろしくお願いします。

編集 削除
さくら  2004-02-13 09:56:39  No: 81984  IP: [192.*.*.*]

どうゆう処理をしているかわかりませんが
処理が早すぎて目に見えないというのは無いですか!?
for文で10万回ループさせましたが視覚的にわかりませんでしたよ。

編集 削除
koba  2004-03-23 20:22:12  No: 81985  IP: [192.*.*.*]

> Screen.MousePointer = vbHourglass
> の処理を通っていることを確認していた時に、
> デスクトップにカーソルを合わせてみたら砂時計になっていました・・

ということは、[Screen]を作成しているフォームに置き換えれば
フォーム上のカーソルが砂時計になるのでは!?

[フォーム].MousePointer = vbHourglass

でいけました(VB6.0+SP5)

編集 削除
nanashi  2004-03-24 10:51:50  No: 81986  IP: [192.*.*.*]

VB6ではフォーム上にマウスカーソルがある時にしかカーソル変更出来なかったような気がします。
うろ覚えなんで正確なことはわからないですけど。
↓のコードで試してみてください。

Option Explicit

Private Sub Command1_Click()
    Dim lLp As Long
    
    Screen.MousePointer = vbHourglass
    
    For lLp = 0 To 100000000
    Next
    
    Screen.MousePointer = vbDefault
End Sub

フォーム上にカーソルがある場合はScreen.MousePointerで正常に変更できますが、
フォームの外にカーソルがある場合、Screen.MousePointerを通って重たい処理が入った後フォーム上にカーソルを戻してもカーソルは砂時計になりません。
※コマンドボタンはスペースキーで押して下さい。

編集 削除
zero  2004-03-25 15:29:18  No: 81987  IP: [192.*.*.*]

以下の構文でいけないですかね?

        '** マウスポインタを待ち状態(砂時計)に設定
        Me.Cursor = System.Windows.Forms.Cursors.WaitCursor


        '** マウスポインタを元に戻す
        Me.Cursor = System.Windows.Forms.Cursors.Default

(´∀`)つ

編集 削除
ねろ  2004-03-25 18:18:35  No: 81988  IP: [192.*.*.*]

たぶん質問者はもう見ていないと思いますが、
一応まとめますと、要するにこれは

Screen.MousePointer = vbHourglass
のコードを実行している時に、マウスポインターは砂時計を
表示したいフォームの上には無く、どこか他にある。
そして次に重い処理が入るのでウィンドウズはマウスポインターを
変えたくても忙しくて処理が回ってこない。

つまりnanashiさんの
Private Sub Command1_Click()
    Dim lLp As Long    
    Screen.MousePointer = vbHourglass
    For lLp = 0 To 100000000
    Next
    Screen.MousePointer = vbDefault
End Sub
これをやっていると言うことですか。

こう言うのは、
Private Sub Command1_Click()
    Dim lLp As Long
    Screen.MousePointer = 13
    For lLp = 0 To 100000000
        If lLp Mod 10000 = 0 Then  DoEvents
    Next
    Screen.MousePointer = vbDefault
End Sub
こんな風に時々はウインドウズに処理を戻してあげなさい
と言うことですね。この方が処理を中断したい時も
具合がいいし。

編集 削除