Sign in Join
Wiki copytemporary

Lazarus IDE Tools/ja: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11## 概要
22
33IDEは"コードツール"と呼ばれる、pascalソースの構文解析と編集のためのツールのライブラリを使用しています。これらのツールは宣言の探索、コード補完、抽出、pascalのソースの移動・挿入、美化といった機能を提供します。これらの機能は、多くの時間の節約につながり、効率を倍加させてくれます。これらはカスタマイズでき、どの機能もショートカットで利用できます(エディタオプションを見てください)。それらの機能はソースにのみ作用し、fpcやdelphiやkylixコードを解釈するだけなので、コンパイルされたユニットやBorlandコンパイラを必要としません。 あなたはDelphiとFPCコードを同時に編集できます。あなたはいくつかのバージョンのDelphiとFPCコードに同時に取り組むことさえできます。このことがDelphiコードの移植をより容易にします。
44
55## IDE ショートカットの要約テーブル
66
77| | |
88|-------------------------|-----------------------------------------------|
99| 宣言への移動 | Ctrl+Click or Alt+Up (型や変数の宣言への移動) |
1010| メソッドへの移動 | Ctrl+Shift+Up (宣言と本体との切り替え) |
1111| コードテンプレート | Ctrl+J |
1212| コード補完 (クラス補完) | Ctrl+Shift+C |
1313| 識別子補完 | Ctrl+Space |
1414| 語句補完 | Ctrl+W |
1515
1616## メソッドへの移動
1717
1818手続きの本体(begin..end)と手続き宣言(procedure Name;)の間の移動にはCtrl+Shift+Upを用いてください。 例えば: interface
1919
2020``` pascal
2121 procedure DoSomething; // procedure definition
2222
2323 implementation
2424
2525 procedure DoSomething; // 手続き本体
2626 begin
2727 end;
2828```
2929
3030カーソルが手続きの本体にあるときにCtrl+Shift+Upすると、カーソルが手続き宣言に移動します。もう一度 Ctrl+Shift+Upを押すと本体のbeginのあとに移動します。 この機能はメソッド(クラスの手続き)でも使えます。 ヒント: 'メソッドへの移動'は同じ名前と引数リストをもつ同じ手続きに移動します。もし合致する手続きがなければ最良の候補の中の最初に異なる部分に移動します。(Delphiユーザーへ: Delphiにはない機能です).
3131
3232異なる引数型をもつ手続きの例:
3333
3434``` pascal
3535 interface
3636
3737 procedure DoSomething(p: char); // procedure definition
3838
3939 implementation
4040
4141 procedure DoSomething(p: string); // 手続き本体
4242 begin
4343 end;
4444```
4545
4646宣言から本体に移動するとカーソルはキーワード'string'に移動します。これはメソッドの名称変更や引数の変更のさいに便利です。
4747
4848例: 'DoSomething'を 'MakeIt'に変更した場合:
4949
5050``` pascal
5151 interface
5252
5353 procedure MakeIt; // 手続きの定義
5454
5555 implementation
5656
5757 procedure DoSomething; // 手続きの本体
5858 begin
5959 end;
6060```
6161
6262このときMakeItから本体に移動します。IDEは一致する本体を探し、それが見付からないので候補を探します。あなたが名称変更した手続きは一つしかないので、宣言(DoSomething)のない本体はひとつしかなく、したがってDoSomethingに移動し、'DoSomething'のすぐ右側にカーソルが置かれます。ですからその名前も同様に変更すればいいわけです。この機能は引数についても同様です。
6363
6464## インクルードファイル
6565
6666インクルードファイルはコンパイラ指令{\$I filename} もしくは {\$INCLUDE filename} でソースに挿入されるファイルです。異なるプラットフォームをサポートするため、LazarusとFPCは、冗長になることを防ぎ、読みにくい{\$IFDEF}構造体を避けるためにインクルードファイルはコンパイラ指令を用いています。
6767
6868例えば、.pasファイルの中のメソッドからインクルードファイル内のメソッド本体へ移動できます。 コード補完のようなすべてのコードツールはインクルードファイルを特殊な拘束条件とみなします。
6969
7070例:コード補完がもうひとつのメソッド本体のうしろに新しいメソッドを追加すると、コード補完は双方を同じファイル内に保持します。このようにして、LCLがほぼ全てのコントロールにそうやって管理しているのと同様に、すべてのクラス実装をインクルードファイル内に置くことができます。 しかし、初心者が陥りやすい罠があります: インクルードファイルを最初に開き、メソッド移動もしくは定義検索をしようとすると、エラーが発生します。IDEはどのユニットにインクルードファイルが属するかを知りません。まず初めに対象とするユニットを開かなければなりません。
7171
7272IDEがユニットを構文解析するとすぐに、そこのインクルード指令を解釈し、IDEはこの関係を記憶します。IDEはこの情報を終了時やプロジェクト保存時に‾/.lazarus/includelinks.xmlに保存します。次にこのインクルードファイルを開き、移動や定義検索をしようとすると、IDEは内部的にそのユニットを開き、移動機能が作動します。
7373
7474このメカニズムにはもちろん限界があります。いくつかのインクルードファイルは2回かそれ以上インクルードされます。例: lcl/include/winapih.inc.
7575
7676このインクルードファイルの手続きもしくはメソッド定義からその本体への移動は直前の動作次第です。もしlcl/lclintf.ppに取り組んでいるのであれば、IDEはwinapi.incに移動します。もしlcl/interfacebase.ppを扱っているのであれば、IDEはlcl/include/interfacebase.inc (もしくはその他のインクルードファイル)に移動します。それらの両方に取り組んでいるのであれば...混乱してしまいますね ;)
7777
7878## コードテンプレート
7979
8080コードテンプレートは、ある識別子からあるテキストもしくはコードの断片に変換します。 コードテンプレートのデフォルトのショートカットはCtrl+Jです。識別子をタイプして、Ctrl+Jを押すと識別子は識別子に応じて設定されたテキストに置き換えられます。コードテンプレートは環境 -\> コードテンプレートで設定できます。
8181
8282例: 識別子'classf'を書き、カーソルをfのすぐ後ろに置いて、Ctrl+Jを押すと、'classf'は以下に置き換えられます。
8383
8484``` pascal
8585 T = class(T)
8686 private
8787
8888 public
8989 constructor Create;
9090 destructor Destroy; override;
9191 end;
9292```
9393
9494そしてカーソルは'T'の後ろに来ます。 カーソルを空白に置いて(識別子の上でなく)Ctrl+Jを押すとテンプレートのリストがポップアップで示されます。カーソルキーもしくはいくつかの文字をタイプしてその中のどれかを選択してください。リターンキーを押せば選択されたテンプレートが挿入され、Escでそのポップアップが閉じます。
9595
9696## コード補完
9797
9898コード補完はIDEメニューの編集 -\> コード補完で呼び出すことができ、標準ショートカットはCtrl+Shift+Cです。
9999
100100Delphiユーザーへ: Delphiでは"コード補完"と呼ばれている機能は、現在のソースの位置で(Ctrl+Space)すると識別子のリストが示されるもので、Lazarusでは"識別子補完"と呼ばれているものです。
101101
102102コード補完はいくつかの強力な機能を組み合わせたものです。例:
103103
104104- クラス補完: プロパティを補完し、メソッド本体を加え、プライベートな変数とアクセスメソッドを加えるものです。
105105- 前方手続き補完: 手続きの本体を加えます。
106106- イベント代入補完: イベント代入を補完し、メソッド定義と本体を加えます。
107107- 変数宣言補完: ローカル変数定義を加えます。
108108
109109どの機能が作動するかはエディタ内のカーソルの位置によります。
110110
111111### クラス補完
112112
113113最も強力なコード補完機能は「クラス補完」です。クラスとメソッドとプロパティを書くと、コード補完はメソッド本体とプロパティアクセスメソッド/変数とプライベートな変数を追加します。
114114
115115例えば: クラスを作成し、(タイピングを少なくするにはコードテンプレートを参照):
116116
117117``` pascal
118118TExample = class(TObject)
119119 public
120120 constructor Create;
121121 destructor Destroy; override;
122122 end;
123123```
124124
125125カーソルをクラスのどこかに置いてCtrl+Shift+Cしてみてください。メソッドのまだ書かれていない本体が作成され、カーソルを一番上の最初に作成されたメソッド本体に移動させますので、そのままクラスコードを書きはじめることができます:
126126
127127``` pascal
128128 { TExample }
129129
130130 constructor TExample.Create;
131131 begin
132132 |
133133 end;
134134
135135 destructor TExample.Destroy;
136136 begin
137137 inherited Destroy;
138138 end;
139139```
140140
141141注意: '\|'はカーソルを表し、文字は挿入されません。
142142
143143ヒント: Ctrl+Shift+Upでメソッドとその本体とを移動移動できます。
144144
145145IDEが'inherited Destroy'呼び出しを追加したことがわかりますね。これはもし'override'キーワードがクラス定義にあれば追加されます。
146146
147147ではDoSomethingメソッドを追加してみましょう:
148148
149149``` pascal
150150 TExample = class(TObject)
151151 public
152152 constructor Create;
153153 procedure DoSomething(i: integer);
154154 destructor Destroy; override;
155155 end;
156156```
157157
158158ここでCtrl+Shift+Cを押すとIDEは以下を追加します
159159
160160``` pascal
161161 procedure TExample.DoSomething(i: integer);
162162 begin
163163 |
164164 end;
165165```
166166
167167クラス定義と同じくCreateとDestroyの間に新しいメソッド本体が挿入されたのがわかりますね。このようにして本体はあなたが定義したのと同じ論理的順序で作成されます。挿入ポリシーは、環境 -\> コードツールオプション -\> コード作成で設定できます。
168168
169169**プロパティの補完** プロパティAnIntegerを加えましょう:
170170
171171``` pascal
172172 TExample = class(TObject)
173173 public
174174 constructor Create;
175175 procedure DoSomething(i: integer);
176176 destructor Destroy; override;
177177 property AnInteger: Integer;
178178 end;
179179Ctrl+Shift+Cを押すと、次のようになります:
180180 procedure TExample.SetAnInteger(const AValue: integer);
181181 begin
182182 |if FAnInteger=AValue then exit;
183183 FAnInteger:=AValue;
184184 end;
185185```
186186
187187コード補完はWriteアクセス指定子と数行の共通コードを追加しました。 新しいクラスを見るにはCtrl+Shift+Upでそのクラスに移動します。
188188
189189``` pascal
190190 TExample = class(TObject)
191191 private
192192 FAnInteger: integer;
193193 procedure SetAnInteger(const AValue: integer);
194194 public
195195 constructor Create;
196196 procedure DoSomething(i: integer);
197197 destructor Destroy; override;
198198 property AnInteger: integer read FAnInteger write SetAnInteger;
199199 end;
200200```
201201
202202そのプロパティにReadとWriteアクセス指定子が追加されています。そのクラスはFAnInteger変数と'SetAnInteger'メソッドを有する'private'という新しいセクションを得ました。 変数に接頭文字F、メソッドにSetを付けるのはDelphiの共通スタイル規則です。もしこれがお気に召さなければ、環境 \> コードツールオプション -\> コード補完でこれを変更できます。
203203
204204読み込み専用プロパティを作成する場合:
205205
206206``` pascal
207207property PropName: PropType read;
208208```
209209
210210が以下のように拡張されます。
211211
212212``` pascal
213213property PropName: PropType read FPropName;
214214```
215215
216216書き込み専用プロパティを作成する場合:
217217
218218``` pascal
219219property PropName: PropType write;
220220```
221221
222222が以下のように拡張されます。
223223
224224``` pascal
225225property PropName: PropType write SetPropName;
226226```
227227
228228Read メソッドを持つ読み込み専用プロパティを作成する場合:
229229
230230``` pascal
231231property PropName: PropType read GetPropName;
232232```
233233
234234これはそのままで、GetPropName関数が追加されます:
235235
236236``` pascal
237237function GetpropName: PropType;
238238```
239239
240240stored指定子を持つプロパティを作成する場合:
241241
242242``` pascal
243243property PropName: PropType stored;
244244```
245245
246246が次のように拡張されます。
247247
248248``` pascal
249249property PropName: PropType read FPropName write SetPropName stored PropNameIsStored;
250250```
251251
252252storedはストリーミングに用いられるため、readとwrite指定子が同様に自動的に追加されます。
253253
254254ヒント: 識別子補完は不完全なプロパティも認識し、デフォルトの名前を提案します。例:
255255
256256``` pascal
257257property PropName: PropType read |;
258258```
259259
260260カーソルを'read'キーワードより1スペース後ろに置き、Ctrl+Spaceを押すと識別子補完が作動します。識別子補完は変数'FPropName'と手続き'SetPropName'を提案します。
261261
262262### 前方手続き補完
263263
264264"前方手続き補完"はコード補完機能の一部で、不足している手続き本体を追加します。カーソルが前方に定義された手続き宣言の上にあるときに有効となります。
265265
266266例: 宣言部に新しい手続き宣言を追加します: procedure DoSomething; カーソルをその上に置き、Ctrl+Shift+Cを押してコード補完を呼び出すと、実行部が作成されます:
267267
268268procedure DoSomething; begin
269269
270-`  |`
270+```text
271+ |
272+```
271273
272274end; ヒント: Ctrl+Shift+Upでメソッドとその本体とを移動移動できます。
273275
274276新しい手続き本体がクラスメソッドの前に追加されます。もし宣言部に既にいくつかの手続きがあれば、IDEはその順序を維持しようとします。 例:
275277
276278``` pascal
277279procedure Proc1;
278280procedure Proc2; // 新しい proc
279281procedure Proc3;
280282```
281283
282284もしProc1とProc3の本体が既に存在すれば、Proc2の本体はProc1とProc3の間に挿入されます。この動作は環境 -\> コードツールオプション -\>コード作成 で設定できます。
283285
284286``` pascal
285287Multiple procedures:
286288 procedure Proc1_Old; // 本体が存在
287289 procedure Proc2_New; // 本体がまだない
288290 procedure Proc3_New; // "
289291 procedure Proc4_New; // "
290292 procedure Proc5_Old; // 本体が存在
291293```
292294
293295コード補完は3つの手続き本体 (Proc2_New, Proc3_New, Proc4_New)を追加します。
294296
295297なぜそれを前方手続き補完と呼ぶのでしょうか?
296298
297299なぜならそれは宣言部に定義された手続きにのみ作用するのではなく、"forward" 指定子をもつ手続きにも同様に作用するからです。そしてそのコードツールが宣言部内の暗黙の'forward' 指定子をもつ手続きを扱うからです。
298300
299301### イベント 代入補完
300302
301303"イベント代入補完"はコード補完機能の一部で、単一のイベント:=\| 文を補います。これはカーソルがイベントへの代入のすぐ後ろにあるときに呼び出されます。
302304
303305例: あるメソッド, 例えばFormCreateイベントで、'OnPaint:='という行を追加してみます:
304306
305307``` pascal
306308 procedure TForm1.Form1Create(Sender: TObject);
307309 begin
308310 OnPaint:=|
309311 end;
310312```
311313
312314'\|'はカーソルを表しており、タイプすべきものではありません。 ここでCtrl+Shift+Cと押してコード補完を呼び出します。その文は次のように補完されます。
313315
314316``` pascal
315317OnPaint:=@Form1Paint;
316318```
317319
318320新しいメソッドForm1PaintがTForm1クラスに追加されます。それからクラス補完が作動し、次のようになります:
319321
320322``` pascal
321323procedure TForm1.Form1Paint(Sender: TObject);
322324begin
323325 |
324326end;
325327```
326328
327329これはちょうどオブジェクトインスペクタでメソッドを追加するような動作です。
328330
329331注意: カーソルは':='代入の後ろに置いてください。カーソルをその識別子 (e.g. OnPaint)の上に置いた場合、 コード補完は"ローカル変数補完"を呼び出してしまいます(そしてそれは失敗します。なぜならOnPaintは既に宣言されているから)。
330332
331333ヒント: 新しいメソッド名をあなた自身で定義することもできます。例えば:
332334
333-` OnPaint:=@ThePaintMethod;`
335+``` pascal
336+ OnPaint:=@ThePaintMethod;
337+```
334338
335339### 変数宣言補完
336340
337341"変数宣言補完"もコード補完の一部で、ローカル変数定義を識別子:=Term; 文に追加します。これはカーソルが代入識別子もしくは変数の上にある時に呼び出せます。
338342
339343例:
340344
341345``` pascal
342346procedure TForm1.Form1Create(Sender: TObject);
343347begin
344348 i:=3;
345349end;
346350```
347351
348352カーソルを i もしくはその後ろに置いてみて下さい。それからCtrl+Shift+Cを押してコード補完を呼び出すと次のようになります:
349353
350354``` pascal
351355procedure TForm1.Form1Create(Sender: TObject);
352356var
353357 i: Integer;
354358begin
355359 i:=3;
356360end;
357361```
358362
359363このコードツールはまず識別子 i が既に定義されているかどうかをチェックし、もしなかったら宣言 'var i: integer;'を追加します。識別子の型は代入 ':=' 演算子の右辺から推測されます。3のような数値はデフォルトでIntegerと判断されます。
360364
361365もうひとつの例:
362366
363367``` pascal
364368type
365369 TWhere = (Behind, Middle, InFront);
366370
367371 procedure TForm1.Form1Create(Sender: TObject);
368372 var
369373 a: array[TWhere] of char;
370374 begin
371375 for Where:=Low(a) to High(a) do writeln(a[Where]);
372376 end;
373377```
374378
375379カーソルをWhereの上に置き、 Ctrl+Shift+Cで コード補完を呼び出すと、次のようになります:
376380
377381``` pascal
378382 procedure TForm1.Form1Create(Sender: TObject);
379383 var
380384 a: array[TWhere] of char;
381385 Where: TWhere;
382386 begin
383387 for Where:=Low(a) to High(a) do writeln(a[Where]);
384388 end;
385389```
386390
3873910.9.11以降Lazarusは引数も補完できるようになりました。 例:
388392
389393``` pascal
390394 procedure TForm1.FormPaint(Sender: TObject);
391395 begin
392396 with Canvas do begin
393397 Line(x1,y1,x2,y2);
394398 end;
395399 end;
396400```
397401
398402カーソルをx1の上に置き、Ctrl+Shift+Cでコード補完を呼び出すと、次のようになります:
399403
400404``` pascal
401405 procedure TForm1.FormPaint(Sender: TObject);
402406 var
403407 x1: integer;
404408 begin
405409 with Canvas do begin
406410 Line(x1,y1,x2,y2);
407411 end;
408412 end;
409413```
410414
411415### コメントとコード補完
412416
413417コード補完はコメントをそれが属する場所に留めようとします。 例:
414418
415419``` pascal
416420 FList: TList; //TComponentのリスト
417421 FInt: integer;
418422```
419423
420424新しい変数をFListとFIntの間に挿入しようとすると、そのコメントはFListの行に保たれます。これは次のような場合にも同様です。
421425
422426``` pascal
423427 FList: TList; {TComponentのリスト
424428 これはFListの行から始まる数行に渡るコメントで、
425429 コードツールはこれがFListの行に属するものとして
426430 扱い、この関係を壊しません。コードはこのコメントの
427431 後ろに挿入されます。}
428432 FInt: integer;
429433```
430434
431435コメントが次の行から始まっている場合、それはそれがそれ以下のコードに属するものとして扱われます。 例:
432436
433437``` pascal
434438 FList: TList; // list of TComponent
435439 {このコメントはこれ以下に属します。
436440 新しいコードはこのコメントの上で、
437441 FListの行の後に挿入されます。}
438442 FInt: integer;
439443```
440444
441445## リファクタリング
442446
443447### 逆代入
444448
445449要約 : "逆代入"はいくつかの選択された文を取り上げ、すべての代入を逆にします。このツールは保存用コードから読み込み用コードに変換する際に演算を逆にしたいときに便利です。
446450
447451例:
448452
449453``` pascal
450454 procedure DoSomething;
451455 begin
452456 AValueStudio:= BValueStudio;
453457 AValueAppartment :=BValueAppartment;
454458 AValueHouse:=BValueHouse;
455459 end;
456460```
457461
458462代入を行っている行(beginとendの間)を選択し、逆代入します。すべての代入は逆になりインデントが自動的に追加されます。 例の結果:
459463
460464``` pascal
461465 procedure DoSomething;
462466 begin
463467 BValueStudio := AValueStudio;
464468 BValueAppartment := AValueAppartment;
465469 BValueHouse := AValueHouse;
466470 end;
467471```
468472
469473### 手続きの抽出
470474
471475[[IDE Window: Extract Procedure|Extract Procedureを]]参照のこと
472476
473477## 定義検索
474478
475479カーソルをある識別子の上に置き、'定義検索'をすると、コードツールは識別子の宣言を検索し、そのファイルを開き、そこに移動します。
476480
477481定義検索は毎回移動位置をセットします。このことは定義検索で宣言に移動した後、検索-\>後方へ飛ぶ で簡単に戻れることを意味しています。 Delphiといくつか異なる点があります: コードツールは、コンパイラ出力を用いる代わりに通常のpascal規則に従ってソースに作用します。コンパイラは最終の型を返します。コードツールはソースを読み、その間でステップします。 例: *Visible* プロパティは初めにTControl (controls.pp)で定義され、TCustomFormで再定義され、さらにTFormで最終的に再定義されます。定義検索をVisibleについて呼び出すとまずTFormのVisibleが表示されます。それから再び定義検索を呼び出すとTCustomFormのVisibleが表示されます。さらに呼び出すとTControlのVisibleに移動します。
478482
479483TColorのような型についても同様です。 コンパイラにとってはそれは単なるlongintです。しかしソースには次のように定義されています。
480484
481485``` pascal
482486 TGraphicsColor = -$7FFFFFFF-1..$7FFFFFFF;
483487 TColor = TGraphicsColor;
484488```
485489
486490そして**前方定義クラス**についても同様です。 例えばTControlにprivate 変数
487491
488492``` pascal
489493 FHostDockSite: TWinControl;
490494```
491495
492496があります。TWinControlに対する定義検索は前方定義
493497
494498``` pascal
495499 TWinControl = class;
496500```
497501
498502そしてそれを再び呼び出すと実装の
499503
500504``` pascal
501505 TWinControl = class(TControl)
502506```
503507
504508に移動します。このようにすべての識別子について追跡でき、すべてのオーバーロードを見つけることができます。
505509
506510**ヒント:** Ctrl+Hで元の位置に戻れます。
507511
508512## インクルード指令に行く
509513
510514IDEの検索メニューの"インクルード指令に行く"は現在のインクルードファイルが用いられている{\$I filename}文に移動します。
511515
512516## プロジェクトの発行
513517
514518プロジェクト全体のコピーを作成します。誰かにコードのソースとコンパイラ設定だけを送りたいときにはこの機能はとても便利です。
515519
516520通常のプロジェクトディレクトリは多くの情報を含んでいます。そのほとんどは発行する際には不要です。 .lpiファイルは (キャレット位置や閉じられているユニットのブックマークのような)セッション情報を含んでおり、プロジェクトディレクトリは多くの.ppu、.oファイルと実行ファイルを含んでいます。 すべてのサブディレクトリとともに基本的な情報のみを含むlpiファイルとそのソースのみを作成するには、"プロジェクトを発行する(パブリッシュプロジェクト)"を使ってください。
517521
518522**注意**: バージョン0.9.13以降、セッション情報を通常の.lpiファイルとは別個のファイルに記録できる新しい*プロジェクトオプション*ができました。この新しいファイルは.lps拡張子で終わりセッション情報のみを含んでおり、.lpiファイルをより簡潔にすることができます。
519523
520524そのダイアログで除外および包含フィルタを設定でき、そのコマンドにより出力を一つのアーカイブに圧縮することができます。
521525
522526## Original contributors
523527
524528This page has been converted from the epikwiki [version](http://lazarus-ccr.sourceforge.net/index.php?wiki=LazarusIdeTools).
525529
526530- Created page and initial template - 4/6/2004 VlxAdmin
527531- Initial content posted - 4/10/2004 MattiasG
528532- Small wiki and formatting fixes - 4/11/2004 VlxAdmin
529533- Added a summary table for IdeTools shortcuts - 12 July 2004 User:Kirkpatc
530534
531535---
532536*From the Free Pascal wiki, page "Lazarus IDE Tools/ja", as it stood on 2024-03-18 after a change by Ariben, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history