TRadioButton/ja: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: TRadioButton/ja
| Old | New | Line | |
|---|---|---|---|
| 1 | + | **TRadioButton** は相互排他的 - もし1つのボタンが選択されると、同じグループの他のものが選択できない - に他のラジオボタンともに機能するボタン選択を現すコンポーネントである。TRadioButtonは[[Component Palette/ja|コンポーネントパレットの]][[Standard tab/ja|Standardタブで]]選択できる。 | |
| 2 | + | ||
| 3 | + | [[TForm|FormでTRadioButtonを]]使うには、単にコンポーネントパレット*Standard*から、選んでフォーム上でクリックし、配置する。\ | |
| 4 | + | ラジオボタンは何でも選択可能なので、通常は単一のラジオボタンを用いることは意味をなさない。そのため、個々のラジオボタンの代わりに[[TRadioGroup|TRadioGroupを]]用いることもできる。 | |
| 5 | + | ||
| 6 | + | ソースコードのどこからでも、クエリ、**`Status := <RadioButton>.Checked;`**により、有効か、無効かラジオボタンの状態を取得できる。通常の[[Boolean|ブール値として]]*Checked*を使うことができる。このため、割り当て、**`<RadioButton>.Checked := True;`**が可能である。 | |
| 7 | + | ||
| 8 | + | ### 簡単な例 | |
| 9 | + | ||
| 10 | + | - 新しいアプリケーションを作り、3つのラジオボタンを配置する。 | |
| 11 | + | - オブジェクトインスペクタタブのプロパティで名前を*RadioButton1...3*から、*rbRed*、*rbGreen*、*rbBlue*に変更する。 | |
| 12 | + | - 同様にそれらのラジオボタンのキャプションを*Red*、*Green*、*Blue*に変更する。 | |
| 13 | + | - フォームに[[TButton|TButtonを]]加え、そのキャプションを*Draw new*、その名前を*btnPaint*に変更する。 | |
| 14 | + | - *OnClick*をオブジェクトインスペクタで選択し、\[...\]をクリックし、TButtonに対し*OnClick*イベントハンドラを作る。 | |
| 15 | + | - 以下のコードを加える: | |
| 16 | + | ||
| 17 | + | ``` pascal | |
| 18 | + | procedure TForm1.btnPaintClick(Sender: TObject); | |
| 19 | + | begin | |
| 20 | + | if rbRed.Checked then Color:=clRed; | |
| 21 | + | if rbGreen.Checked then Color:=clLime; | |
| 22 | + | if rbBlue.Checked then Color:=clBlue; | |
| 23 | + | end; | |
| 24 | + | ``` | |
| 25 | + | ||
| 26 | + | - アプリケーションでは、以下のように見えるはずである: | |
| 27 | + | ||
| 28 | + |  -\>  | |
| 29 | + | ||
| 30 | + | ### イベントの使い方 | |
| 31 | + | ||
| 32 | + | 上の例との相違は、ボタンのクリックではなく、すでにラジオボタンの1つが選択された状態で再描画することである。 | |
| 33 | + | ||
| 34 | + | ソースコードより、ボタンとその*OnClick*イベントハンドラを削除することにより、前の例を変更できる。新しい例もまた、簡単に作れる: | |
| 35 | + | ||
| 36 | + | - 新しいアプリケーションを作り、フォームに3つのラジオボタンを配置する。 | |
| 37 | + | - オブジェクトインスペクタプロパティタブで、その名前を*RadioButton1...3*から*rbRed*、*rbGreen*、*rbBlue*へ変更する。 | |
| 38 | + | - 同様にラジオボタンのキャプションも*Red*、*Green*、*Blue*に変更する。 | |
| 39 | + | - ここでラジオボタンに*OnChange*イベントハンドラを作る。すべてのラジオボタンに対して、オブジェクトインスペクタイベントタブで*OnChange*イベントを選択し\[...\]をクリックするか、そのうえでダブルクリックする。 | |
| 40 | + | - クリックされたラジオボタンに応じて、ラジオボタンの*OnChange*イベントハンドラにフォームの色を変更させるため: | |
| 41 | + | ||
| 42 | + | ``` pascal | |
| 43 | + | procedure TForm1.rbRedChange(Sender: TObject); | |
| 44 | + | begin | |
| 45 | + | Self.Color:=clRed; //「Self」で、メソッドが存在するオブジェクトを選択する(メソッド:rbRedChange/オブジェクト:Form1) | |
| 46 | + | end; | |
| 47 | + | ||
| 48 | + | procedure TForm1.rbGreenChange(Sender: TObject); | |
| 49 | + | begin | |
| 50 | + | Form1.Color:=clLime; //直接オブジェクト''Form1''を選択できるが、お粗末である。 | |
| 51 | + | //なぜなら、クラス「Form1」の他のオブジェクトが生成されてないからだ | |
| 52 | + | end; //訳注: clLimeとなっているが本文中ではclGreenである | |
| 53 | + | ||
| 54 | + | procedure TForm1.rbBlueChange(Sender: TObject); | |
| 55 | + | begin | |
| 56 | + | Color:=clBlue; //もしくは「Self」を取り除く、そしてコンパイラは自動的に | |
| 57 | + | end; //それ自身のオブジェクトを探し出すだろう | |
| 58 | + | ``` | |
| 59 | + | ||
| 60 | + | - アプリケーションを実行すると、このように見えるはずだ: | |
| 61 | + | ||
| 62 | + |  -\>  | |
| 63 | + | ||
| 64 | + | ### グルーピング | |
| 65 | + | ||
| 66 | + | ラジオボタンをフォームに追加すると、そのフォームが親(ラジオボタンを含むコントロール)となる。ラジオボタンを選択するたびに(クリックまたはコードによって)、各設定で**`<RadioButton>.Checked:=True;`**が行われると、同じ親を持つ異なるラジオボタンが選択されているかどうかを確認し、もしそうであれば、そのプロパティ*Checked*がFalseに変更される。\ | |
| 67 | + | もし複数のラジオボタンをフォームで使い、異なる、独立した選択を提供するように設計したいのであれば、ラジオボタンをグループ化しなければならない。このため完成したコンポーネント[[TRadioGroup|TRadioGroupがある]]、または(例えば、[[TPanel]]、[[TGroupBox]]、[[TNotebook]]、[[TPageControl|TPageControlなどで]])コントロールにまとめることになる。\ | |
| 68 | + | 以下の例はどのようにラジオボタンをまとめることができるかを示している: | |
| 69 | + | ||
| 70 | + | [[TRadioButton/ja|簡単な例を]]変更するか、新しいアプリケーションを作り: | |
| 71 | + | ||
| 72 | + | - 初めにStandardコンポーネントパレットの[[TGroupBox|TGroupBoxをフォームに]]配置する必要がある。 | |
| 73 | + | - その名前を*gbColor*へ、そのキャプションを*Color*に変更する。 | |
| 74 | + | - ここで、このグループボックスを*rbRed*、*rbGreen*、*rbBlue*へサブクラス化する: | |
| 75 | + | - 変更したプロジェクトで、引き続きオブジェクトインスペクタにあるラジオボタンを*gbColor*へ向けて、ドラッグアンドドロップによりで移動する。 | |
| 76 | + | - 新しいプロジェクトで、GroupBoxで挿入するためにクリックすることにより、それらの後に3つのラジオボタンを挿入し、名前を*rbRed*、*rbGreen*、*rbBlue*へ、キャプションを*Red*、*Green*、*Blue*へ変更する。 | |
| 77 | + | - | |
| 78 | + | - そして、2番目のTGroupBoxをフォームに配置し、*gbBrightness*、とキャプションを*Brightness*名づける。 | |
| 79 | + | - このグループボックスはまた3つのラジオボタンをもち、名前を*rbBrightDark*、*rbBrightMedDark*、*rbBrightBright*、そしてキャプションを*Dark*、*MediumDark*、*Bright*と名づける。 | |
| 80 | + | - 新しいアプリケーションを作った場合、フォームにボタンを追加し*btnPaint*、キャプション*Draw new*と名づけなければならない。 | |
| 81 | + | - *btnPaint*の*OnClick*イベントハンドラのコードを以下に変更する: | |
| 82 | + | ||
| 83 | + | ``` pascal | |
| 84 | + | procedure TForm1.btnPaintClick(Sender: TObject); | |
| 85 | + | begin | |
| 86 | + | if rbRed.Checked then Color:=Brightness or clRed; | |
| 87 | + | if rbGreen.Checked then Color:=Brightness or clLime; | |
| 88 | + | if rbBlue.Checked then Color:=Brightness or clBlue; | |
| 89 | + | end; | |
| 90 | + | ``` | |
| 91 | + | ||
| 92 | + | - そして、さらにTForm1の*private*節にコード**`function Brightness: TColor;`**を書き、\[CTRL\] + \[Shift\] + \[c\] (コード補完)を押す。関数が生成される。以下のコードを入力する: | |
| 93 | + | ||
| 94 | + | ``` pascal | |
| 95 | + | function TForm1.Brightness: TColor; | |
| 96 | + | begin | |
| 97 | + | Result:=0; | |
| 98 | + | if rbBrightMedDark.Checked then Result:=$888888; | |
| 99 | + | if rbBrightBright.Checked then Result:=$DDDDDD; | |
| 100 | + | end; | |
| 101 | + | ``` | |
| 102 | + | ||
| 103 | + | - アプリケーションを実行すると、グループ化された独立したラジオボタンを用いることができ、以下のように見えるだろう: | |
| 104 | + | ||
| 105 | + |  -\>  | |
| 106 | + | ||
| 107 | + | ## 以下も参照のこと | |
| 108 | + | ||
| 109 | + | - [[doc:lcl/stdctrls/tradiobutton.html|TRadioButton doc]] | |
| 110 | + | - [[TRadioGroup]] - Usage of RadioGroups\ | |
| 111 | + | - [[TToggleBox]] - Usage of Toggleboxes\ | |
| 112 | + | - [[TCheckBox]] - Usage of CheckBoxes\ | |
| 113 | + | ||
| 114 | + | --- | |
| 115 | + | *From the Free Pascal wiki, page "TRadioButton/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).* |
