Sign in Join
Wiki copytemporary

TListBox/ja: what changed

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

Title: TListBox/ja

OldNewLine
1+**TListBox** ![](/wiki-images/7/77/Tlistbox.png)は、ユーザーが1つ選択する必要がある(スクロール可能な)短い文字列のリストを表示するコンポーネントである。[[Component Palette/ja|コンポーネントパレットの]][[Standard tab/ja|Standardタブで]]利用できる。
2+
3+TListBoxにある[[String|stringsは]][[TStrings]]型である*Items*プロパティに格納されている。そのため、[[TStringList|TStringListまたはその]]親である[[TStringList-TStrings Tutorial|TStringsにあるように]]、リストボックス内に文字列を割り当て、もしくは取り除くことができる。
4+
5+これは*Form1*のTListBox *ListBox1*の使い方のいくつかの例である:
6+
7+## リストボックスを埋める
8+
9+### オブジェクトインスペクタにより
10+
11+- フォーム上のListBoxを1回のクリックで選択する。
12+- PropertiesタブでObject Inspectorに移動し、*Items*というプロパティを選択する。
13+- 3つの点があるボタンをクリックする。String Editorが開く。
14+- テキストを入力し、*OK*で作業を確認する。
15+
16+### ボタンクリックでコードにより
17+
18+フォームに、名前が*btnFill*でキャプションが*fill ListBox*となる[[TButton|TButtonを]]追加する。そのボタンの*OnClick*イベントハンドラには、以下のコードを記述する:
19+
20+``` pascal
21+procedure TForm1.btnFillClick(Sender: TObject);
22+begin
23+ ListBox1.Items.Clear; //Delete all existing strings
24+ ListBox1.Items.Add('First line');
25+ ListBox1.Items.Add('Line with random number '+IntToStr(Random(100)));
26+ ListBox1.Items.Add('Third line');
27+ ListBox1.Items.Add('Even a random number '+IntToStr(Random(100)));
28+end;
29+```
30+
31+## StringListの割り当て
32+
33+フォームに、名前が*btnFill*でキャプションが*fill ListBox*となる[[TButton/ja|TButton/jaを]]追加する。そのボタンの*OnClick*イベントハンドラには、以下のコードを記述する:
34+
35+``` pascal
36+procedure TForm1.btnFillClick(Sender: TObject);
37+var
38+ myStringList: TStringList;
39+begin
40+ myStringList:=TStringList.Create; //StringListを作る
41+ myStringList.Add('This is the first line.'); //新しい行を追加する
42+ myStringList.Add('This is the second first line.');
43+ myStringList.Add('This is the third line.');
44+ myStringList.Add('etc.');
45+ ListBox1.Items.Assign(myStringList); //ListBox1にStringListの内容を割り当てる
46+ myStringList.Free; //メモリからStringListを解放する
47+end;
48+```
49+
50+## 文字列を追加する
51+
52+- [[TListBox/ja|ボタンクリックでコードにより]]埋める、を拡張し、TEditと名前が*btnAdd*でキャプションが*add string*のTButtonを追加し、*Edit1*のTextプロパティを"" - 空の文字列に変更する。
53+- ボタンのイベントハンドラ*OnClick*に以下のコードを書く:
54+
55+``` pascal
56+procedure TForm1.btnAddClick(Sender: TObject);
57+begin
58+ ListBox1.Items.Add(Edit1.Text);
59+ Edit1.Text:='';
60+end;
61+```
62+
63+## 文字列を削除する
64+
65+デフォルトでは、ListBoxで1行のみを選択できるように設定されている。ListBoxで複数の行を選択する場合は、*MultiSelect*プロパティを*True*に設定する必要がある。
66+
67+### ItemIndexで
68+
69+- [[TListBox/ja|文字列を追加するを]]拡張し"btnDel"の名前の[[TButton/ja|TButton]]、そのキャプションを"delete string"とする。
70+- ボタンの*OnClick*イベントハンドラに以下のコードを書く:
71+
72+``` pascal
73+procedure TForm1.btnDelClick(Sender: TObject);
74+begin
75+ if ListBox1.ItemIndex > -1 then //リストボックスの文字列が選択されたときのみ削除
76+ ListBox1.Items.Delete(ListBox1.ItemIndex);
77+end;
78+```
79+
80+### all selected strings
81+
82+- [[TListBox/ja|文字列を追加するを]]拡張し"btnDel"の名前の[[TButton/ja|TButton]]、そのキャプションを"delete string"とする。
83+- ボタンの*OnClick*イベントハンドラに以下のコードを書く:
84+
85+``` pascal
86+procedure TForm1.btnDelClick(Sender: TObject);
87+var
88+ i: Integer;
89+begin
90+ if ListBox1.SelCount > 0 then //リストボックスの少なくとも1つの文字列が選択されたときのみ削除する
91+ for i:=ListBox1.Items.Count - 1 downto 0 do //すべてのアイテムをイテレート
92+ if ListBox1.Selected[i] then //もし選択されたら...
93+ ListBox1.Items.Delete(i); //...そのアイテム(文字列)を削除
94+end;
95+```
96+
97+## 所有者によって書かれたリストボックス
98+
99+一般的には、リストボックスをユーザーによって設定された[テーマ](http://en.wikipedia.org/wiki/Skin_%28computing%29)に従わせることが有効である。ある場合(例えば、色彩の多い表面を持つゲームをプログラムするため)ではこの標準から逸脱し、自身の選択に従ってコントロールを描くことができる。 これを、
100+
101+- 上の例を変更するか、TListBox *ListBox1*をもつ新しいアプリケーションを作る
102+- オブジェクトインスペクタで*ListBox1*のプロパティ、*Style*を*lbOwnerDrawFixed*へ変更する。
103+- オブジェクトインスペクタのイベントタブで\[...\]ボタンをクリックすることで、*OnDrawItem*イベントに対するイベントハンドラを作る。
104+- イベントハンドラに以下のコードを加える:
105+
106+``` pascal
107+procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
108+ ARect: TRect; State: TOwnerDrawState);
109+var
110+ aColor: TColor; //背景色
111+begin
112+ if (Index mod 2 = 0) //インデクスがどのアイテムか知らせる
113+ then aColor:=$FFFFFF //背景色として1秒ごとにアイテムが白になる
114+ else aColor:=$EEEEFF; //背景色として1秒ごとにアイテムが桃になる
115+ if odSelected in State then aColor:=$0000FF; //もしアイテムが選択されると、背景色は赤となる。
116+ ListBox1.Canvas.Brush.Color:=aColor; //背景色を設定する
117+ ListBox1.Canvas.FillRect(ARect); //塗りつぶされた四角形を描く
118+
119+ ListBox1.Canvas.Font.Bold:=True; //フォントを「太字」に設定する
120+ ListBox1.Canvas.TextRect(ARect, 2, ARect.Top+2, ListBox1.Items[Index]); //アイテムテキストを描く
121+end;
122+```
123+
124+と書くことができる。
125+
126+> **Note:** **リストボックスアイテムのパラメータ:**\
127+> \
128+> **Control:**\
129+> 複数のコントロール(例えば、複数のリストボックス)がこのハンドルにアクセスする場合、どれがこのイベントを発生させたかわかる。それがTListBoxかどうか、'''
130+>
131+> ``` pascal
132+> ListBox1.Canvas.FillRect(ARect)
133+> ```
134+>
135+> **また、**
136+>
137+> ``` pascal
138+> TListBox(Control).Canvas.FillRect(ARect)
139+> ```
140+>
141+> '''の代わりに、事前に問い合わせるべきであり
142+>
143+> ``` pascal
144+> if Control is TListBox then
145+> TListBox(Control).Canvas.FillRect(ARect);
146+> ```
147+>
148+> と書くことができる。 **Index:** アクセスできるように、アイテムの場所を特定する '''
149+>
150+> ``` pascal
151+> <ListBox>.Items[Index]
152+> ```
153+>
154+> **.**
155+> ARect:**背景を描くために必要な、四角形を描写する。**
156+> State:''' 通常、フォーカスされた、選択されたなどアイテムの状態。
157+
158+- 例では以下のように見えるはずである:
159+
160+![](/wiki-images/2/26/ListBoxBsp1.png) -\> ![](/wiki-images/9/9f/ListBoxBsp2.png)
161+
162+## See also
163+
164+- [[doc:lcl/stdctrls/tlistbox.html|TListBox doc]]
165+- [[TDBListBox]]
166+- [[ListBox with separators]]
167+- [tutorial about TListBox](http://forum.codecall.net/topic/73705-the-basic-working-with-tlistbox/)
168+
169+---
170+*From the Free Pascal wiki, page "TListBox/ja", as it stood on 2024-03-22 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