Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2006年12月09日] [更新 2016年05月07日] Delphi 一般・その他
   
コード補完機能等の利用   IDE 関係操作
動作確認等 Window XP(SP2) + Delphi 7 ~
IDE で使用可能な機能の極一部
Delphi のバージョンによっては使用不可の機能あり
[整理番号 - 0210]







01_IDE 上での操作関係


コード補完機能や入力支援等,IDE 上の操作関係の記事です.本ページの記事の他,例えば以下も参考にしてください.





02_関数等の宣言文から実装部を作成  -  クラス補完


以下の様に,クラス定義の中で関数やメソッドの宣言文を記述して,[Ctrl] + [Shift] + [C] 押下で実装部のコードのひな形 (スケルトン) が作成できます.
宣言部と実装部は,[Ctrl] + [Shift] + [↓] ( [Ctrl] + [Shift] + [↑] ) で往復できます.


  • 図1

  • 図2



03_実装部から関数等の宣言文を作成   -  クラス補完


逆に実装部,implementation の直下に実際のコードを記述した後 (図では赤枠部分),[Ctrl] + [Shift] + [C] で private 部に宣言コードが自動作成されます.
これは,ネット上で,宣言部の記述がないサンプルコードがあった場合,コードをコピペして利用する際に便利な方法です.

コントロール (各種コンポーネント) 類のイベントコードの宣言部も Private 部に書かれます.それらは.TForm1 のクラス定義のすぐ下に移動して,オブジェクト・インスペクタでそれらのイベントを選択すると使用可能になります.

この操作は,実装部にコンパイラ指令などがあると機能しない場合があります.



  • 図3

  • 図4



04_コンポーネントのプロパティの場合


コンポーネントのプロパティ作成でも [Ctrl] + [Shift] + [C] が利用できます.以下は TestInt という整数型のプロパティを作成する操作です.
この操作で,プロパティの書き込み用のメソッドの宣言と実装部のスケルトンが作成できます.また.プロパティの変数の先頭に F が付いた,プロパティ用のグローバル変数の宣言も追加されます.Delphi では慣習的に,グローバル変数のプリフィックスとして大文字の F が使われています.


  • 図5

  • 図6
  • 下図のようなコードが自動生成される


プロパティの読み出し用のメソッドと,書き込み用のメソッドも同時にスケルトンが作成できます.Delphi では,慣習的に GetxXX, SetXXX というメソッド名が使われています (XXX はプロパティ名).


  • 図7

  • 図8
  • 下図のようなコードが自動生成される



05_コード補完の入力支援機能


多分一番多く利用されている機能ではないかと思います.'.' (ドット) をタイプした後,[Ctrl] + [Space] でそのクラスメンバーの補完リストが表示されます.文字をタイプすると,先頭の名前がそのメンバーを選択表示してくれます.このリストのウィンドウの右マウスボタンクリックで,[スコープ順] と [アルファベット順] にソートを変更できます.

このリストは,'.' の後でなくとも,[Ctrl] + [Space] でいつでも表示できます.スペルの入力間違い防止にも役に立つのではないかと思われます.


  • 図9



06_関数等の宣言表示


関数の引数や型を確認したい場合に利用します.引数の位置で [Ctrl] + [Shift] + [Space] を押下します.


  • 図10

同じ関数でも,引数の異なる関数が複数実装されていることがあります.
これをオーバーライド (override) 関数と言いますが,これも,下図のようにリストしてくれます.


  • 図11



07_メッセージ処理メソッドの作成


下のように,クラス定義の中 (どこでもよい.図では public 部にカーソルを置いている) で,[Ctrl] + [Space] を押下し,作成したいメッセージ名をタイプし (この時 '_' はタイプしない),処理したいメッセージを選択するとそのメソッドを挿入できます.同じ方法で,オーバライド (Override) したいメソッドを選択すると,Override の記述を挿入できます.
これならタイピングのミスも防げます.誤字脱字の達人である筆者の必須テクニックです.

この方法は,そのクラスに実装されているメソッド類でも使用できます.
メッセージと同じように,先頭に procedure や function をタイプしないことがポイントです.

継承元のクラスにないメッセージやメソッド,プロパティは,この方法では作成できません.
継承元のクラスにはないメソッドや関数類を追加作成する場合は,function, procedure から書かなければなりません.



  • 図12

  • 図13
  • 選択後,続けて [Ctrl] + [Shift] + [C] で実装部が作成される



08_インデント


選択した行全体を字下げるには,[Ctrl] + [Shift] + [I],左に詰めるには [Ctrl] + [Shift] + [U] を使用します.


  • 図14
  • 最初の状態
  • 図15
  • インデントを下げる
  • 図16
  • インデントを上げる



09_ブロック選択


選択開始位置にキャレット (カーソル) 移動し,[Alt] キーを押したままマウスでドラッグします.または [Shift] + [Alt} で,カーソル移動キーを使用して選択します.


  • 図17
  • ブロック選択




10_選択行全体のコメントアウトとコメント解除


Delphi 2007 以降であれば,[Ctrl] + [/] で選択行全てをコメントアウトにすることができます.また,コメントとになっている行を選択して [Ctrl] + [/] を実行すると,コメントが解除されます.


  • 図18
  • 選択行をコメントにする

  • 図19
  • コメントアウトされる




11_設計時におけるコンポーネントの親コントロールの変更


コンポーネント (コントロール) 類をフォームに配置する時,配置先のコンテナコントロールが親コントロール,つまり,Parent となります.コンテナコントロール (コンテナコンポーネント) とは,他のコンポーネントを載せるとができるコントロールのことです.例えば TPanel がそうです.

コンポーネントの配置先,つまり,親を変えることができます.
下図は,フォームに直接配置した Button1 (TButton) を Panel1 (TPanel) 上に配置し,Parent を Panel1 にします.コンポーネントもテキスト等と同じように操作できるわけです.

もちろん,複数のコンポーネントを選択しての操作もできます.コンテナコントロール上で複数のコントロールを,マウスドラッグで囲んで選択する場合は,[Ctrl] キーを押した状態で行います.


図20
親を変更するコンポーネントを選択
  • Button1 を選択 (マウスの左ボタンでクリック)
  • [Ctrl] + [X] で切り取る
図21
移動先のコンテナコントロールを選択
  • Panel2 を選択
図22
貼り付ける
  • [Ctrl] + [V] で貼り付ける
  • Panel2 の外側には移動できなくなる




12_フォーム上のコンポーネントの状態を一括して保存・再現


フォーム上のコンポーネントをまとめてコピーして貼り付ける方法です.
対象のフォームをアクティブにして,[Ctrl] + [A] で全て選択し,[Ctrl] + [C] でコピーします.


図23
フォーム上のコンポを全て選択
  • [Ctrl] + [A] で全て選択
  • [Ctrl] + [C] でコピー

このまま,他のフォームに貼り付けることもできますが,ここでは,コピーした内容を一度ファイルに保存してみます.
テキストエディタを起動し,[Ctrl] + [V] またはメニュー等で貼り付けます.すると,例えば以下のようなコードになります.


リスト1
このコードをコピーして,フォームに [Ctrl] + [V] で貼り付けることができる
同じコンポーネント名がフォームにあると,次の順番の名前に変更される
object Panel1: TPanel
  Left = 8
  Top = 80
  Width = 105
  Height = 89
  Caption = 'Panel1'
  Color = 16759739
  ParentBackground = False
  TabOrder = 0
end
object Panel2: TPanel
  Left = 72
  Top = 24
  Width = 185
  Height = 121
  Caption = 'Panel2'
  Color = 11988937
  ParentBackground = False
  TabOrder = 1
  object Button1: TButton
    Left = 8
    Top = 8
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
  end
end


次に [ファイル] [新規作成] で [フォーム] を選択して,新しいフォームを作成します.


図24
新規にフォームを作成

先ほどのテキストエディタの内容を全て選択して,コピーします.
コピーしたら,新しく作成したフォームをマウスの左ボタンでクリックして,[Ctrl] + [V] で [貼り付け] を実行します.すると,下図のようになります.
このように,コンポーネント配置状態を保存しておいて,後で使用することができます.同じようなコンポーネントを配置するフォームを作成する場合に利用できます.また,他の方に,コピーしたコードだけを提供して再現してもらうこともできます.ただし,イベントのコードは再現できません.


図25
[Ctrl] + [V] で貼り付け




13_変数類を一括して変更


変数類を一括して修正編集する方法です.これも筆者が頻繁に使用している方法です.

この他,ユニット内の変数名を一括して変更できる [Shift] + [Ctrl] + [E] 等もあります.参考リンクの記事で確認してください.記事のタイトルがリファクタリングとなっていますが,コードの編集機能ぐらいに考えていいと思います.


図26
編集範囲を選択
図27
編集を開始する
  • [同期編集モード] アイコンをクリック
  • [Shift] + [Ctrl] + [J] でも可
図28
変数を編集する
  • 選択範囲内の変数名が同時に変わる
  • 必要なら他の変数も編集する
図29
編集を終了する
  • [同期編集モード] アイコンをクリック
  • [Shift] + [Ctrl] + [J] でも可




14_コンパイラオプションの挿入


IDE 上で [Ctrl] + [O] + [O] のキー操作をすると,次のように,現在のコンパイラオプションをユニットの先頭に挿入することができます.
こうしておくと,他の開発環境の IDE でコンパイルオプションを設定しても,その設定に左右されないでコンパイルすることができます.


{$A8,B-,C+,D+,E-,F-,G+,H+,I+,J-,K-,L+,M-,N-,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y+,Z1}
{$MINSTACKSIZE $00004000}
{$MAXSTACKSIZE $00100000}
{$IMAGEBASE $00400000}
{$APPTYPE GUI}
{$WARN SYMBOL_DEPRECATED ON}
{$WARN SYMBOL_LIBRARY ON}
{$WARN SYMBOL_PLATFORM ON}
{$WARN SYMBOL_EXPERIMENTAL ON}
{$WARN UNIT_LIBRARY ON}
{$WARN UNIT_PLATFORM ON}
{$WARN UNIT_DEPRECATED ON}
{$WARN UNIT_EXPERIMENTAL ON}
{$WARN HRESULT_COMPAT ON}
{$WARN HIDING_MEMBER ON}
{$WARN HIDDEN_VIRTUAL ON}
{$WARN GARBAGE ON}
{$WARN BOUNDS_ERROR ON}
{$WARN ZERO_NIL_COMPAT ON}
{$WARN STRING_CONST_TRUNCED ON}
{$WARN FOR_LOOP_VAR_VARPAR ON}
{$WARN TYPED_CONST_VARPAR ON}
{$WARN ASG_TO_TYPED_CONST ON}
{$WARN CASE_LABEL_RANGE ON}
{$WARN FOR_VARIABLE ON}
{$WARN CONSTRUCTING_ABSTRACT ON}
{$WARN COMPARISON_FALSE ON}
{$WARN COMPARISON_TRUE ON}
{$WARN COMPARING_SIGNED_UNSIGNED ON}
{$WARN COMBINING_SIGNED_UNSIGNED ON}
{$WARN UNSUPPORTED_CONSTRUCT ON}
{$WARN FILE_OPEN ON}
{$WARN FILE_OPEN_UNITSRC ON}
{$WARN BAD_GLOBAL_SYMBOL ON}
{$WARN DUPLICATE_CTOR_DTOR ON}
{$WARN INVALID_DIRECTIVE ON}
{$WARN PACKAGE_NO_LINK ON}
{$WARN PACKAGED_THREADVAR ON}
{$WARN IMPLICIT_IMPORT ON}
{$WARN HPPEMIT_IGNORED ON}
{$WARN NO_RETVAL ON}
{$WARN USE_BEFORE_DEF ON}
{$WARN FOR_LOOP_VAR_UNDEF ON}
{$WARN UNIT_NAME_MISMATCH ON}
{$WARN NO_CFG_FILE_FOUND ON}
{$WARN IMPLICIT_VARIANTS ON}
{$WARN UNICODE_TO_LOCALE ON}
{$WARN LOCALE_TO_UNICODE ON}
{$WARN IMAGEBASE_MULTIPLE ON}
{$WARN SUSPICIOUS_TYPECAST ON}
{$WARN PRIVATE_PROPACCESSOR ON}
{$WARN UNSAFE_TYPE OFF}
{$WARN UNSAFE_CODE OFF}
{$WARN UNSAFE_CAST OFF}
{$WARN OPTION_TRUNCATED ON}
{$WARN WIDECHAR_REDUCED ON}
{$WARN DUPLICATES_IGNORED ON}
{$WARN UNIT_INIT_SEQ ON}
{$WARN LOCAL_PINVOKE ON}
{$WARN MESSAGE_DIRECTIVE ON}
{$WARN TYPEINFO_IMPLICITLY_ADDED ON}
{$WARN RLINK_WARNING ON}
{$WARN IMPLICIT_STRING_CAST ON}
{$WARN IMPLICIT_STRING_CAST_LOSS ON}
{$WARN EXPLICIT_STRING_CAST OFF}
{$WARN EXPLICIT_STRING_CAST_LOSS OFF}
{$WARN CVT_WCHAR_TO_ACHAR ON}
{$WARN CVT_NARROWING_STRING_LOST ON}
{$WARN CVT_ACHAR_TO_WCHAR ON}
{$WARN CVT_WIDENING_STRING_LOST ON}
{$WARN XML_WHITESPACE_NOT_ALLOWED ON}
{$WARN XML_UNKNOWN_ENTITY ON}
{$WARN XML_INVALID_NAME_START ON}
{$WARN XML_INVALID_NAME ON}
{$WARN XML_EXPECTED_CHARACTER ON}
{$WARN XML_CREF_NO_RESOLVE ON}
{$WARN XML_NO_PARM ON}
{$WARN XML_NO_MATCHING_PARM ON}
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

end.




15_エラーインサイト - エラー箇所を赤い波線で示す機能の問題


エラーが発生すると,該当する関数や変数名の下に,赤い波線が表示されます.これは,エラーインサイトという機能が提供しています.
このエラーインサイトが,時には,エラーでもないのにエラーを示す赤い波線を表示することがあるようです.この表示は,プロジェクトをビルド,あるいは再構築すると消えることもあります.


図30
エラーインサイト
  • エラーの場所に,赤い波の下線を表示する機能
  • この図では [未定義の識別子]

もし,エラーでもないのに赤い波線が表示されてしまうようであれば,このエラーインサイトの機能を無効にしてしまうといいかも知れません.
エラーインサイトの設定は,下図の [オプション] [エディタ設定] [支援機能] にあります.エラーインサイトの機能を無効にしても,エラーは検出できます.


図31
[エラーインサイト] の設定場所