Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2004年12月11日] [更新 2015年02月16日] Delphi サンプルプログラム集
   
Delphi サンプルプログラム集
動作確認等 サンプルによって異なる.Delphi は全て Pro
全てのサンプルがダウンロード可能 (一部を除き実行ファイル同梱)
全サンプルプログラムのダウンロード用プログラム
AllSamplesDownLoad.zip [867 KB] 2016年02月09日版 (ソースコード付き)







Delphi サンプルプログラム集


当サイトのサンプルプログラム集は,主に Delphi の VCL のサンプルを掲載しています.
基本的に,Delphi の「コンポーネントの使い方」のような記事はありません.コンポーネントの作成や開発に関係する記事もほとんどありません.主体はコードとしてのサンプルです.
  • 記事のページでは,設計時と動作時の画面があり,概要を理解しやすいようにしている
  • ほとんどのサンプルに,EXE ファイルを添付しているので,すぐ動作を確認できる
  • ソースファイルも添付しているが,各ページにもコードがあり,ネット上でも確認できる
  • ソースコードや動作内容の説明はあまり詳しくない
  • ソースコードには覚書のためのコメントがあり,見苦しいかも知れない

実行形式ファイルである EXE が添付してあるということは,該当するサンプルコードは,少なくとも筆者の環境では所定の動作をしたということです.

目的の結果を得るためのサンプルコードを複数掲載している記事もあります.全く実用にならないサンプルプログラムもあります.
どのサンプルコードが目的に適しているか,使い物になるかは,基本的に,利用者が判断することです.実際に試してみて,それが実用に耐えるものでなければ,「実用に耐えるコードではない」とか「このコードでは使い物にならない」という情報が得られたことになります.
自分が期待する動作をするコードだけが「情報」とは言えません.



[お願い]
記事の中やメールでの返信で「管理者権限」という用語を使用していることがあります.用語の解釈の違いによるトラブルを避けるためにも,以下の記事で確認いただけると幸いです.
「管理者権限で実行」とは「管理者として実行」の意味です.

Windows Vista 以降では「Windows を管理者権限で使用している」という状況は存在しません.
Windows Vista 以降というのは,2015年12月16日現在の時点では,Windows Vista, 7, 8, 8.1, 10 を意味します.




サンプルプログラムの番号と添付ファイルの構成


サンプルプログラムに番号が付いていますが,この番号は掲載順ではありません.同じような種類,内容のものをなるべく近い番号で掲載するように努力していますが,番号が不足したりした場合は,離れた番号となっていることもあります.

ダウンロードして保存することを考慮して,ファイル名を変更することは極力しないようにしていますが,記事のタイトルは,状況に応じて変更することもあります.フォルダ内の構成も変更することがあります.古いフォルダを削除してから解凍した方がいいかも知れません.




動作確認環境等に注意


コミュニティの場では,環境を明らかにしないのが慣習となっているようです.
しかし,Windows のバージョンや 開発に使用した Delphi のバージョンによって,実装されている機能には違いがあります.したがって,プログラムは,開発環境または,実行環境によっては,期待通りの動作をしない場合があります.
特に Windows Vista,インターネット・エクスプローラ 7 (IE7) 以降,Delphi 2009 では,いろいろな仕様変更があります.

ワードやエクセル操作関係のサンプルコードは,それらのバージョンも影響してきます.コードの修正や更新に伴い,Delphi 2007 以前のバージョンで再コンパイルしても,Windows 98 系,Windows 2000 では動作しないサンプルも増えてきています.

また,動作対象の Windows に対応した Delphi でコンパイルした場合と,そうでない Delphiで作成した EXE とでは,動作が異なることもあります.更に,どの Windows 上でコンパイルしたかによっても実行結果が違うこともあります.


古いバージョンの Delphi では,TWebBrowser 等,OLE 関係のコントロールや機能を使用する際,ユニットの最後に,次のような初期化のコードを追加しないと正常に動作しないことがあります.
バージョンによる違いは,プロパティやメソッド,イベント類の有無だけではありません.


// OleInitialize等の使用には,usesにActiveXが必要

initialization
  OleInitialize(nil);
finalization
  OleUninitialize; 
end. // ユニット最後のend


当サイトの実行画面例の画像類は,全て,実際に動作確認環境で実行した結果です.そのことを明確にする意味も含めて画像を掲載しています.
画像を掲載しているのは,どのような動作をするサンプルプログラムなのかを,視覚的に容易に確認できるようにする意味もあります.情報の 80 % は視覚から,と言います.広告類が画像であるのもうなづけます.




手元の Delphi のバージョンでコンパイル可能かを確認


[000_コマンドラインコンパイラの実行] のプログラムを使用すると,手元の Delphi でコンパイル可能かを簡単に確認できます.IDE を起動する必要はありません.
ただし,リソースファイル (拡張子が .res) がないプロジェクトはコンパイルできません.また,必要なファイルにはライブラリのパスが通っている必要がありますが,[000] のサンプルでは,IDE とは独立したライブラリのパス設定が可能となっています.





オブジェクト・インスペクタと OnCreate や OnShow での設定


オブジェクト・インスペクタでの設定は,「設計時の設定」,OnCreate や OnShow での設定は,「実行時の設定」ということになります.

サンプルプログラム集の記事は,コードをコピペしても利用可能なように,フォームの OnCreate や OnShow イベントでプロパティを設定しているサンプルがあります.

これらのプロパティの多くはオブジェクト・インスペクタで設定可能です.OnCreate や OnShow イベントで設定した場合と,オブジェクト・インスペクタで設定した場合とでは,動作に違いがあることがあります.OnCreate や OnShow イベントは,オブジェクト・インスペクタでの設定が内部で終了してから発生します.

サンプルのコードを実際にアプリケーションで利用する際は,オブジェクト・インスペクタで設定可能なプロパティは,オブジェクト・インスペクタで設定することをお勧めします.大きなトラブルの原因となることは考えられませんが,過去に,フォームのリサイズによるチラつき,TListView に関係する問い合わせがありました.表示サイズやアライメントが決まっているのに,わざわざ OnCreate イベントで設定する必要はありません.




サンプルプログラムにあるコンポーネント類


サンプルプログラム集にも以下のようなコンポーネントやユニットがあります.
プリンタ設定コンポーネントのようなページ構成にしていませんが,特別な意味がある訳ではありません.単なる成り行きです.


表1
サンプルプログラム集のコンポーネント類

クラス名 コンポーネント名・機能等
TplJStopWatch マイクロ秒ストップウォッチ
タイマーとしても使用可能
Junki さんの提供のユニットを再配布
TplVertLabel 画像表示機能付き縦横両用ラベルコンポーネント
TplFolderTree
TplFileList
フォルダツリーとファイルリスト (フォルダリスト) 用コンポ
特殊フォルダ等は操作対象外
簡単な用途向き
Delphi にはシェルコンポーネントが添付されている
TplContextMenu コンテキストメニューコンポーネント
TplDropSource ドロップソースコンポーネント
ドラッグドロップで,エクスプローラへファイルを追加
TplFolderWatcher フォルダの監視コンポーネント
TplExplorerFolderView
TplExplorerFolderTree
シェル名前空間関係のインターフェイスを使用した,フォルダツリーとフォルダリストのコンポーネント
機能追加なしに,そのまま使用すれば何とか利用可能
ただし,Delphi 2010 以降専用で,動作可能 OS は Vista 以降
TplSendData メッセージによるプロセス間通信用コンポーネント
Halbow 資料館の TSendData コンポを Unicode 対応にしたもの
TplResizeImage 移動リサイズ可能な TImage の派生コンポーネント
ラバーバンドとグラブハンドルの表示機能付き
TplPicturePanel 移動リサイズ可能な 画像表示機能付き TPanel コンポーネント
ただし,グラブハンドルの表示機能はない
プロパティ,イベントの実装も十分ではない
TplDateEditPicker 拙作の元号選択式日付時刻入力コンポを日付ピッカー付きにしたもの
表示サイズやフォント関係のプロパティは未実装
TplDateEditPickerEx TMaskEdit に日付ピッカー機能を追加したコンポーネント
日付ピッカー表示用のボタンを,TMaskEdit の右側に配置
表示サイズやフォント関係のプロパティは未実装
TplDateEditPickerEEx TMaskEdit に日付ピッカー機能を追加したコンポーネント
日付ピッカー表示用のボタンを,TMaskEdit 内に配置
表示サイズやフォント関係のプロパティは未実装
TplPopupListBox TListBox をポップアップ表示するコンポーネント
このようなことも可能であるという例で,実用的な価値はほとんどない
TplDropStringGrid 標準の TStringGrid にドロップダウンリストの表示機能と,ダイアログ表示用のボタンの表示機能付き TStringGrid コンポーネント
TplEdit テキストの上下方向の表示位置を設定できる TEdit
左右のインデントも設定可能
TplMaskEdit テキストの上下方向の表示位置を設定できる TMaskEdit
左右のインデントも設定可能
TplBackPictRichEdit 背景に画像を表示できる TRichEdit


サンプルプログラム集のプログラムは,極力独立したプロジェクトで動作するようにしていますが,別ファイルにしているものもあります.下表はその一部です.

下表には,タイプライブラリの取り込みで作成したユニットも含まれています.タイプライブラリの取り込みで作成したユニットには,COM オブジェクトを操作するためのインタフェイスが実装されています.ユニット単独では機能しません.元になる DLL, OCX, ActiveX 等が必要です.



表2 
サンプルプログラム集で使用しているユニット類

ユニット名 機能
plCommandRedirect コマンドラインのリダイレクト用ユニット
plChgCompo コンポーネントをインストールしないで使用
派生元のコンポーネントと交換する方法
サンプルプログラム集のサンプルでも多用しているユニット
plThumImgList エクスプーラの縮小表示機能を使用した画像のサムネイル表示専用であるが,クラス名や実装プロパティを変更すれば,他のリスト管理にも使用可能
Halbow 資料館の汎用リストクラスを基に作成したもの
MultiLanguage_TLB 文字フォントやコードページ関係情報の取得と操作用
タイプライブラリの作成と取り込みで作成したコードを修正
Accessibility_TLB Delphi 2007 よりも前で IAccessible インターフェイスを利用するためのユニット.このユニットを使用したサンプルはない.添付のみ
タイプライブラリの取り込みで作成
UIAutomationClient_TLB UIAutomation インターフェイスを使用したアプリの情報取得や操作
タイプライブラリの作成と取り込みで作成したコードを修正
WbemScripting_TLB WMI の機能を使用するためのユニット
タイプライブラリの取り込みで作成
Scripting_TLB ファイル情報取得,ファイルやフォルダの作成・削除・移動等の操作
ファイルバージョンの取得にも使用
タイプライブラリの取り込みで作成
Shell32_TLB シェル関係の操作に使用
タイプライブラリの取り込みで作成
CREATOROCXLib_TLB Excel Create 3.0 (エクセルクリエータ) のコンポーネントラッパー
タイプライブラリの取り込みで作成
XlsxCrt_TLB Excel Create 3.6 (エクセルクリエータ) のコンポーネントラッパー
Excel Creator 3.6 は Excel 2007 以降のブック形式専用
タイプライブラリの取り込みで作成
ADOX_TLB JET データベースの新規作成で使用
タイプライブラリの取り込みで作成
JRO_TLB JET データベースの最適化で使用
タイプライブラリの取り込みで作成
plTaskbarList_TLB Delphi 2009 以前で,タスクバー関係操作を行うためのインターフェイスの実装.このユニットを使用したサンプルはない.添付のみ
タイプライブラリの取り込みで作成したユニットから必要な部分のみを取り出したコード
AcroPDFLib_TLB PDF 文書表示用のコントロール
タイプライブラリの取り込みで作成
Acrobat_TLB PDF 文書操作用
タイプライブラリの取り込みで作成
WinHttp_TLB WinHTTP 関係のインターフェイスを使用するためのユニット
タイプライブラリの取り込みで作成
IWshRuntimeLibrary_TLB WSH (Windows Script Host) の WshShell オブジェクト等を利用するためのユニット
タイプライブラリの取り込みで作成
MSScriptControl_TLB VBScript (Microsoft Visual Basic Scripting Edition:VBS) を利用するためのユニット
タイプライブラリの取り込みで作成
VBScript_RegExp_55_TLB VBScript の正規表現を使用するためのユニット
タイプライブラリの取り込みで作成
IDesktopWallpaper_TLB Windows 8, 8.1 の壁紙スライドショー用
タイプライブラリの取り込みで作成したユニットから必要な部分のみを取り出したコード




Halbow 資料館にあるコンポーネントとコード
Halbow資料館全プロジェクトソース
HalbowProject.zip [49.9 MB] 2008年09月06日版 (EXE同梱)


Halbow 資料館の中にも以下のようなコンポーネントやユニットがあります.
Halbow 資料館のコード類は,Delphi 3, 4, 5 の時代に作成されたものです.Halbow 資料館の記事は,元の記事をそのまま掲載する方針としています.そのため,Delphi 2009 以降には対応していないコードもあります.


[備考]
Halbow 資料館の記事は,2004年1月4日に閉鎖になった Halbow さんのサイトの記事です.Halobw さんから提供を受け,2004年1月19日から当サイトで掲載しています.



表3
Halbow 資料館のコンポーネント類

クラス名 コンポーネント名・機能等
TSubClass サブクラス化コンポーネント
TCPicture
TCStringList
EXE に画像やテキストを簡単に埋め込むためのコンポーネント
このコンポで EXE に埋め込ん画像やテキストは,起動時にロードするのでサイズが (非常に) 大きいと EXE の起動時間に影響する
[EXE に埋め込む - リソースの使い方] がお勧め
TKeyHook ローカルなキーフック用コンポーネント
TDropFiles エクスプローラからのドラッグドロップでファイル名を取得するコンポーネント
サンプルプログラム集にも,コンポーネントやコードがある
TOneInstance 二重起動の禁止のためのコンポーネント
TSendData メッセージによるプロセス間通信用コンポーネント
Delphi 2009 以降に対応したコードが以下にある
[650_他のアプリへデータ (文字列や画像) の送信 (Delphi 同士)]
TCopyPaste クリップボードで任意のデータを受け渡すためのコンポーネント
TMMTimer マルチメディアタイマー関数を使用した高精度タイマーコンポーネント [004_タイマー] 参照
TTrayIcon TrayIcon アプリケーション作成用のコンポーネント
Delphit 2006 以降には,同名のコンポーネントが実装されている
使用方法を解説したページもある
THintSetter ヒントウィンドウのカスタマイズ用コンポーネント
Delphi 2009 以降には,同様の機能を持つコンポーネントバルーンヒントコンポーネントが実装されている


表4
Halbow 資料館のユニット類

ユニット名 機能
SearchStrUnits 文字列の操作用
一部は Delphi 2009 以降では正常動作しない
一部だが,以下に Delphi 2009 以降に対応にしたコードがある
[02_部分文字列を数える - Halbow 資料館の Unicode 対応]
[04_一括検索 - Halbow 資料館の Unicode 対応と FindText 関数]
DataObjectListUnit 汎用リストクラス
使用するクラス専用のコードに修正した方が,使い勝手はよいだろう
Delphi 2007 以降であれば,ジェネリックが便利
CommonMemoryUnit 共有メモリクラス
Delphi XE2 まで使用可能であることを確認.Delphi XE2 以降で使用する時は,変数 numRead の型を NativeUInt にしておいた方がよい
DebugWndUnit 簡易デバッグウィンドウ
Delphi XE2 までは使用可能であることを確認




サンプルプログラムのダウンロード方法とブロックの解除


各ページの上の方,最初の方に,下図のような画像があります.これをクリックしてください.サンプル単位ではなく,そのページのサンプルの一括ダウンロードとなっています.
各サンプルの個別ダウンロードの要望がありましたが,対応の予定はありません.
ダウンロードしたら [ブロックの解除] をしてください.







謝辞


このサンプルプログラム集は,参考書,また,ML (メーリングリスト) やネット上のサイトの情報,掲示板などの発言を参考にして作成しています.参考書の著者,ネット上で貴重な情報を提供してくださった方々に感謝致します.