tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルMSFlexGridでマウスホイールによるスクロールを有効にする方法
記事No16487
投稿日: 2019/06/28(Fri) 18:52
投稿者かわの
ウィンドウズ10上のVB6でMSFlexGridを利用したプログラムを作成中ですが、マウスホイールによるスクロールが機能しません。そこで2010/01/07付け花ちゃんさんの投稿記事を参考にさせていただき、自作プログラムにコードを貼り付けて実行したところ、実行時エラー「オートメーションエラーです。ハンドルが無効です。」と表示され、下記コードの最下行で止まってしまいました。

Option Explicit

Implements DirectXEvent8
Private oDX      As DxVBLibA.DirectX8
Private oDI      As DxVBLibA.DirectInput8
Private oDIDevM  As DxVBLibA.DirectInputDevice8
Private hEvent   As Long

Private Declare Function SendMessage Lib "user32" _
   Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _
   ByVal wParam As Long, lParam As Any) As Long
Private Const WM_VSCROLL = &H115
Private Const SB_LINEUP = 0&
Private Const SB_LINEDOWN = 1&

Private Sub Form_Load()
   With MSFlexGrid1
      .Cols = 8
      .Rows = 100
      .RowHeightMin = 300
   End With
   Dim i As Long
   For i = 1 To MSFlexGrid1.Rows - 1
      MSFlexGrid1.TextMatrix(i, 0) = i
   Next i
  
   Set oDX = New DxVBLibA.DirectX8
   Set oDI = oDX.DirectInputCreate()
   Set oDIDevM = oDI.CreateDevice("GUID_SysMouse")
   oDIDevM.SetCommonDataFormat DIFORMAT_MOUSE2
   oDIDevM.SetCooperativeLevel Me.hWnd, DISCL_NONEXCLUSIVE Or DISCL_FOREGROUND ←ここで止まる

FormやMSFlexGridに関連するコード、また Private Sub DirectXEvent8_DXCallback についても漏れなく貼り付けたつもりです。エラー対処法についてご教示いただければ幸いです。

なお、dx8vb.dll は下記サイトを参考に c:\windows\system32 にインストールしました(一応「成功しました」のメッセージが出ました)。
http://shadowwarehouse.tuzikaze.com/MyProg/vista.htm

また、プロジェクト→参照設定で DirectX 8 for Visual Basic Type Library にチェック済みです。
よろしくお願いいたします。

[ツリー表示へ]
タイトルRe: MSFlexGridでマウスホイールによるスクロールを有効にする方法
記事No16488
投稿日: 2019/06/28(Fri) 21:11
投稿者魔界の仮面弁士
> そこで2010/01/07付け花ちゃんさんの投稿記事

2010/01/07 にあった投稿というと、下記の 3 スレッドですね。
いずれも花ちゃんさんが投稿されていますが、内容的に関係なさそう…?

VB6 掲示板 No14346「UNLHAで使用したフォルダの削除」
http://hanatyan.sakura.ne.jp/vb60bbs/wforum.cgi?mode=allread&no=14346

VB6 掲示板 No14348「SetParentの子ウインドウのハンドルの取得について」
http://hanatyan.sakura.ne.jp/vb60bbs/wforum.cgi?mode=allread&no=14348

VB6 掲示板 No14352「EXEのコピー」
http://hanatyan.sakura.ne.jp/vb60bbs/wforum.cgi?mode=allread&no=14352


あとは VB.NET 掲示板の No9764 のスレッドにも同日の投稿がありますが、
こちらは別の方の投稿ですし。


…ってなるほど。サンプル掲示板の No228 でしたか!
http://hanatyan.sakura.ne.jp/patio/read.cgi?no=228


掲示板ごとに検索システムが異なるので、次回からは
URL なりスレッド番号なりを提示頂けると、探す手間が省けます。m(_ _)m


> ウィンドウズ10上のVB6で
かわのさんの Windows 10 は 32bit / 64bit いずれでしょうか?

最近の PC は、64bit OS を搭載していることが多いと思いますが、
もしも 64bit だとしたら
> なお、dx8vb.dll は下記サイトを参考に c:\windows\system32 にインストールしました
は正しい配置先ではありません。

32bit な Windows の場合は、それで良かったのですが:
 C:\Windows\System32\ … 32bit ライブラリ用の物理フォルダ
 C:\Windows\System\   … 16bit ライブラリ用の物理フォルダ

64bit の Windows の場合はこういう配置となります。
 C:\Windows\System32\ … 64bit ライブラリ用の物理フォルダの
 C:\Windows\SysWOW64\ … 32bit ライブラリ用の物理フォルダ


なお、dx8vb.dll は 32bit のライブラリです。
32bit 環境であれば良いですが、64bit の場合はアンレジストして、正しいパスで再登録してみてください。


> oDIDevM.SetCooperativeLevel Me.hWnd, DISCL_NONEXCLUSIVE Or DISCL_FOREGROUND ←ここで止まる
協調レベルが非排他なので、それ自体は問題無さそうですね。

・アプリケーションを「管理者として実行」した時とそうでない時とで、結果は変わりますか?
・セキュリティ 系のソフトウェアを一時的に停止した場合、結果は変わりますか?

[ツリー表示へ]
タイトルRe^2: MSFlexGridでマウスホイールによるスクロールを有効にする方法
記事No16489
投稿日: 2019/06/29(Sat) 00:25
投稿者かわの
魔界の仮面弁士 様

さっそくのご回答・ご指摘ありがとうございます。

ご指示のとおり、コマンドプロンプトから
C:\Users\(PC名)\regsvr32 c:\windows\sysWOW64\dx8vb.dll
を実行したところ、「c:\windows\sysWOW64\dx8vb.dll のDLLRegisterServer は成功しました。」
が得られました。(ちなみに当方のウィンドウズ10は64ビットです)

その後、試行錯誤の末、エラーの発生した行を削除してプログラムを実行したところ、マウスでスクロールできるようになりました。

(エラー発生行)
oDIDevM.SetCooperativeLevel Me.hWnd, DISCL_NONEXCLUSIVE Or DISCL_FOREGROUND ←この行のみを削除

現状ではエラー発生やスクロール成功の機序がしっかり理解できているわけではありませんが、とりあえず結果オーライということで、今回はありがとうございました。


> > そこで2010/01/07付け花ちゃんさんの投稿記事
>
> 2010/01/07 にあった投稿というと、下記の 3 スレッドですね。
> いずれも花ちゃんさんが投稿されていますが、内容的に関係なさそう…?
>
> VB6 掲示板 No14346「UNLHAで使用したフォルダの削除」
> http://hanatyan.sakura.ne.jp/vb60bbs/wforum.cgi?mode=allread&no=14346
>
> VB6 掲示板 No14348「SetParentの子ウインドウのハンドルの取得について」
> http://hanatyan.sakura.ne.jp/vb60bbs/wforum.cgi?mode=allread&no=14348
>
> VB6 掲示板 No14352「EXEのコピー」
> http://hanatyan.sakura.ne.jp/vb60bbs/wforum.cgi?mode=allread&no=14352
>
>
> あとは VB.NET 掲示板の No9764 のスレッドにも同日の投稿がありますが、
> こちらは別の方の投稿ですし。
>
>
> …ってなるほど。サンプル掲示板の No228 でしたか!
> http://hanatyan.sakura.ne.jp/patio/read.cgi?no=228
>
>
> 掲示板ごとに検索システムが異なるので、次回からは
> URL なりスレッド番号なりを提示頂けると、探す手間が省けます。m(_ _)m
>
>
> > ウィンドウズ10上のVB6で
> かわのさんの Windows 10 は 32bit / 64bit いずれでしょうか?
>
> 最近の PC は、64bit OS を搭載していることが多いと思いますが、
> もしも 64bit だとしたら
> > なお、dx8vb.dll は下記サイトを参考に c:\windows\system32 にインストールしました
> は正しい配置先ではありません。
>
> 32bit な Windows の場合は、それで良かったのですが:
>  C:\Windows\System32\ … 32bit ライブラリ用の物理フォルダ
>  C:\Windows\System\   … 16bit ライブラリ用の物理フォルダ
>
> 64bit の Windows の場合はこういう配置となります。
>  C:\Windows\System32\ … 64bit ライブラリ用の物理フォルダの
>  C:\Windows\SysWOW64\ … 32bit ライブラリ用の物理フォルダ
>
>
> なお、dx8vb.dll は 32bit のライブラリです。
> 32bit 環境であれば良いですが、64bit の場合はアンレジストして、正しいパスで再登録してみてください。
>
>
> > oDIDevM.SetCooperativeLevel Me.hWnd, DISCL_NONEXCLUSIVE Or DISCL_FOREGROUND ←ここで止まる
> 協調レベルが非排他なので、それ自体は問題無さそうですね。
>
> ・アプリケーションを「管理者として実行」した時とそうでない時とで、結果は変わりますか?
> ・セキュリティ 系のソフトウェアを一時的に停止した場合、結果は変わりますか?

[ツリー表示へ]