Win32 API by Object Pascal of Delphi のページにようこそ! このページでは、 Borland(旧INPRISE)社のプログラム開発環境である Delphi で使われている Object Pascal という言語をつかって、Windows 95/98/2000 が DLL (ダイナミック・リンク・ライブラリ)として提供している Win32 API (アプリケーション・プログラミング・インターフェース)という関数群を呼び出してウィンドウズアプリケーションをつくる方法を解説しています。
どのようなプログラム言語を使ってアプリケーションを開発するにしても、できあがったプログラムは直接的に、またはクラスライブラリなどをとおして間接的に API を呼び出しているのです。 したがって、プログラミング技術を突き詰めていくと、究極的には API の適切な使用方法に関する知識が不可欠であることが分かって来るでしょう。ここでは、ごく基礎的なことからかなり高度な内容まで、出来るだけ分かり易く解説することを目指したつもりです。 どうかご一読ください。
どんな方々を対象にしているのか? |
Delphi讃歌 |
ここでする事 |
本稿の読み方と使い方 |
About me... |
Dephi は素晴らしい。私は Delphi にぞっこんです。なにがいいかって? そう、RAD ベースで簡単にウィンドウズアプリケーションがつくれること。パスカルというプログラミング言語には曖昧さがなくて、使っていても気持ちいいこと。VCL (ビジュアル・コンポーネント・ライブラリ)が美しい。そして、なによりコンパイラがすばらしい!!
Borland 社(あえて INPRISE とは言わない)が長年育ててきたパスカルとそのコンパイラは、非常に素晴らしい。CやC++やBasicなどの言語を使った事がある人でも、Delphiのコンパイラが非常に優れたものであることには異論があるとは思えないほどである。さらに言えば、VCL も素晴らしい。ソースを見ることができるひとには、是非、このVCLソースを深く味わうことをおすすめする。 VCL は Object Pascal という強力な言語を材料としてクラスの階層を積み上げて出来ており、 人工的な構築物としては最も美しいものの一つである、と感じるのは私だけではあるまい。
しかし、しかしである。VCL を使った RAD 環境でのプログラミングにある程度習熟してくるにしたがい、フォームにコンポーネントをドロップしてイベントハンドラを書くということを繰り返していて、何となく疑問やむなしさを感じることはありませんか? イベントハンドラを呼び出すメッセージは、どこからどのような仕組みでコンポーネントのメソッドを呼び出すのか? ここをこうしたいんだけど、このクラスのプロパティーやメソッドを使ってはできないかもしれない、とか。このようなプログラマが進む次の段階がコンポーネントの作成である。 Delphi の特徴の一つは、自分自身でコンポーネントを作成して、その機能を拡張できることだ。 巷間には、便利なコンポーネントやその作り方を解説した書籍が多数あるし、インターネットからはソースを参照できるコンポーネントが数千あるいは数万個もダウンロードできる。これらのコンポーネントの動作とソースを参照すれば、プログラマとしてのスキルは確実にアップする。 さて、その次の段階は?
Delphi のプログラミングテクニックに関する Tips や FAQ についての書籍やインターネットのホームページを見てみると、あまり使われない関数やクラスのプロパティーやメソッドを使用するか、Win32 APIを使えば解決できるものが9割以上を占めています。 特に、「APIを使えばできます」という答えが7割くらいあるでしょう。APIに関するレファレンスは、Cで書かれたものが多数出版されています。コードレベルでみれば、C と Pascal の差異はほんのわずかですから、少し C を勉強すればこれらの書籍は非常に参考になります。 また、Delphi 用に Pascal を使った API のレファレンスも最近出版されました。 これらを参考にすることで、RAD 環境での API の使用には適切に対処できます。
しかし、特定の問題を二、三個のAPI関数を使用して解決したとしても、 それは断片的な知識として残るだけです。 このようなことを多数回繰り返しても、 決してAPIに関する体系的な知識を得ることは出来ません。 第一、どのようなときにどのようなAPIを使ったらいいのか分かりません。 なぜ、このAPIを使えばその問題を解決できるのか、ということが分かりません。 ではどうしたらよいでしょうか?
ここでは Win32 APIを体系的に学ぶために、以下のことをします。
以上のことを、必ずしもここに挙げた順番ではありませんが、順を追って説明します。 これらのことを実際にコードを追い、また、Delphi で実行してみることにより、 Win32 の OS としての姿が自然に浮かび上がってくることでしょう。 また、メッセージの伝達方法とその処理方法が明確に知識として身に付き、API のレファレンスを読むだけで自力で使用方法を開拓できるようになります。 おまけとして、 VCL よりはるかに小さなクラスライブラリを手に入れることが出来、それを使って RAD 環境で作成されるより、はるかに小さな(典型的には1−2割の大きさの)実行ファイル(*.exe) が作成できます。また、ここで作成した多数のラッパークラスは RAD 環境でも使うことが出来ます。
本稿は、眺めているだけではあまり役に立ちません。読んで頂く必要があります。 本稿は、 Delphi の Object Pascal を道具として、Win32 システムが提供する API関数だけを使ってアプリケーションを開発する手法を紹介しています。 したがって、VCL や Object Pascal そのものの解説はいたしません。
本稿ではすべてのプログラムコードを公開しています。 Web ブラウザからマウスで選択してコードエディタに貼り付けることが出来ます。 したがって、読むだけでなく、実際に Delphi でコンパイルして実行し、動作を実感した上でコードを解析する事をおすすめします。 残念ながら、実行ファイル(*.exe)は、そのままでは当サーバ上には置けませんので、各実行コードは zip 圧縮したものをコードリストのしたのところからダウンロードできるようにしてありますので、実行ファイルだけで試すことも出来ます。
最初から通読することを前提にしていますが、章ごとに読むことも出来ます。 その場合は、 対象とする章の前の章の最後のところで、そこまでの骨格プログラムと各ユニットファイルを読むことができますので、ブラウザからエディタに貼り付けて取り出すことが出来ます。 通読する場合は、 適当に章を眺めてから、オフライン作業でブラウザをつかってキャッシュから読むようにすると、電話代が節約できます。
このページで公開しているプログラムコードの断片を、わたしに断ることなくどのように利用していただいてもかまいません。筆者としてのどのような権利も一切主張することはありません。ただ、ソースプログラムを公開・配布するときには、引用元として当ページを明記していただければありがたいです。
Windows のメモ帳( notepad.exe, 私のバージョンではサイズは 37.816キロバイト )やマインスイーパゲーム( winmine.exe, 24.224 キロバイト )はどうしてこんなにサイズの小さい実行ファイルなのか不思議に思ったことはありませんか? Delphi の RAD環境での開発では、どうがんばってもこれほど小さい実行ファイルを作ることはできませんね。本稿を読めば、その理由が分かります。 それでは....