tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルAs Any  VB6 からの移行
記事No11503
投稿日: 2015/10/13(Tue) 21:56
投稿者おおしろ

初めて投稿いたします。
VB初心者です。

Visual Basic掲示板内にあった魔界の仮面弁士さんのサンプルコードを.NETに移行しています。
サムプルコードは以下の通りです。
---------------------------------
Option Explicit

Private Declare Function GetCursorPos Lib "user32" _
   (ByRef xyScreen As Long) As Long
    
Private Declare Function AccessibleObjectFromPoint Lib "oleacc" _
   (ByVal xScreen As Long, _
    ByVal yScreen As Long, _
    ByRef ppvObject As Any, _
    ByRef pvarChild As Variant) As Long
    
Private Sub Form_Load()
    Timer1.Interval = 250
    Timer1.Enabled = True
    WebBrowser1.Navigate "hogehoge"
End Sub

Private Sub Timer1_Timer()
    Dim xy(1) As Long
    GetCursorPos xy(0)
    
    Dim objAcc As IAccessible
    Dim child As Variant
    AccessibleObjectFromPoint xy(0), xy(1), objAcc, child
    
    List1.Clear
    On Error Resume Next
    Dim ltwh(3) As Long
    objAcc.accLocation ltwh(0), ltwh(1), ltwh(2), ltwh(3), child
    List1.AddItem "Pos:" _
        & "Left" & CStr(ltwh(0)) & "," _
        & "Top" & CStr(ltwh(1)) & "," _
        & "Width" & CStr(ltwh(2)) & "," _
        & "Height" & CStr(ltwh(3))
    List1.AddItem "Name=" & objAcc.accName(child)
    List1.AddItem "Value=" & objAcc.accValue(child)
    List1.AddItem "Description=" & objAcc.accDescription(child)
End Sub

--------------------------------------------








そして私が変更して現状は以下のようになっています。
-------------------------------------------------------
Option Explicit On

Public Class Form1

    Private Declare Function GetCursorPos Lib "user32" _
   (ByRef xyScreen As Long) As Long

    Private Declare Function AccessibleObjectFromPoint Lib "oleacc" _
       (ByVal xScreen As Long, _
        ByVal yScreen As Long, _
        ByRef ppvObject As Any, _
        ByRef pvarChild As Object) As Long

    Private Sub Form_Load()
        Timer1.Interval = 250
        Timer1.Enabled = True
        WebBrowser1.Navigate("hogehoge")
    End Sub

    Private Sub Timer1_Timer()
        Dim xy(1) As Long
        GetCursorPos(xy(0))

        Dim objAcc As IAccessible
        Dim child As Object
        AccessibleObjectFromPoint(xy(0), xy(1), objAcc, child)

        List1.Items.Clear()
        On Error Resume Next
        Dim ltwh(3) As Long
        objAcc.accLocation(ltwh(0), ltwh(1), ltwh(2), ltwh(3), child)
        List1.Items.Add("Pos:" _
            & "Left" & CStr(ltwh(0)) & "," _
            & "Top" & CStr(ltwh(1)) & "," _
            & "Width" & CStr(ltwh(2)) & "," _
            & "Height" & CStr(ltwh(3)))
        List1.Items.Add("Name=" & objAcc.accName(child))
        List1.Items.Add("Value=" & objAcc.accValue(child))
        List1.Items.Add("Description=" & objAcc.accDescription(child))
    End Sub

End Class
------------------------------------------------------------------




ここで、「As Any」の部分をどのうように変更してよいかわかりません。
「IAccessible」の部分の扱いがあっているのかも不安です。
申し訳ないですがご教授いただきたいです。

[ツリー表示へ]
タイトルRe: As Any  VB6 からの移行
記事No11504
投稿日: 2015/10/14(Wed) 13:21
投稿者花ちゃん
> ここで、「As Any」の部分をどのうように変更してよいかわかりません。
> 「IAccessible」の部分の扱いがあっているのかも不安です。

VB6.0 から .NET 系に移行される場合は、変数の型の違いに注意して下さい。
http://homepage1.nifty.com/rucio/main/kiso/DataType.htm

Any は、.NET 系ではサポートされていないので、基本的に使用する変数の型に置き換えます。
場合によっては、複数の型の関数を作成して使用する場合もあります。
今回の場合は、ByRef ppoleAcc As Accessibility.IAccessible のように変更します。

尚、それ以前に、VB6.0 の Long 型は、.NET 系では、Integer 型等になりますので、そのままでは
正しく動作しません。

ここのサイトのフリーソフトの[VB2005〜用 Win32 API 簡易リファレンス]を参考にして下さい。
http://hanatyan.sakura.ne.jp/freesoft/zisaku.htm

AccessibleObjectFromPoint 関数の記載も有ったはずです。
または、上記関数名でWEB上を検索すれば見つかるかと。

[ツリー表示へ]
タイトルRe^2: As Any  VB6 からの移行
記事No11505
投稿日: 2015/10/15(Thu) 05:14
投稿者おおしろ
花ちゃんさん、返信ありがとうございます。
助言を参考にもう少し頑張ってみます。

[ツリー表示へ]