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

BOOKをみる

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


50 へのDrag&Drop、これらによる外部ファ イルの取り込みについて解説していく。 3. Delphiで 実現するためには  実際にDelphi で実現するためには、 いくつか情報が必要である。必要となる 情報とその取得方法について、アプリ ケーションのパターン別に説明しよう。 アイコンにドロップインして アプリケーションを起動する場合  実際のところ、特に処理をしなくても Delphi で作成したプログラムアイコン は、ドロップインを受け付けるように なっている。しかし、受け入れ後の処理 ロジックを作成していないため、何も起 こらない。  何かを起こす処理ロジックを作成する には、受け入れたファイル名が必要であ る。コマンドライン引数を利用すれば、 簡単にそのファイル名が分かる。コマン ドライン引数とは、プログラム実行時に 指定される引数のことで、Delphi では ParamCount とParamStr を用いて取 得できる。  コマンドプロンプトから実行する例を 見ていただけると分かりやすい。【図3】  コマンドプロンプトでは、以下の形式 になっている。 アプリケーションのパス(半角スペース) 開くファイルのパス  ParamCountでは、このパラメータ(開 くファイルのパス)の数を取得する。 ParamStr では、指定した番号のパラ メータを取得する。ただし、ParamStr の0 番目はアプリケーションのパスが 入っているため、番号を指定する場合に は注意が必要だ。 実行中のアプリケーションに ドロップインする場合  実行中アプリケーションでファイルを 受け取る場合、Windows に、アプリケー ションがDrag&Drop を受け入れるこ とを伝えなければならない。この手続き を行うのが、Windows API のDragAc ceptFiles 関数である。  API にWindowHandle とTrue( ド ロップされたファイルの受け入れ許可指 定)を渡すと、フォーム上でDrag&Drop の受け入れが可能となる。  WindowHandle とは、Message を送 信する際に画面上のオブジェクトを識別 するために、個々の要素に割り当てられ る一意の番号のことである。フォームや アイコンなどのDrag&Drop の受け入 れを許可するオブジェクトは、このWin dowHandle で指定する。  DragAcceptFiles を許可すると、ファ イルがドロップされた時、フォームに WM_DROPFILES というWindows Me ssage が送られる。ただし、このWindo ws Message は、Drag&Drop が行われ たことを伝えるだけで、実際のファイル 名やパスは取得できない。  従って、DragQueryFile 関数を用い て、ファイルのパスを取得する必要があ る。このAPI は、複数のファイルが渡 された場合でも、1 つのファイルしか取 得できないが、何番目のファイルを取得 するかの指定は可能である。  また、パラメータのファイル番号部分 に「$FFFFFFFF(= -1)」を指定した 場合には、いくつのファイルがドロップ されたのかを返す仕組みとなっている。  なお、必要なファイル名が取得できた ら、最後にDragFinish 関数でメモリを 開放する。これを行わなかった場合、使 用可能なメモリが減っていき、Windows がフリーズする場合があるので必ず行う ようにする。 4. Windows Messageとは  前章で出てきた「Windows Messag e」 について、少し詳しく説明する。  Windows Message とは、Windows (OS)がそれぞれのWindow を制御す るために使っているもので、これらを Delphi で意図的に記述することにより、 Windows が行っている動作を取得した り、逆に動作するようにしたりできる。  例えば、ユーザーがマウスやキーボー ドで入力した時、それらはまずWindows によって取得される。その後、Windows は、それぞれのアプリケーションにWin dows Message として送信する。アプリ ケーションは、Windows Message を受 け取ることによって、ユーザーがどのよう な入力を行ったのかを知ることができる。 【図4】 ●”Hello!”の例  Delphi でイベントを記述する場合、 例えば、Create イベントに”Hello!”と いうダイアログを表示する場合について 考えてみよう。  このアプリケーションを実行した場 合、まずWindows がフォームを作成し、 Windows からDelphi へWM_CREATE のWindows Message が送信される。  Delphi ではそのWindows Message を受け取り、Delphi の中でCreate イベ ントに書かれた内容を実行するよう、 Windows 側にWindows Message を送 信する。  すると、”Hello! ”と書かれたダイアロ グが表示され、ダイアログ内のボタンを 押すと、それがまたWindows Message でDelphi に送信され、「ダイアログを出 す」という1 文が終了する。  このように、Create イベントやDest roy イベント等の多くのWindows Messa ge 取得はDelphi が自動で行うため、特 に意識せず使用することができる。【図5】  他方、Drag&Drop のWindows Mes sage(WM_DROPFILES)は、対応し ている標準のイベントがないため、意図 的にDragAcceptFiles をTrue に設定 する必要がある。これによって、Drag &Drop のWindows Message(WM_DR OPFILES)を取得することができるよ うになる。 5. 実装方法  実際に簡単なサンプルを作成する。 アイコンにドロップインして アプリケーションを起動する場合  例として、ドロップしたファイルパス を表示するだけの簡単なプログラムを作 成する。これはForm のOnCreate また はOnShow のイベント時に、ParamStr を使用すればよい。単純に取得したパス を表示するだけのプログラム例である。  まずは、コンポーネントをフォームに 追加する。