Delphi Programming / Object Pascal

[掲載 2015年09月15日] [更新 2017年08月07日] Delphi 一般・その他 |
| クラス名のプリフィックスの T ( 入門者用 ) |
| 動作確認等 |
Windows 7 U64(SP1) |
| 01_クラス名のプリフィックスの T の意義 - オンラインヘルプ |
Delphi では、コンポーネント (コントロール) 等のクラス名に、プリフィックス (プレフィックス) として大文字の T を付けるのが慣習になっています。
プリフィックス (prefix) を和訳すると「接頭辞」となりますが、文字列に特別な意味を持たせる場合等に付けます。
Button を和訳すると「ボタン」です。これは汎用的なボタンと言う用語です。ボタンと言っただけでは、Delphi の TButton を意味するとは限りません。外観上は、TButton, TSpeedButton も TBitBtn もボタンです。ワイシャツのボタンも「Button」です。
これを、Button コンポーネントではなく、TButton コンポーネントと書けば、それが確実に、クラス名が TButton のボタンコンポーネントということが明確になります。
プリフィックスの T の有無による違いは、ネットでの検索でも確認することができます。このことを実際に TPanel で確認してみたのが下図です。
最初の図は Panel という語句を、Google の検索エンジンで、Delphi のオンラインヘルプ内を検索した結果です。TPanel そのものの記事は 1 件もヒットしていません。次の図は同じく TPanel という語句で検索した場合です。TPanel で検索すると、検索対象である目的の、TPanel そのものの記事がヒットする可能性が高いことが分かります。 |
 |
図1
Panel の検索結果
|
 |
図2
TPanel の検索結果
|
上の図は、Delphi のオンラインヘルプ内を検索した結果です。
ネットの検索エンジンでは、ウェブページのタイトルや、大きな文字、強調文字がヒットする可能性が高くなっています。下図のように、ウェブページの記事のタイトル、あるいは、記事の本文中に、必ずしもプリフィックスの T を付けたクラス名が使われているとは限りません。したがって、TButton の記事を検索する場合、Button で検索した方がヒットする可能性が高くなります。
当サイトの記事のタイトルとサブタイトルにはクラス名を使用しています。そのままですと検索エンジンでヒットしなくなります。そこで、本文中には クラス名ではなく、StringGrid とか DBGrid 等を用いている記事もあります。
当サイトの記事は、クラス名で検索した方がヒットする可能性が高くなっています。例えば極端な例ですが、Actionlist
では 1 件もヒットしませんが、TActionlist であればヒットします。 |
 |
図3
TPaintBox の検索結果
- 親切 (?) に、T を除外して検索してくれる
- 元のキーワードの箇所をクリックすれば、元のキーワードで検索できる
- ただし、ヒットするページや順番は異なる
|
[備考 1]
「TButton コンポーネント」ではなく、正確には「クラス名が TButton のコンポーネント」と書くべきかも知れませんが、意図は伝わっていると思われます。 |
[備考 2]
Delphi でプログラムをやっている人にとっては、Button は TButton のコンポーネントを意味するかも知れません。しかし、一般的には単なる「ボタン」という英語の単語です。同じように Panel はパネルの英単語であって、Image は イメージの英語の単語です。
これらの単語の先頭に T を付けると、Delphi 専用の用語となるわけです。これは、便利で理にかなった仕様、慣習と言えます。Delphi の特長の 1 つと言って差支えないでしょう。
興味があるのは、TStringList は StringList と書く方がいますが、TList を List と書く方はほとんどいないようです。TList は TList のようです。
|
[備考 3]
大文字の T が慣習的に使われている理由は分かりませんが
、型定義にも大文字の T が使われています。このことから、type (型) の t を意味すると解釈することもてきます。 |
| 02_クラス名のプリフィックスの T の意義 - オフラインヘルプ |
上の説明はネットの検索エンジンを使用した例です。
オフラインのヘルプで調べる時も同じです。下図は Delphi 6 のヘルプで、TOpenDialog を調べる場合です。T がない OpenDialog というキーワードはありませんが、T を付けた TOpenDialog であればすぐ見つかります。
TOpenDialog というクラス名のコンポーネントに OpenDialog という名前を付けることがあるかも知れません。OpenDialog1, OpenDialog2,... 等も TOpenDialog に付ける名前としては一般的と言えます。そのような「名前」ではなく、クラス名の TOpenDialog がキーワードなのは妥当と思われます。
既に述べたように、一般的には、Button は 英語の Button であって、TButton ではありません。それと同じように、TOpenDialog 等も同じ扱いにしておけば、キーワードに統一性が保たれます。
List 等も同じです。List そのものを調べたいのであればキーワードを List にします。TList を調べたいのであれば TList というキーワードで調べます。 |
[備考]
本項の現象はよく経験しました。問い合わせてきた方のヘルプにはいくら探しても見つからないが、筆者のヘルプには何故かある、という現象です。
現在はオンラインヘルプが充実しているので、オンラインヘルプの記事の URL を提示することができます。 このような現象を経験することはなくなりました。 |
 |
図4
OpenDialog というキーワードはない |

|
図5
TOpenDialog というキーワードはある |
| 03_プロパティ名の汎用表記 TButton.Caption 等 |
Delphi のオンラインヘルプで TButton を検索して、プロパティの Caption の記事を見ると、以下のように、Vcl.StdCtrls.TButton.Caption と書いてあります。
Vcl.StdCtrls は TButton コンポーネントのソースコードがあるユニット名です。Vcl はユニットスコープ名と言います。したがって、実質上 TButton.Caption ということになります。 |
//オンラインヘルプの表記
Vcl.StdCtrls.TButton.Caption
//ユニット名を除いた表記
TButton.Caption
プロパティの Caption 名だけでなく、TButton.Caption のように、コンポーネントのクラス名が書いてあれば、これが TButton の Caption プロパティの記事であることが明確です。
コンポーネントの名前 (Name プロパティの値) は、デフォルトでは Button1, Button2, ... というように付けられますが、何かを「開く」操作をするボタンには btnOpen 等という名前にすることもあります。
したがって、以下のように TButton の部分を実際の Name プロパティの値に置き換えればいいことになります。
Button コンポーネントということで、Button.Caption にした場合は、Name プロパティの値が Button である TButton コンポーネントの Canption プロパティ、Button1.Caption の場合は、Name プロパティの値が Button1 の TButton コンポーネントの Caption プロパティを意味することになります。
一方、プリフィックスの T を付けてクラス名にすれば、汎用的な説明に使用できます。 |
//プロパティの汎用表記
TButton.Caption
//実際にはコンポーネントの名前(Nameプロパティの値)に応じて以下のようになる
//最初のはTがないので,TButtonコンポーネントのNameプロパティの値.クラス名ではない
Button.Caption
Button2.Caption
Button2.Caption
Button3.Caption
btnOpen.Caption
|