Sign in Join
Wiki copytemporary

TButton/ja: what changed

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

OldNewLine
11\>\> [[LCL Components]] \>\> TButton\
22このページでは、[[doc:lcl/stdctrls/tbutton.html|TButton]] コンポーネントの使い方を説明します。\
33(以下の記述で「○○をクリック」とあればそれは左クリックのことです。右クリックの場合はそのように記述します。)
44
55## IDE上の表示
66
77「TButoon」 は「Standard」 タブの4番目のコントロールであり 「"OK"のある四角い押しボタン」 のアイコンで表示されています。
88
9-<figure>
10-<img src="TButtonStandardpalette.png" title="TButtonStandardpalette.png" />
11-<figcaption>TButtonStandardpalette.png</figcaption>
12-</figure>
9+![](/wiki-images/4/49/TButtonStandardpalette.png)
1310
1411## 使い方
1512
1613[[doc:lcl/stdctrls/tbutton.html|TButton]] は [[TForm/ja|TForm]] におけるもっとも基本的なコントロールです。 ボタンをマウスでクリックすることで(または\[Tab\]キーを押してボタンが選択された状態にして\[Enter\]キーで押すことで)、何らかのアクションが実行されます。 この 「ボタンをクリックすること」 を 「イベント」 と呼びます。 クリック後に何かしらの処理をするためには、 「イベントハンドラ(イベントの処理方法)」 を記述する必要があります。\
17-\
14+
1815「ボタン」 コントロールをフォームに追加するには、[[Standard tab/ja|Standardタブ]] コンポーネントパレットの左から4番目の TButton ("OK" と書かれた四角形のボタン) を押して選択し、ボタンを配置したいフォームの上でクリックしてください。\
19-\
16+
2017マウスクリックに対するイベントハンドラは、フォーム上に置いたボタンをダブルクリックすることで (または、オブジェクトインスペクタの「イベント」タブから、OnClick というイベントを選択することで) 簡単に作ることができます。 *Form1*フォーム上の*Button1* のイベントハンドラは、以下のような記述になります。:
2118
2219``` pascal
2320procedure TForm1.Button1Click(Sender: TObject);
2421begin
2522
2623end;
2724```
2825
2926次に、**begin** と **end** の間に、**Button1** をクリックしたときの処理を書きましょう。
3027
3128ほとんどすべての初心者用チュートリアルで、 Lazarus を用いた [[Glossary|オブジェクト指向プログラミング]] の手始めとして TButtons が使われています。\
3229以下に示すチュートリアルもボタンの使い方を理解するためにおすすめです。:
3330
3431- [[Form Tutorial/ja|初めてのGUIアプリケーション]] :初心者のためのチュートリアル
3532- [[Lazarus Tutorial/ja|Lazarusでプログラムをはじめてみよう]] : Lazarus の チュートリアル
3633- [[Object Oriented Programming with FreePascal and Lazarus|Programming Example]] : Free Pascal と Lazarus を用いたオブジェクト指向プログラミングのチュートリアル
3734
3835#### 簡単な例
3936
4037- メニューの新規プロジェクトからアプリケーションを選択し、表示されたフォーム上に TButton を置きます。
4138- フォーム上に置いた *Button1* をダブルクリックしてください。( *Button1* のためのデフォルトのイベントハンドラである *OnClick* が生成され、ソースエディタが開きます。)
4239- イベントハンドラとして以下のコードを追加します。:
4340
4441``` pascal
4542procedure TForm1.Button1Click(Sender: TObject);
4643begin
4744 ShowMessage('Lazarus のおかげでよい一日だ。'); //ボタンを押すと、左に書いた文字列がメッセージダイアログで表示されます。
4845end;
4946```
5047
5148- プログラムを実行しましょう。(\<F9\>キーを押してください。)
5249
5350## ボタンの自動生成
5451
5552ときにはボタン(や他のコンポーネント)を Lazarus のフォームデザイナから作るのではなく、プログラム実行時に、動的に生成する方が簡単な場合があります。この方法は特にフォームにボタンを連続して配置する必要があるときに役立ちます。
5653
5754以下の例でその方法を学びましょう。(簡単な計算機のアプリです):
5855
5956- メニューの新規プロジェクトからアプリケーションを選択し、新しい *Form1* からなる **まっさらな** [[Form Tutorial/ja|GUI アプリケーション]] を作ってください。 そして、 [[Uses/ja|Use 宣言部]] に **StdCtrls** を追加します。( TButton コンポーネントは StdCtrls パッケージに含まれるため。)
6057- Form1 の OnCreate イベントハンドラを作ります。(オブジェクトインスペクタの「イベント」タブから *OnCreate* を探して、 \[...\] ボタンをクリックしてください。)
6158- 以下のコードを追加します。:
6259
6360``` pascal
6461procedure TForm1.FormCreate(Sender: TObject);
6562var
6663 i: Integer;
6764 aButton: TButton;
6865begin
6966 for i:=0 to 9 do begin // 以下を 10回繰り返し、ボタンを 10個作ります。
7067 aButton:=TButton.Create(Self); // TButtonコントロールを生成します。 所有者(オーナー)は、ボタンを生成する場所である Form1 とします。
7168 aButton.Parent:=Self; // ボタンをどこに表示するかを決めます。(親コントロールは Form1 とします)
7269 aButton.Width:=aButton.Height; // ボタンの幅をボタンの高さと同じにします。
7370 aButton.Left:=i*aButton.Width; // ボタンの左端の位置を設定します。
7471 aButton.Caption:=IntToStr(i); // ボタンのキャプション(0~9)を設定します。
7572 aButton.OnClick:=@aButtonClick; // ボタンを押したときのイベントハンドラを設定します。 -> イベントハンドラはこの後で作成します。
7673 end;
7774 Self.Height:=aButton.Height; // フォームの高さをボタンの高さと同じにします。
7875 Self.Width:=aButton.Width*10; // フォームの幅を、ボタン10個の幅の合計と同じにします。
7976end;
8077```
8178
8279- つぎにボタンを押したときのイベントハンドラを作成する必要があります。
8380- ソースエディタから *TForm1* クラス の **`private`** 部を探します。
8481- **`procedure aButtonClick(Sender: TObject);`** を追加して \[CTRL\] + \[Shift\] + \[c\] キーを押してください。 コード補完機能が働き `TForm1.aButtonClick(Sender: TObject);` プロシージャが生成されます。
8582- aButtonClick プロシージャに以下のコードを追加します。:
8683
8784``` pascal
8885procedure TForm1.aButtonClick(Sender: TObject);
8986const
9087 Cnt: Integer = 0;
9188var
9289 i: Integer;
9390begin
9491 if (Sender is TButton) // aButtonClick プロシージャを呼び出したのが TButton のイベントハンドラかどうか?
9592 and TryStrToInt(TButton(Sender).Caption, i) then //   同時に、押したボタンのキャプションを整数値に変換できるかどうか?
9693 begin
9794 Cnt:=Cnt + i; // 合計値カウンター に 押されたボタンのキャプションの値を追加します。
9895 Caption:='合計: '+IntToStr(Cnt); // 合計値をフォームのキャプションに表示します。
9996 end;
10097end;
10198```
10299
103100- プログラムを実行しましょう。
104101
105102> **Note:** 設置したボタンには、あなたが考えるどんなイベントハンドラでも設定できます。 そのイベントハンドラが **`<class>.<プロシージャ名>(Sender: TObject);`** のプロシージャの形を持つ限り。 このようにして、他のクラスからでもボタンを使うことができます。
106103
107104## 日本語訳にあたっての追加
108105
109106- 日本語訳は 2016年5月 に作成し、 Windows8.1、64bit、Lazarus v1.6 でのコードの動作を確認しました。
110107- コードが動作しない場合、 コードが下記(動作を確認したコード)のようになっているか確認してください。
111108
112109``` pascal
113110unit Unit1;
114111
115112{$mode objfpc}{$H+}
116113
117114interface
118115
119116uses
120117 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
121118
122119type
123120
124121 { TForm1 }
125122
126123 TForm1 = class(TForm)
127124 procedure FormCreate(Sender: TObject);
128125 private
129126 { private declarations }
130127 procedure aButtonClick(Sender: TObject);
131128 public
132129 { public declarations }
133130 end;
134131
135132var
136133 Form1: TForm1;
137134
138135implementation
139136
140137{$R *.lfm}
141138
142139{ TForm1 }
143140
144141procedure TForm1.FormCreate(Sender: TObject);
145142var
146143 i: Integer;
147144 aButton: TButton;
148145begin
149146 for i:=0 to 9 do begin // 以下を 10回繰り返し、ボタンを 10個作ります。
150147 aButton:=TButton.Create(Self); // TButtonコントロールを生成します。 所有者(オーナー)は、ボタンを生成する場所である Form1 とします。
151148 aButton.Parent:=Self; // ボタンをどこに表示するかを決めます。(親コントロールは Form1 とします)
152149 aButton.Width:=aButton.Height; // ボタンの幅をボタンの高さと同じにします。
153150 aButton.Left:=i*aButton.Width; // ボタンの左端の位置を設定します。
154151 aButton.Caption:=IntToStr(i); // ボタンのキャプション(0~9)を設定します。
155152 aButton.OnClick:=@aButtonClick; // ボタンを押したときのイベントハンドラを設定します。 -> イベントハンドラはこの後で作成します。
156153 end;
157154 Self.Height:=aButton.Height; // フォームの高さをボタンの高さと同じにします。
158155 Self.Width:=aButton.Width*10; // フォームの幅を、ボタン10個の幅の合計と同じにします。
159156end;
160157
161158procedure TForm1.aButtonClick(Sender: TObject);
162159const
163160 Cnt: Integer = 0;
164161var
165162 i: Integer;
166163begin
167164 if (Sender is TButton) // aButtonClick プロシージャが、 TButton のイベントハンドラから呼び出されたか?
168165 and TryStrToInt(TButton(Sender).Caption, i) then // それから、押されたボタンのキャプションを整数値に変換できるか?
169166 begin
170167 Cnt:=Cnt + i; // 合計値カウンター に 押されたボタンのキャプションの値を追加します。
171168 Caption:='合計: '+IntToStr(Cnt); // 合計値をフォームのキャプションに表示します。
172169 end;
173170end;
174171
175172end.
176173```
177174
178175## 以下もご参照ください
179176
180177[[TBitBtn/ja]]\
181178[[TSpeedButton/ja]]
182179
183180---
184181*From the Free Pascal wiki, page "TButton/ja", as it stood on 2024-03-20 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