Delphi IDE の便利な機能 - その他の支援機能


[コード補完](https://qiita.com/CYonezawa/items/9cade021a8f1dd5b4e7c)の記事で触れましたが
[支援機能](http://docwiki.embarcadero.com/RADStudio/Rio/ja/%EF%BC%BB%E6%94%AF%E6%8F%B4%E6%A9%9F%E8%83%BD%EF%BC%BD)には、コード補完の他にもいくつかの支援機能があります
オプションの支援機能の設定をみると
「コードパラメータ」「ツールチップ式評価」「シンボルインサイト」「ヘルプインサイト」「ブロック補完」「エラーインサイト」「コードテンプレート補完」
があります
これらの支援機能はデフォルトでオンになっています

実際にこれらがどのような機能なのかを簡単に説明します

## コードパラメータ
メソッド (関数・procedure/function) 呼び出しの引数を表示します
メソッド名と左括弧 ( を入力する、または () 内にカーソルがある状態で Ctrl + Shift + Space を押すと、そのメソッドの引数が表示されます
メソッドの呼び出し形式が複数ある場合は、それらすべてが表示されます
![insight01.png](https://qiita-image-store.s3.amazonaws.com/0/164551/b675c318-45fd-f8b1-69c6-8598ff26e893.png)
引数をコード上に入力していくと、次のパラメータの箇所が太字になってくれて親切である
![insight02.png](https://qiita-image-store.s3.amazonaws.com/0/164551/95d48cb1-0269-3fe9-89e8-3817a452d48b.png)

## シンボルインサイト
これどんな定義だったけ？というときに便利な機能
コードエディタで、コード編集中に識別子の上にマウスカーソルを置くと宣言されている場所などを教えてくれる

以下は Button1 は TButton で定義されていて、その定義場所は同じユニットの 11 行目だぜ
クリックすると宣言場所に移動してくれるという例です
![insight03.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164551/f2fc23dc-3361-ff29-202d-a8e6157e41e5.gif)

## ヘルプインサイト
コードエディタで、メソッドなどの上にマウスを置くと、簡単な説明ウィンドウが表示されるという機能
シンボルインサイト＋コードパラメータ的な感じ
以下は MessageDlg に対するコードインサイト -> シンボルインサイト -> ヘルプインサイトの連携
![insight04.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164551/13682352-5b23-8a56-d649-c7f67a488cd6.gif)

## コードテンプレート補完
if, do, Case など予め形式が決まっている文などを挿入してくれる便利な機能
たとえば、if と書いて、tab キーを押すと if True then という一文を補完してくれて、カーソルは True のところでピコピコ
True の箇所は、if 文の条件を書くところなので、後は条件を書くのだ　親切なのだ
実際の例は、次のブロック補完と併せてお見せします

また、IDE のメニューから、表示 | ツールウィンドウ | テンプレート と選択すると、ツールパレットのところにテンプレートタブが追加されます
ここに、現在登録されているテンプレートの一覧が表示され、テンプレートの編集・追加・削除などを行うことができます
テンプレートタブを広げると、このようになってます
![template.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164551/dfb7e54f-6616-de28-b502-8b8dd78da080.png)

## ブロック補完
Delphi で begin ブロックを開始したら、最後は end で閉じます
コードエディタ上で、ブロックを開始する用語を入力して Enter キーを押すと自動的にブロックを閉じる用語が挿入されます
begin - end, class - end などなど
支援機能の設定の画面では、「改行なし・改行を付ける・新規ブロックのみ」の選択もできます
![blockInsigt.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164551/97bf04fe-4a5a-9f87-af42-7ec648fd3f22.png)

以下の例は if 文でコードテンプレート保管が行われ、その後 begin に対する end; がブロック補完で補完されるという例です
![insight05.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164551/ace11b22-20ed-215b-2464-4e91ca771be8.gif)

## ツールチップ評価
デバッグ中ブレイクポイントなどでプログラムの実行が停止しているときに、変数などの箇所にマウスポインタを置くと、現在の値が表示されるという便利な仕組み

以下の例では、チェックボックスにチェックが付いている (True)、付いていない (False) が表示されています
![insight07.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164551/6719864b-ca41-881e-d96f-092e00005199.gif)

## エラーインサイト
無効なコードなどに赤い下線が付きます
マウスポインタを当てると、可能性のあるエラーの原因が表示されます

以下の例は、定義していない変数を if 文内に記述しているため error_ni_naru のところに赤い下線がつきます
error_ni_naru の箇所にマウスポインタを当てると「未定義の識別子 'error_ni_naru'」と表示されますので、あーこの変数、定義していないじゃーんと原因がわかるのです
![insight06.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164551/a3a3e919-4c65-0384-d6f2-18bd35f40c8c.gif)

## 参考

- [コード補完機能等の利用 IDE 関係操作](http://mrxray.on.coocan.jp/Delphi/Others/A_IDETechnique.htm)
- [今更聞けない Delphi のコト (キーボードショートカット編)](https://ht-deko.com/tech026.html)
- [コード エディタのキーボード ショートカット](http://docwiki.embarcadero.com/RADStudio/Rio/ja/%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%81%AE%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89_%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88#.E3.82.B3.E3.83.BC.E3.83.89_.E3.82.A8.E3.83.87.E3.82.A3.E3.82.BF.E3.81.AE.E3.82.AD.E3.83.BC.E3.83.9C.E3.83.BC.E3.83.89_.E3.82.B7.E3.83.A7.E3.83.BC.E3.83.88.E3.82.AB.E3.83.83.E3.83.88)
- [支援機能（IDE チュートリアル）](http://docwiki.embarcadero.com/RADStudio/Rio/ja/%E6%94%AF%E6%8F%B4%E6%A9%9F%E8%83%BD%EF%BC%88IDE_%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%EF%BC%89)