【DO!BOOK・ページリンク】
2010_migaro_techreport_001   54 / 84

BOOKをみる

10秒後にBOOKのページに移動します


52 【使用するコンポーネント】 ・TPanel:ツールパレット(Standard) ・TMemo:ツールパレット(Standard) ・TBitBtn:ツールパレット(Additional)  次に、コンポーネントのプロパティを 設定する。今回はTBitBtn のKind を 変更する程度で、他はデフォルトの設定 でかまわない。  あとは、OnCreate またはOnShow の イベントに、ソースを記述すれば完成だ。 【ソース1】  実行すると、画面のようになる。【図6】 実行中のアプリケーションに ドロップインする場合  例として、csv ファイルをDrag&Dr op すると、先ほどのプログラムと同様 に、ファイルパスを画面上のMemo に 表示するプログラムを作成する。  こちらでも、まずはコンポーネントを フォームに追加する。 【使用するコンポーネント】 ・TPanel:ツールパレット(Standard) ・TMemo:ツールパレット(Standard) ・TBitBtn:ツールパレット(Additional) @ uses 節にShellAPI ユニットを追加 する。  今回必要なDragAcceptFiles 関数、 DragQueryFile 関数、DragFinish 関数は、すべてShellAPI ユニットに 格納されている。【ソース2】 A Create 時にDragAcceptFiles 関数 を呼び出す。【ソース3】  Handle は自身のフォームのHandle、 True は許可を意味している。 B private 部に使用する手続きとWind ows Message を追加する。【ソース4】 C手続きの処理を記述する。【ソース5】  処理は以上である。実際に動かすと、 画面のようになる。【図7】  アイコンとアプリケーションのどちら の場合も、一度に取得できるファイル名 は1 つだけなので、複数ある場合には繰 り返し文を利用する。  また、アイコンへドロップインした場 合、ParamStr で取得される0 番目はア プリケーション自身のファイルである。 一方、アプリケーションにドロップイン した場合、DragQueryFiles で取得され る0 番目は、アプリケーション自身では なくドロップインされたファイルであ る。これらにも注意が必要だ。 6. 応用  これまでの内容を用いて、少し実践的 なプログラムを紹介する。今回は、実行 中のアプリケーションにドロップインす る場合を例とし、追加する形で紹介する が、アイコンにドロップインする場合に も、ほぼ同じ記述で使用できる。  次の処理では、取得するファイル数を 1 つに限定する。また、拡張子をcsv 形 式に限定する。取得できたファイルパス からcsv ファイルのテキストを、TStri ngList を用いてStringGrid にセットす るまでのロジックを追加していく。 【追加コンポーネント】 ・TStringGrid:ツールパレット(Additional) Dコンポーネントを追加する。今回は sgList と命名している。 前章の手続きを、ソース例のように 変更する。【ソース6】  ソースについて説明していこう。  ExtractFileExt は、文字列から末尾 に最も近いドット「.」を探し、それよ り後の部分を返す関数で、主に拡張子の 取得に使用される。今回はcsv に限定 するために使用している。  StringGrid への入力は、まず変数 slCSV1(TStringList)にファイルのテ キスト内容をすべて保持する。TString List に入力された文字列はCount プロ パティで個数が取得できるため、 slCSV1 のCount プロパティからcsv ファイルの明細行数を取得できる。  次に、取得した行数をStringGrid に 設定し、テキストファイルを1 行ずつ変 数slCSV2(TStringList)のCommma Text プロパティにセットする。  もともと1 行であった文字列をCom mmaText プロパティにセットすると、 カンマ「,」部分で区切った文字列のリ ストに変換される。  行数と同様にCount プロパティから 列数を取得し、取得した行数・列数から StringGrid のセルに入力していく。  実行すると、以下のようになる。【図8】 図8-1:正常な場合 図8-2:複数ファイルをドロップインした 場合 図8-3:csv 以外のファイルをドロップ インした場合  これらをさらに応用すれば、簡単に csv からAS/400 へ、内容を確認・修正 しながらファイル転送するプログラムな どの作成が可能である。同様に、OLE 等を用いてExcel ファイルの読み込み といったことも可能となる。 7. 最後に  外部ファイルの取り込みやWindows Message の処理と聞くと難しい印象を 受けるかもしれないが、プログラミング してみると実に100 行にも満たない記 述で実行できることが分かるだろう。  ユーザーの満足度が高いアプリケー ションを開発するために、Drag&Drop など、こういった直感的な操作をアプリ ケーションに組み込むことを、今後も設 計者として考慮していただければ幸いで ある。 M