ライブ テンプレート

提供: RAD Studio
移動先: 案内検索

RAD Studio 入門 への移動


ライブ テンプレートは再利用可能なスケルトン コード文です。コード エディタで Delphi および C++ 用の一連のライブ テンプレートにアクセス可能です。

[テンプレート]ウィンドウでテンプレート名をダブルクリックすることで、これらの定義済みコード スケルトンの 1 つを作成中のコードに挿入できます。また、テンプレート名を入力し Tab キーを押すことでテンプレートを挿入することもできます。RAD Studio ライブ テンプレートの XML ファイルは C:\Program Files (x86)\Embarcadero\Studio\21.0\ObjRepos\en\Code_Templates にあります。

[テンプレート]ウィンドウに独自のコード テンプレートを追加できます。ライブ テンプレートの名前は、テンプレート内のコード(たとえば class など)を表すか、コードの最初の単語(たとえば try など)に一致することがあり、一部には、コードに入力する単語に近い(正確に一致するわけではない)テンプレート名(たとえば forr など)もあります。独自に作成したテンプレート(およびサード パーティ製アドインで提供されるテンプレート)は、デフォルトでは、C:\Users\<user>\Documents\Embarcadero\Studio\code_templates ディレクトリに保存されます。

ジャンプ ポイント

ジャンプ ポイントは、Tab キーや Shift+Tab キーを使ってテンプレート内の要素間を移動できるようになる、キー入力フィールドのプレースホルダです。

編集可能なジャンプ ポイントがテンプレートに 1 つ以上ある場合、そのテンプレートをコードに挿入すると、テンプレートは自動的に同期編集モードになります。Esc キーまたは Enter キーを押すか、最後のジャンプ ポイントで Tab キーを押すと、同期編集モードが終了し、コード エディタは通常の編集モードに戻ります。

たとえば、arrayd(Delphi 配列)テンプレートには 4 つのジャンプ ポイントがあり、それぞれ、name(TMyArray)、low(0)、high(10)、var(Integer)という名前が付いています(かっこ内はデフォルト テキスト)。下図のように、最初のジャンプ ポイントが強調教示され、アクティブになっています。

ArrayD.png

arrayd XML コードと arrayd ライブ テンプレートそのものを比較するには、[テンプレート]ウィンドウを開き、arrayd テンプレートを選択して[コード テンプレートの編集]EditCodeTemplate.jpg)をクリックします。

例:Delphi 用および C++ 用の try テンプレート

このセクションでは、以下のような Delphi 用および C++ 用の try テンプレートを示します。

言語 テンプレート名 テンプレート概要

Delphi

try

try-finally (Create/Free あり)

C++

try

try-catch

Delphi 用 try テンプレート

下図は、[テンプレート]ウィンドウで Delphi 用 try テンプレートの上にマウス カーソルを合わせたときにコード概要ポップアップが表示されるところを示しています。縦棒("|")は特殊文字で、ここでは、テンプレート内のジャンプ ポイントを強調するために使用されています($ もジャンプ ポイントを区切るのに使用できます)。

DelphiTryPopup.jpg

下図は、Delphi 用 try テンプレートをアクティブにしたときにコード エディタに挿入されるテンプレートを示します。強調表示またはアウトライン表示されたジャンプ ポイントが同期編集モードでアクティブになっているため、そのテンプレートに出現するすべてのジャンプ ポイントを同時に編集できます。

TryFinallyDelphi.jpg

ここで、Delphi コード テンプレート try の XML ファイルを示します。[テンプレート]ウィンドウの[概要]列に表示される "try finally (Create/Free あり)" が記述されています。このテンプレートには、以下の記述が含まれています。

  • (variable、control、createparms という名前の)3 つのジャンプ ポイントの定義
  • コード補完control ジャンプ ポイントを関連付けるスクリプト(script)コマンド
 <?xml version="1.0" encoding="utf-8" ?>
 
 <codetemplate	xmlns="http://schemas.borland.com/Delphi/2005/codetemplates"
 				version="1.0.0">
 	<template name="'''try'''" surround="'''true'''" invoke="'''auto'''">
 		<point name="'''variable'''">
 			<text>
 				'''MyClass'''
 			</text>
 			<hint>
 				'''変数名'''
 			</hint>
 		</point>
 		<point name="control">
 			<script language="'''Delphi'''">
 				'''InvokeCodeCompletion;'''
 			</script>
 			<text>
 				'''Component'''
 			</text>
 			<hint>
 				'''クラス名'''
 			</hint>
 		</point>
 		<point name="createparms">
 			<hint>
 				'''コンストラクタのパラメータ'''
 			</hint>
 						<text>
 							'''(Self)'''
 						</text>
 		</point>
 		<description>
 			'''try finally (Create/Free あり)'''
 		</description>
 		<author>
 			'''Embarcadero'''
 		</author>
 		<script language="'''Delphi'''" onenter="'''false'''" onleave="'''true'''">
 			'''DeclareVariable(|variable|);'''
 		</script>
 		<code language="'''Delphi'''" context="'''methodbody'''" delimiter="|"><![CDATA['''|variable| := T|control|.Create|createparms|;
 '''try
 '''|selected||*||end|
 '''finally
 '''|*||variable|.Free;
 '''end;'''
 ''']]>
 		</code>
 	</template>
 </codetemplate>

テンプレートのコードは、<code> 要素の <![CDATA[ ... ]]> 内に記述されています。上記テンプレートの先頭要素は、次のような variable というジャンプ ポイントです。

|variable|

コード内の行をインデントするための、次のような特殊文字も含まれています。

|*|

二重インデントの場合は、以下を使用します。

|*||*|

C++ 用 try テンプレート

下図は、[テンプレート]ウィンドウで C++ 用 try テンプレートの上にマウス カーソルを合わせたときにコード概要ポップアップが表示されるところを示しています。ドル記号($)は、定義済みおよび組み込みのジャンプ ポイントを強調するのに使用される特殊文字です(| も使用できます)。

TryPopupCPP2.jpg

下図は、C++ 用 try テンプレート([概要]は 'try-catch')をアクティブにしたときにコード エディタに挿入されるライブ テンプレートを示します。 

TryCppAgain.jpg

C++ 用 try テンプレートの実際の XML は以下のようになっています。

 <?xml version="1.0" encoding="utf-8" ?>
 
 <codetemplate	xmlns="http://schemas.borland.com/Delphi/2005/codetemplates"
 				version="1.0.0">
 	<template name="'''try'''" surround="'''true'''" invoke="'''auto'''">
 		<point name="'''except'''">
 			<text>
 				...
 			</text>
 			<hint>
 				'''捕捉する例外クラス'''
 			</hint>
 		</point>
 		<description>
 			'''try-catch'''
 		</description>
 		<author>
 			'''Embarcadero'''
 		</author>
 		<code language="'''C'''" context="'''methodbody'''"><![CDATA['''try {
 '''$selected$$*$$end$
 '''} catch ($except$) {
 '''}'''
 ]]>
 		</code>
 	</template>
 </codetemplate>

テンプレートの実際のコードは、<code> 要素の <![CDATA[ ... ]]> 内に記述されています。

このテンプレートではドル記号($)を区切り文字として使用しているのに対して、Delphi 用 try テンプレートでは縦棒(|)を区切り文字として使用しています。次の特殊文字はコード内の行をインデントするためのものです。

$*$

二重インデントの場合は、以下を使用します。

$*$$*$

ライブ テンプレートの XML 記述

ライブ テンプレートは、以下の親要素を含むことができる XML ファイルです。

 <codetemplate xmlns="http: ... //schemas.borland.com/Delphi/2005/codetemplates" version="1.0.0"> ... 
 </codetemplate>

<codetemplate> 要素には以下の子要素が含まれています。

  • <template> </template> には属性が 4 つ(name、invoke、inplace、surround)があります。
    <template name="class" invoke="manual/auto">
    • name(テンプレートの名前、必須)
    • invoke(テンプレートの呼び出し方)。取り得る値は auto、manual、none のいずれかです。それぞれの意味は以下のとおりです。
      • auto = スペース キーまたは Tab キーを押す
      • manual = Tab キーを押す
      • none = Ctrl+J または Ctrl+Space を押すか、[テンプレート]ウィンドウを使用する
    • inplace - (論理値)展開テンプレートであることを示します
    • surround - (論理値)選択されたテキストをテンプレートで囲むことができることを示します。
  • <description>Text</description> – テンプレートの要素([テンプレート]ウィンドウにテンプレート名と共に表示される Text が記述されます)
  • <author>Author_Name</author> – テンプレートの要素
  • <point> </point> – テンプレートの要素(<description> や <author> と同様)。入力フィールドのプレースホルダを記述します。名前があり(必須)、以下の 3 つの属性(text|hint|script)が含まれています。
    • text – ポイントの属性。ジャンプ ポイントに表示されるテキストが記述されます。
    • hint – ポイントの属性。ポップアップ ヒントが記述されます。
  • script – ポイントかテンプレートのどちらか一方の属性。ほとんどの場合、invoke_code_completion() の関数呼び出しが記述され、以下の言語属性が含まれています。
    • language='Delphi' または language='C'
  • <code> </code> – テンプレートの要素。以下の 3 つの属性が含まれています。
    • language – 取り得る値は 'C' か 'Delphi' のいずれか(必須)
    • context - テンプレートがいつ使用可能かを指定します。たとえば、typedecl - type |methodbody - begin | end など。
    • delimiter='|' または '$'(コード内のジャンプ ポイントを示します)
    • 内容:
     <![CDATA[
       ここに実際のコードを書く。
       ]]>


スクリプト関数呼び出し

ポイントかテンプレートそのもののどちらかに関連付けられるスクリプト要素(<script>)では、さまざまな関数呼び出しを使用できます。

以下は、各スクリプト呼び出しが含まれている既存のテンプレートの一覧です。

  • language="Delphi":
    • InvokeClassCompletion
    • InvokeCodeCompletion(delphi\trycf.xml を参照)
    • PopulateCase(|expression|)(delphi\case.xml を参照)
    • DeclareVariable(|variable|)(delphi\trycf.xml を参照)
    • RemoveTemplate(delphi\inlinevar.xml を参照)
    • ValidateForTemplate(delphi\fors.xml を参照)
  • language="C":
    • invoke_code_completion(c\whiles.xml を参照)
    • populate_case($expr$)(c\switch.xml を参照)

関連項目