VB6からWindowsのカーソルを変更する方法を教えてください。
お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

WinME上のVSVB6で試してみたところ、



Sub Main()

Dim nCounter As Long


Screen.MousePointer = vbHourglass

For nCounter = 0 To 420000000
''''ここは時間稼ぎ
Next nCounter
Screen.MousePointer = vbDefault

End

End Sub

で、カーソルは変わるには変わります。
でも DoEvents を入れたらとたんに変になりますね。
    • good
    • 0

マウスポインターを変更するには、screen.mousepointerに値を設定すれば良いのです。



設定する値は、VBで変数が提供されています。
(詳しくは、HELPで見てくださいね。)

砂時計=vbHourGrass
初期値=vbDefault

処理を実行する前に砂時計をセットして、終了したら初期値をセットするといった感じで、いかがでしょう?

最後に一言。
回答と返す人たちも、手助けできるようにと思って回答してくれていると思います。
質問する人も、どうしたら意図を感じとってもらえるか、少しだけ考えてから質問しましょう。
じゃあ、頑張ってください。
    • good
    • 0
この回答へのお礼

ご忠告ありがとうございます。

私の方でも質問の仕方がよくなかったと思ったので、
下のほうに再度書かせて頂いています。
そちらも見ていただけたら幸いです。

一応書かせていただきます。
フォームのない実行ファイルを起動したときに、
マウスポインタを砂時計にしたいんです。
screen.mousepointerはフォーム内でしか有効じゃないかと思います。
やりたいのは「デスクトップ上、どこにいても砂時計」です。

ご理解いただけましたでしょうか?

お礼日時:2001/05/09 12:40

マウスカーソルは通常、実行しているアプリケーションが握っています。


ゆえに、VBで作ったものは簡単に変更できることは了承していることと思います。
そして、シェルに関連しているものも、ウィンドウズの設定で可能です。

ただし、他のアプリケーションに関しては、ウィンドウハンドルを取得して、
それに関して、ウィンドウのクラスのhCursorメンバを変更することによって
変更することになります。
    • good
    • 0
この回答へのお礼

ありがとうございます。
ご参考にさせていただきます。

お礼日時:2001/05/09 12:46

なんのカーソル??



マウスカーソル?
入力カーソル?

 マウスカーソルなら、使用しているコントローラに依存して変更可能です。

 入力カーソルの変更は簡単に出来ません。APIを駆使するか、入力カーソルを変更出来るコンポーネントを作ればOKです。


 なんにせよどんな事がしないのかを明確に書いて下さいね。
    • good
    • 0
この回答へのお礼

失礼しました。
下でも書きましたが、フォームのない実行ファイルを起動した際に、
マウスポインタをデフォルトから砂時計にしたいです。
で、実行終了前に砂時計からデフォルトに戻したいのです。

APIでSetCursorだとかLoadImageだとか使おうとしたのですが、
うまくできません。

すいませんが、よろしくお願いします。

お礼日時:2001/05/08 18:23

> VB6からWindowsのカーソルを変更する方法を教えてください。


実行中に砂時計にするならScreen.MousePointer=vbHourGlass(つづり忘れた!)という意味でしょうか?
自分自身のフォーム上ならMe(ここにはフォーム名).MousePointerでOK。


それとも[コントロールパネル]-[マウス]-[ポインタ]-[デザイン]で
指定するマウスポインタでしょうか?
    • good
    • 0
この回答へのお礼

失礼しました。
詳しく書かせて頂きます。

フォームのない実行ファイルを起動した際に、
マウスポインタをデフォルトから砂時計にしたいです。
(なのでScreen.Mousepointerは使えない?)
で、実行終了前に砂時計からデフォルトに戻したいのです。
すいません、よろしくお願いします。

お礼日時:2001/05/08 18:20

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qマウスポインタの変更

マウスポインタの変更に関する質問です.

現在VB6を用いて作成しているアプリケーションにおいて
ピクチャボックスに画像を描画する部分があります.
この画像に関しまして,拡大・縮小を行えるようにしました.
これに加え表示部を移動させる機能を加えたいと思っております.
イメージとしてはPDFファイルを読むときのように
手のようなアイコンを用いてドラッグして操作する形です.

このとき,アイコンがピクチャボックス上にあるときのみ
アイコンを手の形に変えたいと思っています.
やり方が今いちわかりませんので,よろしくお願いします.
また,手のアイコン画像の入手先も教えていただけると助かります.

以上,よろしくお願いいたします.

Aベストアンサー

おそらく拡大されています。
マウスカーソルの画像は32x32で用意してください。

QVB6 配列を初期化したい

VB6でループさせて配列に値を入れて、計算させて最終的に求めたい値をRとします。そのときループで繰り返すためか同じ配列に値を入れてどんどん値がでかくなりRの値がおかしくなってしまいます;
おそらく問題は一回前に入れた配列がそのままのこってしまってるからなのだと思うのですが;
配列の中の値をクリアする方法はないものでしょうか?
一応、配列=0として初期化しようとしても値は変わらず前のが残ったままになってしまっています;
どなたかわかる方いらっしゃいましたらご回答宜しくお願いします

その他何かいい方法があればそれも教えていただけたらと思います

Aベストアンサー

Eraceステートメントを使用

  Dim a() as Long
  Dim s(100) as String
  Dim x() as Long

  Erase a     ’要素が0になる
  Erase s     ’要素が""になる

  Redim x(100) as Long

  Erase x      ’メモリを解放

注)VB2005の場合は動作が異なるので注意して下さい。

Q配列を関数に渡す方法

VB6.0のプログラムで質問があるのですが
下のプログラムのように配列num、num1を関数AAAに
渡したいと思うのですがどうすればいいのでしょうか?
よろしくお願いいたします。

Option Explicit
Private num(10) As Integer
Private num1(10) As Integer

Private Sub Write_Click()
   AAA(num)
   AAA(num1)
End Sub

Private Function AAA(???)
   Dim i As Integer
   For i = 1 To 10
      ???(i) = i
   Next i
End Function

Aベストアンサー

コードミスしてました申し訳ない

Option Explicit
Private num(10) As Integer
Private num1(10) As Integer

Private Sub Write_Click()
   Call AAA(num)
   Call AAA(num1)
End Sub

Private Function AAA(ByRef test() As Integer)
   Dim i As Integer
   For i = 1 To 10
      test(i) = i
   Next i
End Function

ですね!

Q文字列にある特定文字の数

こんにちは。

文字列「C:\MYDOCU~1\THINKB~1\THINKB~1\TEMP」に"¥"がいくつ含まれているかを算出したく悩んでいます。どのような方法があるのか、是非アドバイスをください。よろしくお願いします。

** 環境 **
VB6.0(sp5)

Aベストアンサー

ご質問の「文字列」から察するにあるファイルのパス(ドライブ+パス+ファイル名)を
ドライブ+パスとファイル名に分解する、のような使い方をされるのでしょうか?
先の例ですとstrArrey(numArrey)を参照すると「ファイル名のみ」が取得できます。

あと、Splitの反対で「JOIN関数」があります。
なお、Split,JoinはExcel2000以降のVBAでも利用可能です。


'ここから

Dim strArrey() As String
Dim numArrey As Integer

Dim strPath As String

strPath = "C:\MYDOCU~1\THINKB~1\THINKB~1\TEMP"

strArrey() = Split(strPath, "\")

numArrey = UBound(strArrey())

MsgBox "これがファイル名:[" & strArrey(numArrey) & "]"

strArrey(numArrey) = ""

strPath = Join(strArrey(), "\")

MsgBox "これがパス名:[" & strPath & "]"

'ここまで

ご質問の「文字列」から察するにあるファイルのパス(ドライブ+パス+ファイル名)を
ドライブ+パスとファイル名に分解する、のような使い方をされるのでしょうか?
先の例ですとstrArrey(numArrey)を参照すると「ファイル名のみ」が取得できます。

あと、Splitの反対で「JOIN関数」があります。
なお、Split,JoinはExcel2000以降のVBAでも利用可能です。


'ここから

Dim strArrey() As String
Dim numArrey As Integer

Dim strPath As String

strPath = "C:\MYDOCU~1\THINKB~1\THINKB~1...続きを読む

QVB6.0-整数と余りを求める

表題の通り、整数と余りを求める関数を教えてほしいです:例:100/60=1余り40
整数:1
余り:40
よろしくお願いいたします。

Aベストアンサー

Dim A,B,C,D as integer
A=100
B=60
C=Int(A/B) <---答は1
D=A mod B

●IntはAをBで割った時の整数部分を求める関数ですが、答が負の場合は
注意が必要です。 例 Int(-100/40)=-2
これを回避する場合 Fixがいいです

●mod は A を B で割った時の余りを求める関数

QSpreadの選択行の取得について

いつもお世話になっております。

VB6、Spread3.0の環境でコーディングしています。

Spreadを単一行モードにして、1行だけ選択された
状態で選択された行の行番号を取得したいのです。

Me.vaSpread1.Row = Me.vaSpread1.SelModeIndex
Me.vaSpread1.Col = 1

で取得しようとしても、うまくいきません。
どのようにすれば、行番号を取得できるのでしょう?
ご存知のかたがおられましたら、よろしくお願い
します。

Aベストアンサー

SpreadのクリックイベントでRowに渡されているので
それを使えばいいと思います。

Q[excel vba] マウスポインタの変更

お世話になります。

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
------------------------------------------------------------------------------------

よろしくお願いします。

お世話になります。

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

windowsAPIを使用した下記の方法では、一時的には可能ですが、マウスポインタを動かすと元に戻ってしまいます。
書き方、使用...続きを読む

Aベストアンサー

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に詳しいわけではないので、ご自分で追加調査した上で、自己責任で試してくださいね。

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)
A...続きを読む

QCloseとDisposeの違い

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、タイマーコントロールのイベントに記述していますと、それは実行され続けます。

これを防ぐために、Me.Dispose() を使います。すると、きれいにプロセスは終了し、イベントは発生しない模様です。

そこで、「フォームを閉じる」意味のMe.Close() をすべてMe.Dispose() に変えてしまいました。確実にプロセスを破棄出来ると思ったからです。Webで調べると、違いは「再利用できる、できないの違い」という答えがありましたが、それはきっと、ファイルやオブジェクトのことで、フォームの場合は、再びShowまたはShowDialogで表示させることは可能でしたので、特に問題は感じていませんでした。

ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。Me.Close() に変えるとうまくいきました。

わけわからなくなってきました。。。

ちなみに、その残ったフォームは、スタートアップフォームであり、別のフォームからShowまたはShowDialogメソッドで呼び出したものではありません。

ここで4つの仮説を立ててみました。

1. ShowDialogで呼び出したフォームは、Me.Dispose()、Showで呼び出した、あるいは、スタートアップフォームは、Me.Close() すれば破棄できる

2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

3. 呼び出し方ではなく、別の要因が存在する

4. 併記する必要がある場合がある

Me.Close()
Me.Dispose()

または、

Me.Dispose()
Me.Close()



どれが正しいのでしょうか?どなたがご存じの方がいらっしゃいましたら、ご教授いただけませんでしょうか? どうぞよろしくお願い申し上げます。ありがとうございました。

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、...続きを読む

Aベストアンサー

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。
Me.Close() に変えるとうまくいきました。

通常はどちらでもうまくいきます。

>2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

ShowDialogの場合は、メソッド内部で、ハンドルが破棄されているため、Close()メソッドの際にDispose()メソッドが呼び出されます。

>3. 呼び出し方ではなく、別の要因が存在する

そう思います。

>4. 併記する必要がある場合がある

インスタンスを明示的に破棄したほうがよい場合は多く存在します。
Disposeが使えるメンバはIDisposableをインターフェースとして持っているメンバです。
これらのメンバは、外部とのやり取りを行うものが多くあります。
たとえばSQLClientに含まれるようなメンバです。

外部とのコネクションを確実に破棄を保障してほしいなどという場合がありますよね、このようなときに使用します。

Using構文を使用するのとまったく同じ理由になります。
正確にはUsing構文を使用できるメンバには条件があります、IDisposableをインターフェースとして持っているメンバに限るというものです。

ほかにもガーベージコレクタによるファイナライズを伴うかどうかという違いがあります。
Disposeの場合はファイナライズが同時に行われるため、使用していたメモリ空間を開放することができます。

上記のような理由により、
Me.Close()
Me.Dispose()
は両方書いたほうがよいと思います。

蛇足ですが、
Me.Dispose()
Me.Close()
はエラーになります。
Me.Dispose()により、Me本体(インスタンス)は削除されてしまいます。
存在しないMeに対してCloseメソッドを要求することはできないためです。

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリ...続きを読む

Qフォームの再読み込み

1. Form1に配置したボタンのクリックイベントでForm2を起動
2. Form2に配置したボタンのクリックイベントでForm2を再起動

これを実現したいのですが、どうやったらいいのかわかりません。
「1. 」はできたのですが、「2. 」の再起動がわかりません。。。

再起動して、初めてロードされるのと同様にロードしたいです。
値の保持などは一切必要ありません。

どなたかわかる方、ご返答お願いします。

環境は windows7 32bit  VisualBasic2010Professional です。よろしくお願いします。

Aベストアンサー

Form2の再起動ボタンのClickイベントを

   private void button1_Click(object sender, EventArgs e)
  {
    // 再起動後のForm2を生成
    Form2 frm2 = new Form2();
    // 自身を閉じる
    this.Close();
    // 再起動のForm2を起動する
    frm2.Show();
  }
といった具合にして見ましょう

Q上下の位置揃えについて

オブジェクトの TEXTやLABELで文字を左揃え、中央揃え、右揃えはALIGNMENTプロパティを指定しますが、上下の位置指定はどのようにすれば良いか教えてください。
いつも上揃えになってしまいます。
よろしくお願いします。

Aベストアンサー

色つきのラベルなのに文字位置が上詰で気になる!っていうときは
姑息な手段ですが、背景を透明に設定したラベルを
上に重ねると好きな位置に文字を表示できます。
テキストボックスの場合は下のテキストボックスを
Enable = Falseにしておき、上に重ねる方を
フラットにして実線を消しておくとそれらしくなります。
でもオブジェクトがたくさんあるとめんどくさいですよね…


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング