掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ドロップする場所を指定するには? (ID:82819)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
# 先の投稿の続きです。 OLEドラッグに関しては、クリップボードを想像してもらうと 理解しやすいかも知れません。たとえば、ワードパッドで適当な文書を書き、 太字や色付けなど、任意の書式設定を施したとします。 これをクリップボードに「コピー」すると、クリップボードには 「テキスト形式」と「リッチテキスト形式」の2つのデータが含まれます。 この場合、 ・[メモ帳]に貼り付けると、テキストが出力される。 ・[ワードパッド]に貼ると、書式付のテキストが出力される。 ・[ペイント]には貼れない。(画像形式が含まれていないので) という事になります。(ここまではわかりますよね) OLEドラッグの場合も、これと同じ事が行われています。 データ形式によって、ドロップ可能かどうかが判断されるのです。 手動OLEドラッグを開始する(OLEDragMode=手動で、OLEDragメソッドを呼びだす)と、 ドラッグ元(ソース)のOLEDragDropイベントが発生します。 このイベントで、「データ形式」を Data As DataObject に渡してあげます。 また、コピー/移動のどちらかを示すための Effect 引数も指定します。 (なお、クリップボード同様、DataObjectには複数のデータ形式を同時に格納できます) そうすると、それぞれのドロップ先(ターゲット)では、DataObject の内容を判断して、 『処理できるデータ形式が含まれている』→ドラッグ可能なカーソルアイコンになる 『処理できるデータ形式が含まれていない』→カーソルが進入禁止アイコンになる という処理が、Windowsによって自動的に行われる事になるのです。 ターゲットが自動ドロップ(OLEDropMode=自動)になっているなら、 ・PictureBoxなら、DataObjectに画像形式のデータがあるとき ・TextBoxなら、DataObjectにテキスト形式のデータがあるとき などに「ドロップ可能」となり、それ以外は「ドロップ不可」となります。 そしてターゲットが手動ドロップ(OLEDropMode=手動)になっている場合、 マウスが重なった時に、ターゲットでOLEDragOverイベントが発生します。 OLEDragOverで、DataObjectの中身を判断する事で、データをドロップ可能か どうかを、ソースに伝えることができます。 サポートしていないデータだったなら、Effect引数にvbDropEffectNoneを 指定すれば、自動的に「×」の進入禁止カーソルが表示されます。 なお、手動ドラッグ/手動ドロップを使ったOLEドラッグ&ドロップの コーディング方法は、先にも書いた、下記のURLを参照してください。 http://www.microsoft.com/japan/developer/library/jptech/MSDNNews/drgdrp.htm なお、DataObjectには独自定義のデータ形式を渡すこともできます。 その場合、DataObjectのメソッド(SetDataやGetFormat)に渡すデータ形式として、 標準の vbCFText や vbCFBitmap などといった定数の替わりに、 RegisterClipboardFormat APIを使って定義した値を使うことができます。 ユーザー定義形式でのデータのやり取りに関しては、MSDNライブラリの 『ユーザー定義のデータ形式の作成』の項を参照してみてください。 [Visual Studio 6.0 ドキュメント] └[Visual Basic ドキュメント] └[Visual Basic の使用方法] └[プログラミング ガイド] └[Visual Basic を使ってできること] └[マウス イベントおよびキーボード イベントへの応答] └[OLE ドラッグ アンド ドロップ] └[ユーザー定義のデータ形式の作成]
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.