Sign in Join
Wiki copytemporary

Form Tutorial/ja: what changed

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

OldNewLine
1-**日本語版メニュー**
2----
3-[[Main Page/ja|メインページ]] \- [[Lazarus Documentation/ja|Lazarus Documentation日本語版]] \- [[Japanese Localization Notes|翻訳ノート]] \- [[Bug Tracking/ja|日本語障害情報]]
4-
5-Lazarusでフォームを用いるための短いイントロダクション。
6-
7-## Contents
8-
9- * 1 フォームとは何か
10- * 2 初めてのGUIアプリケーション
11- * 3 2つ目のフォームを使う
12- * 3.1 ShowとShowModalの違い
13- * 4 お互いを呼び出すことのできる2つのフォーム
14- * 5 他のフォームに変数を渡す
15- * 6 他のフォームに関する事柄
16- * 6.1 もう1つのフォームをメインフォームとして使う
17- * 6.2 プログラムの終わりで形のプロパティを保存する
18- * 7 動的にフォームを作る
19- * 7.1 Lazarusによってデザインされたフォームを動的に作る
20- * 7.2 新しいフォームを動的に生成する
21- * 8 以下も参照のこと
1+Lazarusでフォームを用いるための短いイントロダクション。
222
233## フォームとは何か
244
25-フォーム (class [[TForm]])は[[Application|application]]のユーザーインターフェースとなるウインドウもしくはダイアログを表す。それは他の[[LCL Components|components]](例えば、ボタン、ラベル、編集ボックス、画像など)が挿入されるコンテナである。
5+フォーム (class [[TForm]])は[[Application|applicationのユーザーインターフェースとなるウインドウもしくはダイアログを]]表す。それは他の[[LCL Components|components]](例えば、ボタン、ラベル、編集ボックス、画像など)が挿入されるコンテナである。
266
277## 初めてのGUIアプリケーション
288
29-Lazarusのインストールが成功し、新しいアプリケーションプロジェクトを始めると、空のフォームが作られる。そうでなければ、新しい [[Overview of Free Pascal and Lazarus|GUI アプリケーション]]を メインメニュー -> プロジェクト -> 新規プロジェクト -> アプリケーション OKで作ることができる。
9+Lazarusのインストールが成功し、新しいアプリケーションプロジェクトを始めると、空のフォームが作られる。そうでなければ、新しい [[Overview of Free Pascal and Lazarus|GUI アプリケーションを]] メインメニュー -\> プロジェクト -\> 新規プロジェクト -\> アプリケーション OKで作ることができる。
3010
31-今、新しい、全機能が使えるフォームを持つプロジェクトが生成された:
11+今、新しい、全機能が使えるフォームを持つプロジェクトが生成された:
3212
33-[![Form1 Designmodus.png](/wiki-images/7/73/Form1_Designmodus.png)](</File:Form1_Designmodus.png>)
13+![](/wiki-images/7/73/Form1_Designmodus.png)
3414
35-新しく作られたプロジェクトを実行するには、単に`F9`キーを押す、もしくはマウスでメインメニューアイコン[![Start.png](/wiki-images/b/b8/Start.png)](</File:Start.png>)(あるいは メインメニュー: 実行 -> 実行)をクリックする。プロジェクトはコンパイル、実行される。
15+新しく作られたプロジェクトを実行するには、単に`F9`キーを押す、もしくはマウスでメインメニューアイコン![](/wiki-images/b/b8/Start.png)(あるいは メインメニュー: 実行 -\> 実行)をクリックする。プロジェクトはコンパイル、実行される。
3616
37-特に面白いことが起こるわけではない。フォーム(Form1)はわずかに外見が変わり、ラスタグリッドの点々(個々のコンポーネントの位置付けの助けとなる)が消える(グリッドの点が見えてる間は、それがデザインモードにあることがわかる):
17+特に面白いことが起こるわけではない。フォーム(Form1)はわずかに外見が変わり、ラスタグリッドの点々(個々のコンポーネントの位置付けの助けとなる)が消える(グリッドの点が見えてる間は、それがデザインモードにあることがわかる):\
18+![](/wiki-images/7/73/Form1_Designmodus.png) -\> ![](/wiki-images/d/dc/Form1_Runmodus.png)
3819
39-[![Form1 Designmodus.png](/wiki-images/7/73/Form1_Designmodus.png)](</File:Form1_Designmodus.png>) -> [![Form1 Runmodus.png](/wiki-images/d/dc/Form1_Runmodus.png)](</File:Form1_Runmodus.png>)
20+次にフォームの上に[[TButton/ja|TButtonを]]配することができる。これは後に第2のフォームを開くことを可能にするために使われる:
4021
41-次にフォームの上に[[TButton/ja|TButton]]を配することができる。これは後に第2のフォームを開くことを可能にするために使われる:
22+[[Component Palette/ja|コンポーネントパレット]]上の[[Standard tab/ja|StandardタブからTButtonを]]選ぶ。
4223
43-[[Component Palette/ja|コンポーネントパレット]]上の[[Standard tab/ja|Standardタブ]]からTButtonを選ぶ。
24+![](/wiki-images/4/49/TButtonStandardpalette.png)
4425
45-[![TButtonStandardpalette.png](/wiki-images/4/49/TButtonStandardpalette.png)](</File:TButtonStandardpalette.png>)
26+そしてフォームをクリックする: 「Button1」の名前とキャプションでForm1にボタンが配される。
4627
47-そしてフォームをクリックする: 「Button1」の名前とキャプションでForm1にボタンが配される。
28+このボタンに何かをさせるために、それをクリックすると、何か意図したことをするようにボタンに告げなければならない。これは単純なイベントである。このためクリックされた後に呼ばれる [[Event order|イベントハンドラが]]必要である。マウスに対するイベントハンドラはボタンはButton1をダブルクリックすることにより、極めて簡単に行える(もしくはオブジェクトインスペクタで、Button1 -\> イベントタブ -\> OnClick、次いで\[...\]をクリック)。これはButton1がクリックされると(設計段階ではなく[[runtime]])にいつも呼ばれるプロシージャTForm1.Button1Clickをコードエディタに作り出す。
4829
49-このボタンに何かをさせるために、それをクリックすると、何か意図したことをするようにボタンに告げなければならない。これは単純なイベントである。このためクリックされた後に呼ばれる [[Event order|イベントハンドラ]]が必要である。マウスに対するイベントハンドラはボタンはButton1をダブルクリックすることにより、極めて簡単に行える(もしくはオブジェクトインスペクタで、Button1 -> イベントタブ -> OnClick、次いで[...]をクリック)。これはButton1がクリックされると(設計段階ではなく[[runtime]])にいつも呼ばれるプロシージャTForm1.Button1Clickをコードエディタに作り出す。
30+![](/wiki-images/9/9b/NeuesProjekt2.png)
5031
51-[![NeuesProjekt2.png](/wiki-images/9/9b/NeuesProjekt2.png)](</File:NeuesProjekt2.png>)
32+アプリケーションにButton1をクリックした後に何かをさせるために、プロシージャTForm1.Button1Clickの[[Begin|Beginと]][[End|Endの]]間にこのようにコードを加える:
5233
53-
54-アプリケーションにButton1をクリックした後に何かをさせるために、プロシージャTForm1.Button1Clickの[[Begin]]と[[End]]の間にこのようにコードを加える:
55-```
34+``` pascal
5635procedure TForm1.Button1Click(Sender: TObject);
57- begin
58- Caption:='My first Form'; //Form1のキャプションが変更される(フォーム冒頭のテキスト)
59- //or
60- Button1.Caption:='Hello'; //ボタンのキャプションが変更される(ボタンのテキストが表示される)
61- end;
36+begin
37+ Caption:='My first Form'; //Form1のキャプションが変更される(フォーム冒頭のテキスト)
38+ //or
39+ Button1.Caption:='Hello'; //ボタンのキャプションが変更される(ボタンのテキストが表示される)
40+end;
6241```
6342
64-そして、`F9`を押し、フォームを起動させる、ボタンをクリックしたときにフォームキャプションとボタンキャプションの双方が変わることに注意すること。
43+そして、`F9`を押し、フォームを起動させる、ボタンをクリックしたときにフォームキャプションとボタンキャプションの双方が変わることに注意すること。
6544
66-ちょっとした実験を行い、スタンダードコンポーネントの使い方を学んだ。始めるにあたり、以下のコンポーネントの例を試してみることを勧める:
45+ちょっとした実験を行い、スタンダードコンポーネントの使い方を学んだ。始めるにあたり、以下のコンポーネントの例を試してみることを勧める:
6746
68-[[TButton/ja|TButton]] | [![tbutton.png](/wiki-images/b/b2/tbutton.png)](</File:tbutton.png>)
69----|---
70-[[TLabel/ja|TLabel]] | [![tlabel.png](/wiki-images/3/3a/tlabel.png)](</File:tlabel.png>)
71-[[TEdit/ja|TEdit]] | [![tedit.png](/wiki-images/0/07/tedit.png)](</File:tedit.png>)
72-[[TMemo/ja|TMemo]] | [![tmemo.png](/wiki-images/f/f3/tmemo.png)](</File:tmemo.png>)
73-[[TToggleBox/ja|TToggleBox]] | [![ttogglebox.png](/wiki-images/5/5e/ttogglebox.png)](</File:ttogglebox.png>)
74-[[TCheckBox/ja|TCheckBox]] | [![tcheckbox.png](/wiki-images/3/3c/tcheckbox.png)](</File:tcheckbox.png>)
75-[[TRadioButton/ja|TRadioButton]] | [![tradiobutton.png](/wiki-images/e/ef/tradiobutton.png)](</File:tradiobutton.png>)
76-[[TListBox/ja|TListBox]] | [![tlistbox.png](/wiki-images/7/7f/tlistbox.png)](</File:tlistbox.png>)
77-[[TComboBox/ja|TComboBox]] | [![tcombobox.png](/wiki-images/b/be/tcombobox.png)](</File:tcombobox.png>)
78-[[TScrollBar/ja|TScrollBar]] | [![tscrollbar.png](/wiki-images/0/05/tscrollbar.png)](</File:tscrollbar.png>)
79-
80-ここにさらに役に立つ情報がある[[Lazarus Tutorial/ja|Lazarusチュートリアル]]。
47+| | |
48+|----|----|
49+| [[TButton/ja|TButton]] | ![](/wiki-images/b/b2/Tbutton.png) |
50+| [[TLabel/ja|TLabel]] | ![](/wiki-images/a/a2/Tlabel.png) |
51+| [[TEdit/ja|TEdit]] | ![](/wiki-images/d/db/Tedit.png) |
52+| [[TMemo/ja|TMemo]] | ![](/wiki-images/1/1b/Tmemo.png) |
53+| [[TToggleBox/ja|TToggleBox]] | ![](/wiki-images/1/15/Ttogglebox.png) |
54+| [[TCheckBox/ja|TCheckBox]] | ![](/wiki-images/d/d6/Tcheckbox.png) |
55+| [[TRadioButton/ja|TRadioButton]] | ![](/wiki-images/7/7a/Tradiobutton.png) |
56+| [[TListBox/ja|TListBox]] | ![](/wiki-images/7/77/Tlistbox.png) |
57+| [[TComboBox/ja|TComboBox]] | ![](/wiki-images/7/75/Tcombobox.png) |
58+| [[TScrollBar/ja|TScrollBar]] | ![](/wiki-images/c/c4/Tscrollbar.png) |
8159
60+ここにさらに役に立つ情報がある[[Lazarus Tutorial/ja|Lazarusチュートリアル]]。
61+
8262## 2つ目のフォームを使う
8363
84-このチュートリアルでは1つのプロジェクトで複数のフォームを使う方法を示す。この例で2つだけのフォーム、Form1(メインフォーム)とForm2が作られるが、追加のフォームについてもその仕方は同一である。
64+このチュートリアルでは1つのプロジェクトで複数のフォームを使う方法を示す。この例で2つだけのフォーム、Form1(メインフォーム)とForm2が作られるが、追加のフォームについてもその仕方は同一である。
8565
86-クリックされると新しいフォームを開くボタンがメインフォームにある。新しいフォームはまた、クリックされるとそれ自身を閉じ、メインフォームに帰ってくるボタンを有する。 もし最初のチュートリアル、 [[Form Tutorial/ja|初めてのGUIアプリケーション]]を終えているのなら、TForm1.Button1Clickプロシージャのbeginとendの間のコードを削除しておく必要がある。そうしないと、新たなプロジェクト(アプリケーション)フォームにボタンを置き、キャプション(ボタンの上の表示されるテキスト)を入力し、OnClickイベントハンドラをこのButton1に作らなければならない。
87-これを行うためボタンを選択(一度クリックする)し、オブジェクトインスペクタで、プロパティ -> Caption、「Open Form2」と入力する。
66+クリックされると新しいフォームを開くボタンがメインフォームにある。新しいフォームはまた、クリックされるとそれ自身を閉じ、メインフォームに帰ってくるボタンを有する。 もし最初のチュートリアル、 [[Form Tutorial/ja|初めてのGUIアプリケーションを]]終えているのなら、TForm1.Button1Clickプロシージャのbeginとendの間のコードを削除しておく必要がある。そうしないと、新たなプロジェクト(アプリケーション)フォームにボタンを置き、キャプション(ボタンの上の表示されるテキスト)を入力し、OnClickイベントハンドラをこのButton1に作らなければならない。\
67+これを行うためボタンを選択(一度クリックする)し、オブジェクトインスペクタで、プロパティ -\> Caption、「Open Form2」と入力する。
8868
89-[![ObjectInspector ja.png](/wiki-images/8/88/ObjectInspector_ja.png)](</File:ObjectInspector_ja.png>)
69+![](/wiki-images/8/88/ObjectInspector_ja.png)
9070
91-2つ目のフォーム(Form2)をプロジェクトに加えるため、メインメニューで ファイル -> 新規フォームを実行する。Form2にボタンを置きそれにOnClickイベントを作る。このボタンのキャプションを「Close」に変更する。
71+2つ目のフォーム(Form2)をプロジェクトに加えるため、メインメニューで ファイル -\> 新規フォームを実行する。Form2にボタンを置きそれにOnClickイベントを作る。このボタンのキャプションを「Close」に変更する。
9272
93-いま、このプロジェクトは2つのフォームを持ち、それぞれはメインメニュー、プロジェクト -> フォーム...(もしくはキーの組み合わせ`⇧ Shift` \+ `F12`)で選択、表示できる。また別に、ソースエディタでUnitタブで選択もでき、`F12`でコードエディタと[[Unit]]に割り当てられたフォームデザイナとを切り替えできる。
73+いま、このプロジェクトは2つのフォームを持ち、それぞれはメインメニュー、プロジェクト -\> フォーム...(もしくはキーの組み合わせ`Shift` + `F12`)で選択、表示できる。また別に、ソースエディタでUnitタブで選択もでき、`F12`でコードエディタと[[Unit|Unitに]]割り当てられたフォームデザイナとを切り替えできる。
9474
95-[[source code editor]]で[[Unit]] (Unit1)が割り当てられたForm1に行き[[Uses]]に節「Unit2を加える:
96-```
75+[[source code editor|source code editorで]][[Unit]] (Unit1)が割り当てられたForm1に行き[[Uses|Usesに]]節「Unit2を加える:
76+
77+``` pascal
9778uses
98- Classes, SysUtils, ... , Unit2; // それぞれのユニットがコンマ(,)で区切られていることと
99- // uses 節がセミコロン(;)で終わることは重要である。
79+ Classes, SysUtils, ... , Unit2; // それぞれのユニットがコンマ(,)で区切られていることと
80+ // uses 節がセミコロン(;)で終わることは重要である。
10081```
10182
102-今、Unit2(即ちForm2)をUnit1から呼び出すことができる。
83+今、Unit2(即ちForm2)をUnit1から呼び出すことができる。
10384
104-次に、Form1に属するボタンのOnClickイベントを編集する:
105-```
85+次に、Form1に属するボタンのOnClickイベントを編集する:
86+
87+``` pascal
10688unit Unit1;
107- ...
108- procedure TForm1.Button1Click(Sender: TObject);
109- begin
110- Form2.ShowModal; //Form2を表示、フォーカスはForm2に来る。
111- end;
112-```
89+...
90+procedure TForm1.Button1Click(Sender: TObject);
91+begin
92+ Form2.ShowModal; //Form2を表示、フォーカスはForm2に来る。
93+end;
11394```
95+
96+``` pascal
11497unit Unit2;
115- ...
116- procedure TForm2.Button1Click(Sender: TObject);
117- begin
118- Close; //Form2を閉じる
119- end;
98+...
99+procedure TForm2.Button1Click(Sender: TObject);
100+begin
101+ Close; //Form2を閉じる
102+end;
120103```
121104
122-これで、プロジェクトを起動([![Start.png](/wiki-images/b/b8/Start.png)](</File:Start.png>) もしくは `F9`)し、Form1のボタンをクリックすることでForm2を開くことができる。
105+これで、プロジェクトを起動(![](/wiki-images/b/b8/Start.png) もしくは `F9`)し、Form1のボタンをクリックすることでForm2を開くことができる。
123106
124107### ShowとShowModalの違い
125108
126-_Show_ および _ShowModal_ メソッドは双方ともフォームを見えるようにする。 _Show_ と _ShowModal_ の違いを見るために:
109+*Show*および *ShowModal*メソッドは双方ともフォームを見えるようにする。*Show*と*ShowModal*の違いを見るために:
127110
128- * 前の例、 _Form1_[[Form Tutorial/ja|2つ目のフォームを使う]]に2番目のTButtonを加え拡張する。
129- * _Button1_ を選択しプロパティ _Name_ を _btnShow_ に、 _Caption_ を _Show_ に変更する。
130- * _Button2_ を選択しプロパティ _Name_ を _btnShowModal_ に、 _Caption_ を _ShowModal_ に変更する。
131- * _OnClick_ イベントを作る(もしくは、変更)し2つのボタンのイベントハンドラを以下のようにする:
111+- 前の例、*Form1*[[Form Tutorial/ja|2つ目のフォームを使うに]]2番目のTButtonを加え拡張する。
112+- *Button1*を選択しプロパティ*Name*を *btnShow*に、*Caption*を *Show*に変更する。
113+- *Button2*を選択しプロパティ*Name* を*btnShowModal*に、*Caption*を*ShowModal*に変更する。
114+- *OnClick*イベントを作る(もしくは、変更)し2つのボタンのイベントハンドラを以下のようにする:
132115
133-```
116+``` pascal
134117procedure TForm1.btnShowClick(Sender: TObject);
135- begin
136- Form2.Show;
137- ShowMessage('Form2 is opened!');
138- end;
139-
140- procedure TForm1.btnShowModalClick(Sender: TObject);
141- begin
142- Form2.ShowModal;
143- ShowMessage('Form2 is opened and closed again!');
144- end;
118+begin
119+ Form2.Show;
120+ ShowMessage('Form2 is opened!');
121+end;
122+
123+procedure TForm1.btnShowModalClick(Sender: TObject);
124+begin
125+ Form2.ShowModal;
126+ ShowMessage('Form2 is opened and closed again!');
127+end;
145128```
146129
147- * 起動してその差を見よう!
130+- 起動してその差を見よう!
148131
149-Show
150-
132+Show
151133
152-このプロシージャはフォームを見える状態にし、呼んだコントロール(_Form1_)のコードの実行を継続する。この例ではメッセージ、([[Dialog Examples|ShowMessage]]) はほとんど _Form2_ と同時に現れる。また _Form1_ を呼んで使い続けることができる。例えばそれを動かしたり、 _Show_ ボタンを押すことができる(しかし _ShowModal_ をクリックするとエラーが発生するだろう)。
134+このプロシージャはフォームを見える状態にし、呼んだコントロール(*Form1*)のコードの実行を継続する。この例ではメッセージ、([[Dialog Examples|ShowMessage]]) はほとんど*Form2*と同時に現れる。また*Form1*を呼んで使い続けることができる。例えばそれを動かしたり、*Show*ボタンを押すことができる(しかし*ShowModal*をクリックするとエラーが発生するだろう)。
153135
154-**`<myForm>.Show;`**を用いる代わりに、**`<myForm>.Visible:=True;`**を用いることもできる、 _Show_ メソッドは以下を行う:
155-```
136+**`<myForm>.Show;`**を用いる代わりに、**`<myForm>.Visible:=True;`**を用いることもできる、*Show*メソッドは以下を行う:
137+
138+``` pascal
156139procedure TCustomForm.Show;
157- begin
158- Visible := True;
159- BringToFront;
160- end;
140+begin
141+ Visible := True;
142+ BringToFront;
143+end;
161144```
162145
163-**`<myForm>.Show;`**と**`<myForm>.Visible:=True;`**の唯一の違いは、 _Show_ を用いてフォームを表示すると、現在表示されているすべての他のフォームの上に表示されることである。
146+**`<myForm>.Show;`**と**`<myForm>.Visible:=True;`**の唯一の違いは、*Show*を用いてフォームを表示すると、現在表示されているすべての他のフォームの上に表示されることである。
164147
165-ShowModal
166-
148+ShowModal
167149
168-_ShowModal_ は新しく開かれているフォーム(_Form2_)が閉じられるまで呼び出したコントロール(_Form1_)を停止させる。例では、 _ShowModal_ の直後の _ShowMessage_ 行は _Form2_ が閉じた後にのみ実行される。フォームの呼び出しは固まってしまう;_Form1_ を動かすこともそれが持つどのボタンも押すことができない。
150+*ShowModal*は新しく開かれているフォーム(*Form2*)が閉じられるまで呼び出したコントロール(*Form1*)を停止させる。例では、*ShowModal*の直後の*ShowMessage*行は*Form2*が閉じた後にのみ実行される。フォームの呼び出しは固まってしまう;*Form1*を動かすこともそれが持つどのボタンも押すことができない。
169151
170-ShowModalは整数値の結果を返す関数である。[TModalResult](<http://lazarus-ccr.sourceforge.net/docs/lcl/forms/tmodalresult.html> "doc:lcl/forms/tmodalresult.html")を参照のこと。返された値によりどのようにフォームを閉じたかを分岐できる。
152+ShowModalは整数値の結果を返す関数である。[[doc:lcl/forms/tmodalresult.html|TModalResultを]]参照のこと。返された値によりどのようにフォームを閉じたかを分岐できる。
171153
172154## お互いを呼び出すことのできる2つのフォーム
173155
174-2番目のフォームからメインフォームを呼ぶことを避けるのは一般的に良いプログラム設計である。2番目のフォームを閉じることによって、(前の例のように)メインフォームへ戻り、メインフォームにフォーカスを返すこともより好ましい。しかしこの例が示すように、サブフォームからメインフォームを呼ぶことは可能である。
156+2番目のフォームからメインフォームを呼ぶことを避けるのは一般的に良いプログラム設計である。2番目のフォームを閉じることによって、(前の例のように)メインフォームへ戻り、メインフォームにフォーカスを返すこともより好ましい。しかしこの例が示すように、サブフォームからメインフォームを呼ぶことは可能である。
175157
176-Form1がForm2を呼ぶために、Unit1はそのUses節の中にUnit2を持っていなければならない。 逆にForm2がForm1を呼ぶために、Unit2はそのUses節にUnit1を持っていなければならない。これはお互いのユニットが他のユニットを参照しあう、潜在的な循環ユニット参照コンパイラエラーにつながる。この例は循環ユニット参照エラーをどのように避けるかも示している。
158+Form1がForm2を呼ぶために、Unit1はそのUses節の中にUnit2を持っていなければならない。 逆にForm2がForm1を呼ぶために、Unit2はそのUses節にUnit1を持っていなければならない。これはお互いのユニットが他のユニットを参照しあう、潜在的な循環ユニット参照コンパイラエラーにつながる。この例は循環ユニット参照エラーをどのように避けるかも示している。
177159
178-この例を設定するために、前の例([[Form Tutorial/ja|2つ目のフォームを使う]])のフォームを改造する、、もしくはそれぞれが1個のボタンを持つ新しいプロジェクトを作る。Form1.Button1のキャプションを「Open Form2」、Form2.Button1のキャプションを「Open Form1」と設定する。
160+この例を設定するために、前の例([[Form Tutorial/ja|2つ目のフォームを使う]])のフォームを改造する、、もしくはそれぞれが1個のボタンを持つ新しいプロジェクトを作る。Form1.Button1のキャプションを「Open Form2」、Form2.Button1のキャプションを「Open Form1」と設定する。
179161
180-もし、前の例を改造するなら、Unit1のUses節から「Unit2」を除くこと。
162+もし、前の例を改造するなら、Unit1のUses節から「Unit2」を除くこと。
181163
182-
183-それぞれの[[Unit]]の[[Implementation]]セクションにUses節を加える。Unit1の節にUnit2を、Unit2の節にUnit1を加えると以下のようになる:
184-```
164+それぞれの[[Unit|Unitの]][[Implementation|ImplementationセクションにUses]]節を加える。Unit1の節にUnit2を、Unit2の節にUnit1を加えると以下のようになる:
165+
166+``` pascal
185167unit Unit1;
186- ...
187- implementation
188-
189- uses
190- Unit2;
191- ...
192-```
168+...
169+implementation
170+
171+uses
172+ Unit2;
173+...
193174```
175+
176+``` pascal
194177unit Unit2;
195- ...
196- implementation
197-
198- uses
199- Unit1;
200- ...
201-```
178+...
179+implementation
202180
203-ボタンイベントハンドラのOnClickイベント以後にあるコードを変更する:
181+uses
182+ Unit1;
183+...
204184```
185+
186+ボタンイベントハンドラのOnClickイベント以後にあるコードを変更する:
187+
188+``` pascal
205189unit Unit1;
206- ...
207- procedure TForm1.Button1Click(Sender: TObject);
208- begin
209- Form2.Show;
210- end;
211-```
190+...
191+procedure TForm1.Button1Click(Sender: TObject);
192+begin
193+ Form2.Show;
194+end;
212195```
196+
197+``` pascal
213198unit Unit2;
214- ...
215- procedure TForm2.Button1Click(Sender: TObject);
216- begin
217- Form1.Show;
218- end;
199+...
200+procedure TForm2.Button1Click(Sender: TObject);
201+begin
202+ Form1.Show;
203+end;
219204```
220205
221206## 他のフォームに変数を渡す
222207
223-上記の例、[[Form Tutorial/ja|2つ目のフォームを使う]]によれば、Unit2のinterface部で[[Global variables|グローバル変数]]を宣言することができる。これはUnit1とUnit2の双方が同じ[[Variable|変数]]にアクセスすることを可能にする(Unit1のUses節にUnit2を置くことにより、Unit2のinterface部で宣言されたすべての変数も、Unit1で利用できるようになる)。この習慣は、どの個々の変数がスコープにあるかを記憶することが急速に困難となり、潜在的なエラーの元となるので、最小限にすべきである。[[Local variables|ローカル変数]]を使い、[[Class]]の中の[[Object Oriented Programming with Free Pascal and Lazarus|プロパティ]]を、あるいは別にクラスの中の変数として定義することがより好ましい。
208+上記の例、[[Form Tutorial/ja|2つ目のフォームを使うによれば]]、Unit2のinterface部で[[Global variables|グローバル変数を]]宣言することができる。これはUnit1とUnit2の双方が同じ[[Variable|変数にアクセスすることを]]可能にする(Unit1のUses節にUnit2を置くことにより、Unit2のinterface部で宣言されたすべての変数も、Unit1で利用できるようになる)。この習慣は、どの個々の変数がスコープにあるかを記憶することが急速に困難となり、潜在的なエラーの元となるので、最小限にすべきである。[[Local variables|ローカル変数を]]使い、[[Class|Classの]]中の[[Object Oriented Programming with Free Pascal and Lazarus|プロパティを]]、あるいは別にクラスの中の変数として定義することがより好ましい。
224209
225-次のプロジェクトでは、2番目のフォームをボタンのクリックで開く。この時、メインフォームのユニットが2番目のフォームが何回表示されたかを勘定する。この2番目のフォームでボタンをクリックすることで、何回それが開かれたを見るために尋ねることができる:
210+次のプロジェクトでは、2番目のフォームをボタンのクリックで開く。この時、メインフォームのユニットが2番目のフォームが何回表示されたかを勘定する。この2番目のフォームでボタンをクリックすることで、何回それが開かれたを見るために尋ねることができる:
226211
227- * 2つのフォームを持ち、それぞれボタンがあり、それらを評価するOnClickイベントがある新しいプロジェクト。
228- * ここで、Countという名前の整数型の[[Class]] TForm2のpublic部の変数(この場合変数の悪用として定義する[[Const|定数]])が作り出す:
212+- 2つのフォームを持ち、それぞれボタンがあり、それらを評価するOnClickイベントがある新しいプロジェクト。
213+- ここで、Countという名前の整数型の[[Class]] TForm2のpublic部の変数(この場合変数の悪用として定義する[[Const|定数]])が作り出す:
229214
230-```
215+``` pascal
231216unit Unit2;
232- ...
233- TForm2 = class(TForm)
234- Button1: TButton;
235- procedure Button1Click(Sender: TObject);
236- private
237- { プライベート宣言 }
238- public
239- { パブリック宣言 }
240- const Count: Integer = 0; //ここ
241- end;
217+...
218+ TForm2 = class(TForm)
219+ Button1: TButton;
220+ procedure Button1Click(Sender: TObject);
221+ private
222+ { プライベート宣言 }
223+ public
224+ { パブリック宣言 }
225+ const Count: Integer = 0; //ここ
226+ end;
242227```
243228
244- * Buttonイベントハンドラをそれに応じてカスタマイズする:
229+- Buttonイベントハンドラをそれに応じてカスタマイズする:
245230
246-```
231+``` pascal
247232unit Unit1;
248- ...
249- procedure TForm1.Button1Click(Sender: TObject);
250- begin
251- inc(Form2.Count); //Form2が呼ばれるたびにカウンタを1つ増やす
252- Form2.ShowModal;
253- end;
254-```
233+...
234+procedure TForm1.Button1Click(Sender: TObject);
235+begin
236+ inc(Form2.Count); //Form2が呼ばれるたびにカウンタを1つ増やす
237+ Form2.ShowModal;
238+end;
255239```
240+
241+``` pascal
256242unit Unit2;
257- ...
258- procedure TForm2.Button1Click(Sender: TObject);
259- begin
260- ShowMessage('Form2 would be displayed '+IntToStr(Count)+' times');
261- end;
243+...
244+procedure TForm2.Button1Click(Sender: TObject);
245+begin
246+ ShowMessage('Form2 would be displayed '+IntToStr(Count)+' times');
247+end;
262248```
263249
264-このようにUnit1の中でUnit2のすべてのパブリック変数/プロパティ/関数/プロシージャ(一般的なメソッド)にアクセスできる。
250+このようにUnit1の中でUnit2のすべてのパブリック変数/プロパティ/関数/プロシージャ(一般的なメソッド)にアクセスできる。
265251
266252## 他のフォームに関する事柄
267253
268254### もう1つのフォームをメインフォームとして使う
269255
270-もし起動時にしばらく異なるフォームもしくは視覚的に新しいフォームを表示させたいと決めたとすると、メインメニュー、プロジェクト -> プロフェクトオプション -> フォーム...を実行できる:
256+もし起動時にしばらく異なるフォームもしくは視覚的に新しいフォームを表示させたいと決めたとすると、メインメニュー、プロジェクト -\> プロフェクトオプション -\> フォーム...を実行できる:
271257
272-[![ProjectOptionForms ja.png](/wiki-images/8/88/ProjectOptionForms_ja.png)](</File:ProjectOptionForms_ja.png>)
258+![](/wiki-images/8/88/ProjectOptionForms_ja.png)
273259
274-また別に、メインメニュー、プロフェクト -> 表示(Lazarus 3.2ではここに表示 - Showというメニューはない) .lprファイル、Project.lpr(メインプログラムのPascalコード)から、最初に表示されるフォームを作ることができる:
275-```
260+また別に、メインメニュー、プロフェクト -\> 表示(Lazarus 3.2ではここに表示 - Showというメニューはない) .lprファイル、Project.lpr(メインプログラムのPascalコード)から、最初に表示されるフォームを作ることができる:
261+
262+``` pascal
276263program Project1;
277- ...
278- Application.CreateForm(TForm2, Form2); //Form2が最初に作られ、アプリケーションが起動されるときに表示される
279- Application.CreateForm(TForm1, Form1);
264+...
265+ Application.CreateForm(TForm2, Form2); //Form2が最初に作られ、アプリケーションが起動されるときに表示される
266+ Application.CreateForm(TForm1, Form1);
280267```
281268
282269### プログラムの終わりで形のプロパティを保存する
283270
284- * [[Remember form position and size|Remember form position and size#Using_TForm.SessionProperties and TXMLPropStorage]]
271+- [[Remember form position and size|Remember form position and size#Using_TForm.SessionProperties and TXMLPropStorage]]
285272
286273## 動的にフォームを作る
287274
288275### Lazarusによってデザインされたフォームを動的に作る
289276
290-アプリケーション起動中に呼び出されるかもしれないすべてのフォームを作る必要はない。開発者によっては一般的にそれを保持せずにProject.lprから、プロジェクトに新しくフォームを挿入するときに自動的に生成されたコードを削除する。もし、いくつかのGUIを含むライブラリを書きたいとすると、フォームの動的生成を避けては通れない。
277+アプリケーション起動中に呼び出されるかもしれないすべてのフォームを作る必要はない。開発者によっては一般的にそれを保持せずにProject.lprから、プロジェクトに新しくフォームを挿入するときに自動的に生成されたコードを削除する。もし、いくつかのGUIを含むライブラリを書きたいとすると、フォームの動的生成を避けては通れない。
291278
292-例:
279+例:
293280
294- * 2つのフォームを持つ新しいアプリケーション、Form1にはボタン(「Unit2」を加える、Uses節にUnit1)
295- * open the Project.lpr (プロジェクト -> lprファイル (注)先にあるように現在このメニューはない、lprファイルを開きたいときは、ファイル -> 開く...から)
296- * 「Application.CreateForm(TForm2, Form2);」行を削除
297- * Form1、Button1のOnClickイベントに以下のコードを追加する:
281+- 2つのフォームを持つ新しいアプリケーション、Form1にはボタン(「Unit2」を加える、Uses節にUnit1)
282+- open the Project.lpr (プロジェクト -\> lprファイル (注)先にあるように現在このメニューはない、lprファイルを開きたいときは、ファイル -\> 開く...から)
283+- 「Application.CreateForm(TForm2, Form2);」行を削除
284+- Form1、Button1のOnClickイベントに以下のコードを追加する:
298285
299-```
286+``` pascal
300287procedure TForm1.Button1Click(Sender: TObject);
301- begin
302- Form2:=TForm2.Create(Nil); //Form2が生成される
303- Form2.ShowModal; //Form2が表示される
304- FreeAndNil(Form2); //Form2解放
305- end;
288+begin
289+ Form2:=TForm2.Create(Nil); //Form2が生成される
290+ Form2.ShowModal; //Form2が表示される
291+ FreeAndNil(Form2); //Form2解放
292+end;
306293```
307294
308- * 単純に起動
295+- 単純に起動
309296
310297### 新しいフォームを動的に生成する
311298
312-以下はフォームデザイナを使わずにコードで新しいフォームを生成する例を示している。
299+以下はフォームデザイナを使わずにコードで新しいフォームを生成する例を示している。
313300
314-この例ではボタンをクリックすることで、自身にボタンを含むもう1つのフォームが開くはずである。この2番目のボタンをクリックするとフォームを閉じると警告が出て、フォームが閉じられる。
301+この例ではボタンをクリックすることで、自身にボタンを含むもう1つのフォームが開くはずである。この2番目のボタンをクリックするとフォームを閉じると警告が出て、フォームが閉じられる。
315302
316- * 1つのフォームと1つのボタンを持つ新しいアプリケーションを作る
317- * Form1、Button1のOnClickイベントに以下のコードを加える:
303+- 1つのフォームと1つのボタンを持つ新しいアプリケーションを作る
304+- Form1、Button1のOnClickイベントに以下のコードを加える:
318305
319-```
306+``` pascal
320307procedure TForm1.Button1Click(Sender: TObject);
321- var
322- MyForm: TForm;
323- MyButton: TButton;
324- begin
325- MyForm:=TForm.Create(nil);
326- MyForm.SetBounds(100, 100, 220, 150);
327- MyForm.Caption:='My dynamic created form';
328-
329- MyButton:=TButton.create(MyForm);
330- MyButton.Caption:='Close my form';
331- MyButton.SetBounds(10, 10, 200, 30);
332- MyButton.Parent:=MyForm;
333-
334- MyButton.OnClick:=@MyButtonClick;
335-
336- MyForm.ShowModal;
337-
338- FreeAndNil(MyForm);
339- end;
340-```
308+var
309+ MyForm: TForm;
310+ MyButton: TButton;
311+begin
312+ MyForm:=TForm.Create(nil);
313+ MyForm.SetBounds(100, 100, 220, 150);
314+ MyForm.Caption:='My dynamic created form';
341315
342-![Light bulb](https://upload.wikimedia.org/wikipedia/commons/d/d8/Nuvola_apps_ktip.png) **Note:** もしコンポーネントが所有者(TButton.Create(Owner: TComponent))から生成されると、それはコンポーネントを解放する責任のある所有者に属する。そのため、MyButtonはMyFormを解放することによって自動的に解放される。
316+ MyButton:=TButton.create(MyForm);
317+ MyButton.Caption:='Close my form';
318+ MyButton.SetBounds(10, 10, 200, 30);
319+ MyButton.Parent:=MyForm;
343320
344- * ここでMyButton.OnClickに対するイベントハンドラ、MyButton.OnClickが生成されなければならない。これを終了させるため、class TForm1のprivateセクションに以下のプロシージャ宣言を書くこと:
321+ MyButton.OnClick:=@MyButtonClick;
345322
323+ MyForm.ShowModal;
324+
325+ FreeAndNil(MyForm);
326+end;
346327```
328+
329+> **Note:** もしコンポーネントが所有者(TButton.Create(Owner: TComponent))から生成されると、それはコンポーネントを解放する責任のある所有者に属する。そのため、MyButtonはMyFormを解放することによって自動的に解放される。
330+
331+- ここでMyButton.OnClickに対するイベントハンドラ、MyButton.OnClickが生成されなければならない。これを終了させるため、class TForm1のprivateセクションに以下のプロシージャ宣言を書くこと:
332+
333+``` pascal
347334TForm1 = class(TForm)
348- ...
349- private
350- { private declarations }
351- procedure MyButtonClick(Sender: TObject);
335+...
336+private
337+ { private declarations }
338+ procedure MyButtonClick(Sender: TObject);
352339```
353340
354- * `Ctrl]`+`⇧ Shift`+`C` (コード補完)を押し、ハンドラ実装として以下を挿入すること:
341+- `Ctrl]`+`Shift`+`C` (コード補完)を押し、ハンドラ実装として以下を挿入すること:
355342
356-```
343+``` pascal
357344procedure TForm1.MyButtonClick(Sender: TObject);
358- begin
359- Showmessage('Attention, closing my dynamically created form!');
360- if Sender is TButton then
361- TForm(TButton(Sender).Parent).Close;
362- end;
345+begin
346+ Showmessage('Attention, closing my dynamically created form!');
347+ if Sender is TButton then
348+ TForm(TButton(Sender).Parent).Close;
349+end;
363350```
364351
365- * ここでプロジェクトがコンパイルされ、実行できる。
352+- ここでプロジェクトがコンパイルされ、実行できる。
366353
367354## 以下も参照のこと
368355
369- * [[LCL Tips|Tips for manual generation of controls]]
370- * [[LCL Tips|Example to create a complete GUI application by code]]
371- * [[Testing, if form exists]]
372- * [[Canvas draw vertical line on form/de]]
373- * [[Drawing with canvas]] on form
374- * [[user should not be able to close form]]
375- * [[LCL Tips|Creating a non-rectangular window or control]]
376- * [[Remember form position and size]]
377- * [[Form in DLL]]
356+- [[LCL Tips|Tips for manual generation of controls]]
357+- [[LCL Tips|Example to create a complete GUI application by code]]
358+- [[Testing, if form exists]]
359+- [[Canvas draw vertical line on form/de]]
360+- [[Drawing with canvas]] on form
361+- [[user should not be able to close form]]
362+- [[LCL Tips|Creating a non-rectangular window or control]]
363+- [[Remember form position and size]]
364+- [[Form in DLL]]
378365
379366---
380-*From the Free Pascal wiki, page "Form Tutorial/ja", as the Internet Archive kept it on 2025-01-17. 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).*
367+*From the Free Pascal wiki, page "Form Tutorial/ja", as it stood on 2024-03-25 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