|
▼Abyss さん:
いつもありがとうございます
>今回のケースなら、IAccessibleのaccHitTestメソッドで
>indexを取得する方法が簡単だと思います。
>kanabunさんのご紹介掲示板でshiraさんも
>そのような方法を提示してます。
当時は GetTextExtentPoint32 API がこういうときにも使えるとの
shiraさんからのレスに「舞い上がっていた」ので、ListBoxのTextHeight
取得のための紹介下さった他の方法、あまり検証してませんでしたが、
そうですか、あのスレではそういうことにも言及があったんですねぇ
>accHitTestメソッドの利用なら割と簡単に
>操作が可能になります。
なるほど、こういうときに accHitTest で調べれるんですね、
勉強になります。
ほかにも いつかパクリたくなるアイデアいっぱいです。
> With New DataObject
> .SetText ObjPtr(Me)
> .StartDrag
> End With
> ptr = CLng(Data.GetText)
>
> If ptr = ObjPtr(Me) Then
> Effect = fmDropEffectNone: Exit Sub
> End If
>
> If Ptr2Cls(ptr).Index < 0 Then
> Effect = fmDropEffectNone
> End If
> Dim fIndex As Long
> Dim ptr As Long
> Dim acc As IAccessible, mCls As Class1
> Dim LBFrom As MSForms.ListBox
>
> If Action <> fmActionDragDrop Then Exit Sub
>
> ptr = CLng(Data.GetText)
> If ptr = ObjPtr(Me) Then Exit Sub
>
> Set mCls = Ptr2Cls(ptr)
> fIndex = mCls.Index
> If fIndex < 0 Then Exit Sub
>
> Set acc = LBox
> RtlMoveMemory ii(0), GetMessagePos()
> NewIndex = acc.accHitTest(ii(0), ii(1)) - 1
|
|