●
アイコンを投げ入れた時のマウスボタンは、どちらなのかが判る様に改造。
ShellAPI の DragAcceptFiles を止めて、IDropTarget を RegisterDragDrop する方法を使った。
ただ、よく判らない部分があり、これで大丈夫なのか不明。
これまでのとは、CLSID などは変えて、別物にしてある。
通知を受け取る関数の名前と、キーの状態の表し方は変更。
● 使用テスト
←この中に、アイコンを投げ入れると、↓そのパスを表示する。
● 使い方
▽ 要素
<object classid="clsid:B1632519-F160-4010-AA10-BF0DC12245BA"
id="iconPit" width="幅" height="高さ"
ondragover="return false" ondragenter="return false" >
... param は、省略
</object>
▽ 通知の受け取り方
function iconPit::onDropFiles( paths, iKeyState ){
// アイコンが、ドロップされた時。
alert( paths ) // xxx.innerText = paths
}
// 受け取る値は、パスが、複数なら、改行( \n 1文字)で区切ってあるので、
// 配列への変換は、paths.split("\n")
// 2つ目の引数は、ボタンと、修飾キーが押されているかどうかを表す数値。
// 左マウスボタン: 1 、右マウスボタン: 2 、
// [Shift]キー 4 、[Ctrl]キー 8 、[Alt]キー 32 、合わせてなら、その和 (ビットOR)。
function iconPit::onDropText( text, iKeyState ){
// テキストが、ドロップされた時。
alert( text )
}
function iconPit::onDropLink( url, iKeyState ){
// ブラウザのリンク(Anchor)が、ドロップされた時。IE は不可。
alert( url )
}
function iconPit::onDropOther( vbAry, iKeyState ){
// データを文字列として得る事に失敗した場合?に、
// 文字列でなく、VBArray で、数値(0~255)の配列を。
alert( vbAry.toArray() )
}
( iconPit は、object に指定した要素ID 。)
その他の説明は、省略。以前の版の説明を、。
● ファイル
./DropFilesB.ocx 当該のコントロール
./DropFilesB/ ソース
FormImpl.pas 作業部分
FormImpl.dfm フォーム
DropTarget.pas 加えた IDropTarget の部分。
DropFilesB_TLB.pas タイプライブラリ
DropFilesB.idl タイプライブラリ
DropFilesB.dpr プロジェクトファイル
▽ 履歴
2011/8 IDropTarget 版。