日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
前回、プロジェクトに取り込む場合のXMLファイル構造についての注意点を書きました。今回はその注意点に従っているという前提に基いて、XMLファイルをスキーマによる妥当性チェックを行いながら、アプリケーションで読み込むロジックについての話です。
.NETにおけるOLEドラッグ&ドロップは、いろいろなデータを取り扱えますが、その制約について改めて確認しておきます。
Control.DoDragDrop メソッドで、『データは、基本マネージ クラス (String 、 Bitmap 、または Metafile)、あるいは ISerializable または IDataObject を実装するオブジェクトのいずれかである必要があります。』と説明されています。
つまり、これらのデータである限り、OLEドラッグ&ドロップが出来るという事です。
ではここで、前回ファイル編で使用したドロップソース側のサンプルを修正して、ListBox から ListView に置き換えてみます。ここでは、View プロパティを View.Details 、MultiSelect プロパティを false に設定している前提とします。そしてドラッグした、ListViewItem 自身をドラッグで受け渡すデータとしてみます。なお、ListViewItem は、ISerializable インターフェースを実装しているので、前述のデータ受け渡し制約の範囲内となります。
なお、今回も最後にサンプルコードがダウンロード出来るようにしています。詳細はそちらを見て頂きたいのですが、ListViewItem として、改造前同様任意のフォルダ内のファイル情報を表示しています。但し、今回の記事の関連で、若干ながら凝った造りにしています。
では、さっそく本題に入ります。
前回のテキスト編に続き、今回はファイルを対象としたドラッグ&ドロップを行なってみます。
ファイルのドロップターゲットになるアプリケーションは多いものの、ドロップソースとしての機能を持つものは、エクスプローラ的なもの位しかない様な気もします。しかし、ここではあえて、TreeView や ListView は使いません。これらは、別枠で記事にしたいと思っていますので、ここでは ListBox を使用する事にします。
またファイルの場合、ドロップターゲットとしてだけ機能すればいいケースが多い筈なので、今回はドロップソースと、ドロップターゲットを別プロジェクトにしてみました。
以前、Delphi5 にてOLEドラッグ&ドロップ対応をテスト的に行なった事がありますが、1から実装する必要があって、かなり大変だった記憶があります。しかし、.NET では Control クラスにて基本となるイベント等をサポートしていて、コントロールを使ってのOLEドラッグ&ドロップを実装するのは、結構簡単に出来ます。
今回は、基本的な部分の説明と、テキストのドラッグ&ドロップ記述例について書きます。
アプリケーションで自作カーソルを使用する場合、過去の記事「.NETでリソースにアクセスする」で示した事を行なえば、OKです。しかし1つ問題があります。この方法はモノクロでないカーソルやアニメーションカーソルには適用出来ません。
ヘルプの Cursor クラスの説明で、アニメーションカーソルやカラーカーソルはサポートしていないと明記されています。つまり、元々サポートされていないという事になります。私にとっては、これはかなり意外な事でした。アニメーションカーソルやカラーカーソルは確か Windows95 では既にサポートされていた筈ですからね。
では、絶対に使えないかというと、そうでも無いようです。Win32API を使用すれば可能な様です。という事で、今回はカラーカーソル及びアニメーションカーソルを実現する記述を説明します。
サロゲートペアのテストしたついでに、Unicode固有文字が含まれるかのチェック方法について、考えてみました。私の知る限り、直接その文字列中にUnicode固有文字があるかをチェックする Win32API や .NET クラスの類はない筈です。
では、どうすればよいでしょう。
怒涛のアイコンネタ、第3弾です。
今回は、指定されたファイルからアイコンを抽出して、それを ImageList に登録する汎用的な関数を公開します。
指定対象となるファイルは、アイコンリソースが含まれたファイル(実行ファイル/DLLファイル、アイコンライブラリファイル、アイコンファイル)です。
アイコンネタ第2弾です。
アイコンをコントロールに表示する場合、
があります。
※2011/03/27 kurimu さんからの御指摘内容を本記事に反映させました。
さて前回、システムイメージリストのハンドルを取得して、ListView への登録を行なうところまで実装しました。今回は実際にアイコンを表示させます。