Sign in Join
Wiki copytemporary

Colors/ja: what changed

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

OldNewLine
1-\
21=概要=
32
43TColor は LCL の標準色で Delphi の TColor と互換性があります。TColor で RGB値(8 ビット×3)もしくは **clDefault** のような**システム**カラーを指定できます。また、LCL では TFPColor(RGBA、16 ビット×4)を使っている fpImage も共に使われています。
54
65# TColor から RGB への変換と逆変換
76
87ユニット **Graphics** は以下の関数を提供しています。
98
109``` pascal
1110function Blue(rgb: TColor): BYTE; // システムカラーでは動作しません
1211function Green(rgb: TColor): BYTE; // システムカラーでは動作しません
1312function Red(rgb: TColor): BYTE; // システムカラーでは動作しません
1413function RGBToColor(R, G, B: Byte): TColor;
1514procedure RedGreenBlue(rgb: TColor; out Red, Green, Blue: Byte); // システムカラーでは動作しません
1615function FPColorToTColor(const FPColor: TFPColor): TColor;
1716function TColorToFPColor(const c: TColor): TFPColor; // システムカラーでは動作しません
1817```
1918
2019以下に示すように、あらかじめ定義されているカラー定数がいくつかあります。
2120
2221``` pascal
2322 // 標準色
2423 clBlack = TColor($000000);
2524 clMaroon = TColor($000080);
2625 clGreen = TColor($008000);
2726 clOlive = TColor($008080);
2827 clNavy = TColor($800000);
2928 clPurple = TColor($800080);
3029 clTeal = TColor($808000);
3130 clGray = TColor($808080);
3231 clSilver = TColor($C0C0C0);
3332 clRed = TColor($0000FF);
3433 clLime = TColor($00FF00);
3534 clYellow = TColor($00FFFF);
3635 clBlue = TColor($FF0000);
3736 clFuchsia = TColor($FF00FF);
3837 clAqua = TColor($FFFF00);
3938 clLtGray = TColor($C0C0C0); // clSilver の別名
4039 clDkGray = TColor($808080); // clGray の別名
4140 clWhite = TColor($FFFFFF);
4241```
4342
4443# システムカラー
4544
4645## 例:clInfoBk、clInfoText
4746
4847システムカラーは特別な意味を持ったカラー定数です。システムカラーの実際の色は状況やテーマに依存します。これらは単純な色ではありません。\
4948例えば **clInfoBk** は、
5049
5150``` pascal
5251Form1.Canvas.Brush.Color:=clInfoBk; // ヒントウィンドウのデフォルトの背景ブラシを使用
5352Form1.Canvas.FillRect(10,10,50,50);
5453```
5554
5655Windows でのヒントウィンドウは通常は白の背景なので、上記のは白で描画されます。Linux/GTK2 の場合、通常は金属風テクスチャなので、それで描画されます。これに文字も書き込むのであれば **clInfoText** などマッチする色を使う必要があるでしょう。そうしないとユーザにとって読みづらくなってしまうかもしれません。実際の記述例は以下のようなります。
5756
5857``` pascal
5958Form1.Canvas.Brush.Color:=clInfoBk; // ヒントウィンドウのデフォルトの背景ブラシを使用
6059Form1.Canvas.FillRect(10,10,50,50);
6160Form1.Canvas.Font.Color:=clInfoText; // ヒントウィンドウのデフォルトの文字色を使用
6261Form1.Canvas.TextOut(10,10,'Hint');
6362```
6463
6564システムカラー **clInfoBk** は Pen.Color と Font.Color に使用することはできません。使用しても決められた定義はされてなく、結果はウィジェットセットやユーザテーマに左右されるでしょう。\
6665**clInfoText** についても同様です。Font.Color にだけ使用でき、Brush.Color に使っても動作しないでしょう。なお現在では、Pen.Color としてならすべてのウィジェットセットで使うことができるようになっています。
6766
6867## テーマの変更
6968
7069ユーザがテーマを切り替えるとシステムカラーが変更されます。**clInfoBk** は白から青に変わるかもしれませんし、あるいは単純色からテクスチャに変更かもしれません。ブラシハンドルが新しく割り当てられたときに、この変更が反映されます。単純に Brush.Color:=clInfoBk と指定することではブラシハンドルが割り当てられないことを忘れてはなりません。実際に使うときになってからブラシハンドルは割り当てられるのです。以下に例を示します。
7170
7271``` pascal
7372Form1.Canvas.Brush.Color:=clInfoBk; // ここではブラシハンドルは作られていません
7473Form1.Canvas.FillRect(10,10,50,50); // ここで現在のアクティブテーマのヒントウィンドウ用のブラシハンドルが作成されます
7574...
7675// この間にテーマが変更されたとしても、ブラシハンドルはまだ古いままです
7776...
7877Form1.Canvas.FillRect(10,10,50,50); // これは古いテーマブラシで描画されます
7978Form1.Canvas.Brush.Color:=clInfoBk; // 古い値と同じ値を指定してもブラシハンドルは新しく作成されません
8079Form1.Canvas.FillRect(10,10,50,50); // これも古いテーマブラシで描画されます
8180Form1.Canvas.Brush.Color:=clRed; // 新たな色を指定すると古いハンドルは無効になります
8281Form1.Canvas.Brush.Color:=clInfoBk; // 改めて色を指定し直します
8382Form1.Canvas.FillRect(10,10,50,50); // ブラシハンドルが新しく作られ、新しいテーマで描画されます
8483```
8584
8685## システムカラーの一覧
8786
8887以下の表はシステムカラーとその意味をまとめたものです。定義されている範囲外のテーマの使用に関しては定められてなく、結果はウィジェットセットとテーマに左右されます。例えば、**clDefault** は使用しているデバイスコンテキストの一般背景ブラシということです。カスタムコントロールをボタン要素で塗りたいのであれば、ユニット **Themes** の描画関数を使用してください。
8988
90-<table>
91-<thead>
92-<tr>
93-<th><p>カラー定数</p></th>
94-<th><p>LCL 定義</p></th>
95-<th><p>Delphi 注記</p></th>
96-<th><p>ウィジェットセットのサポート状況</p></th>
97-</tr>
98-</thead>
99-<tbody>
100-<tr>
101-<td><p>clNone</p></td>
102-<td><p>描画なし。コントロールの未定義色として使用されます。コントロールが透過するわけでありません。</p></td>
103-<td><p>-</p></td>
104-<td><p>全部</p></td>
105-</tr>
106-<tr>
107-<td><p>clDefault</p></td>
108-<td><p>ブラシとして使用した場合、対象の DC(デバイスコンテキスト)の一般背景ブラシを使用します。</p>
109-<ul>
110-<li>フォームのキャンバスで <em>FillRect</em> を使用した場合、標準ウィンドウの一般背景で矩形領域を塗りつぶします。これはウィジェットセットとテーマで定義されていて、通常は灰色、グラデーションもしくは画像が使われます。</li>
111-<li>TListBox のキャンバスで clDefault を使用した場合、一般背景で塗りつぶされます。Windows であれば通常は白です。つまり、TListBox では clDefault は clWindow と同じことです。</li>
112-<li>ペン色として使用した場合、デバイスコンテキストのデフォルトの線色が使われます。</li>
113-<li>フォント色として使用した場合、デバイスコンテキストの一般文字色が使われます。</li>
114-</ul></td>
115-<td><p>| -</p></td>
116-<td><p>全部</p></td>
117-</tr>
118-<tr>
119-<td><p>clScrollBar</p></td>
120-<td><p>スクロールバー本体</p></td>
121-<td><p>-</p></td>
122-<td><p>全部</p></td>
123-</tr>
124-<tr>
125-<td><p>clBackground</p></td>
126-<td><p>?</p></td>
127-<td><p>-</p></td>
128-<td><p>全部</p></td>
129-</tr>
130-<tr>
131-<td><p>clActiveCaption</p></td>
132-<td><p>アクティブウィンドのタイトルバー</p></td>
133-<td><p>-</p></td>
134-<td><p>なし</p></td>
135-</tr>
136-<tr>
137-<td><p>clInactiveCaption</p></td>
138-<td><p>非アクティブウィンドのタイトルバー</p></td>
139-<td><p>-</p></td>
140-<td><p>なし</p></td>
141-</tr>
142-<tr>
143-<td><p>clMenu</p></td>
144-<td><p>標準メニューアイテムの背景色</p></td>
145-<td><p>-</p></td>
146-<td><p>なし</p></td>
147-</tr>
148-<tr>
149-<td><p>clWindow</p></td>
150-<td><p>選択されていない文字の一般背景ブラシ。TEdit、TComboBox、TMemo、TListBox、TTreeView などのコントロール用に定義されています。</p></td>
151-<td><p>-</p></td>
152-<td><p>なし</p></td>
153-</tr>
154-<tr>
155-<td><p>clWindowFrame</p></td>
156-<td><p>ウィンドウの周り、フレームの色</p></td>
157-<td><p>-</p></td>
158-<td><p>なし</p></td>
159-</tr>
160-<tr>
161-<td><p>clMenuText</p></td>
162-<td><p>clMenu と共に使われるフォント色</p></td>
163-<td><p>-</p></td>
164-<td><p>なし</p></td>
165-</tr>
166-<tr>
167-<td><p>clWindowText</p></td>
168-<td><p>clWindow と共に使われるフォント色</p></td>
169-<td><p>-</p></td>
170-<td><p>なし</p></td>
171-</tr>
172-<tr>
173-<td><p>clCaptionText</p></td>
174-<td><p>アクティブウィンドのタイトルバーの文字色</p></td>
175-<td><p>-</p></td>
176-<td><p>なし</p></td>
177-</tr>
178-<tr>
179-<td><p>clActiveBorder</p></td>
180-<td><p>?</p></td>
181-<td><p>-</p></td>
182-<td><p>なし</p></td>
183-</tr>
184-<tr>
185-<td><p>clInactiveBorder</p></td>
186-<td><p>?</p></td>
187-<td><p>-</p></td>
188-<td><p>なし</p></td>
189-</tr>
190-<tr>
191-<td><p>clAppWorkspace</p></td>
192-<td><p>MDI メインフォームの背景色</p></td>
193-<td><p>-</p></td>
194-<td><p>なし</p></td>
195-</tr>
196-<tr>
197-<td><p>clHighlight</p></td>
198-<td><p>選択要素のブラシ色</p></td>
199-<td><p>-</p></td>
200-<td><p>なし</p></td>
201-</tr>
202-<tr>
203-<td><p>clHighlightText</p></td>
204-<td><p>選択文字のフォント色(clHighligh と共に使用)</p></td>
205-<td><p>-</p></td>
206-<td><p>なし</p></td>
207-</tr>
208-<tr>
209-<td><p>clBtnFace</p></td>
210-<td><p>ボタンの背景色</p></td>
211-<td><p>-</p></td>
212-<td><p>なし</p></td>
213-</tr>
214-<tr>
215-<td><p>clBtnShadow</p></td>
216-<td><p>アクティブの 3D エフェクトに使われているボタンの影の色(下と右側)</p></td>
217-<td><p>-</p></td>
218-<td><p>なし</p></td>
219-</tr>
220-<tr>
221-<td><p>clGrayText</p></td>
222-<td><p>無効要素のフォント色</p></td>
223-<td><p>-</p></td>
224-<td><p>なし</p></td>
225-</tr>
226-<tr>
227-<td><p>clBtnText</p></td>
228-<td><p>clBtnFace と共に使われるボタンのフォント色</p></td>
229-<td><p>-</p></td>
230-<td><p>なし</p></td>
231-</tr>
232-<tr>
233-<td><p>clInactiveCaptionText</p></td>
234-<td><p>非アクティブウィンドのタイトルバーの文字色</p></td>
235-<td><p>-</p></td>
236-<td><p>なし</p></td>
237-</tr>
238-<tr>
239-<td><p>clBtnHighlight</p></td>
240-<td><p>アクティブの 3D エフェクトに使われているボタンのハイライトの色(上と左側)</p></td>
241-<td><p>-</p></td>
242-<td><p>なし</p></td>
243-</tr>
244-<tr>
245-<td><p>cl3DDkShadow</p></td>
246-<td><p>?</p></td>
247-<td><p>-</p></td>
248-<td><p>なし</p></td>
249-</tr>
250-<tr>
251-<td><p>cl3DLight</p></td>
252-<td><p>?</p></td>
253-<td><p>-</p></td>
254-<td><p>なし</p></td>
255-</tr>
256-<tr>
257-<td><p>clInfoText</p></td>
258-<td><p>ヒント用のフォント色。clInfoBk と共に使用。</p></td>
259-<td><p>-</p></td>
260-<td><p>全部</p></td>
261-</tr>
262-<tr>
263-<td><p>clInfoBk</p></td>
264-<td><p>ヒント用のブラシ色。clInfoText と共に使用。</p></td>
265-<td><p>-</p></td>
266-<td><p>全部</p></td>
267-</tr>
268-<tr>
269-<td><p>clHotLight</p></td>
270-<td><p>?</p></td>
271-<td><p>-</p></td>
272-<td><p>なし</p></td>
273-</tr>
274-<tr>
275-<td><p>clGradientActiveCaption</p></td>
276-<td><p>アクティブウィンドウのタイトルバーのグラデーション作成時に使われるもう片方の色</p></td>
277-<td><p>-</p></td>
278-<td><p>なし</p></td>
279-</tr>
280-<tr>
281-<td><p>clGradientInactiveCaption</p></td>
282-<td><p>非アクティブウィンドウのタイトルバーのグラデーション作成時に使われるもう片方の色</p></td>
283-<td><p>-</p></td>
284-<td><p>なし</p></td>
285-</tr>
286-<tr>
287-<td><p>clMenuHighlight</p></td>
288-<td><p>選択されているメニューアイテムの背景色</p></td>
289-<td><p>-</p></td>
290-<td><p>なし</p></td>
291-</tr>
292-<tr>
293-<td><p>clMenuBar</p></td>
294-<td><p>メニューバーの背景色</p></td>
295-<td><p>-</p></td>
296-<td><p>なし</p></td>
297-</tr>
298-<tr>
299-<td><p>clForm</p></td>
300-<td><p>?</p></td>
301-<td><p>-</p></td>
302-<td><p>なし</p></td>
303-</tr>
304-<tr>
305-<td><p>clColorDesktop</p></td>
306-<td><p>?</p></td>
307-<td><p>-</p></td>
308-<td><p>なし</p></td>
309-</tr>
310-<tr>
311-<td><p>cl3DFace</p></td>
312-<td><p>?</p></td>
313-<td><p>-</p></td>
314-<td><p>なし</p></td>
315-</tr>
316-<tr>
317-<td><p>cl3DShadow</p></td>
318-<td><p>?</p></td>
319-<td><p>-</p></td>
320-<td><p>なし</p></td>
321-</tr>
322-<tr>
323-<td><p>cl3DHiLight</p></td>
324-<td><p>?</p></td>
325-<td><p>-</p></td>
326-<td><p>なし</p></td>
327-</tr>
328-<tr>
329-<td><p>clBtnHiLight</p></td>
330-<td><p>clBtnHighlight と同じ</p></td>
331-<td><p>-</p></td>
332-<td><p>なし</p></td>
333-</tr>
334-</tbody>
335-</table>
89+**カラー定数**
90+
91+**LCL 定義**
92+
93+**Delphi 注記**
94+
95+**ウィジェットセットのサポート状況**
96+
97+clNone
98+
99+描画なし。コントロールの未定義色として使用されます。コントロールが透過するわけでありません。
100+
101+\-
102+
103+全部
104+
105+clDefault
106+
107+ブラシとして使用した場合、対象の DC(デバイスコンテキスト)の一般背景ブラシを使用します。
108+
109+- フォームのキャンバスで *FillRect* を使用した場合、標準ウィンドウの一般背景で矩形領域を塗りつぶします。これはウィジェットセットとテーマで定義されていて、通常は灰色、グラデーションもしくは画像が使われます。
110+- TListBox のキャンバスで clDefault を使用した場合、一般背景で塗りつぶされます。Windows であれば通常は白です。つまり、TListBox では clDefault は clWindow と同じことです。
111+- ペン色として使用した場合、デバイスコンテキストのデフォルトの線色が使われます。
112+- フォント色として使用した場合、デバイスコンテキストの一般文字色が使われます。
113+
114+\| -
115+
116+全部
117+
118+clScrollBar
119+
120+スクロールバー本体
121+
122+\-
123+
124+全部
125+
126+clBackground
127+
128+?
129+
130+\-
131+
132+全部
133+
134+clActiveCaption
135+
136+アクティブウィンドのタイトルバー
137+
138+\-
139+
140+なし
141+
142+clInactiveCaption
143+
144+非アクティブウィンドのタイトルバー
145+
146+\-
147+
148+なし
149+
150+clMenu
151+
152+標準メニューアイテムの背景色
153+
154+\-
155+
156+なし
157+
158+clWindow
159+
160+選択されていない文字の一般背景ブラシ。TEdit、TComboBox、TMemo、TListBox、TTreeView などのコントロール用に定義されています。
161+
162+\-
163+
164+なし
165+
166+clWindowFrame
167+
168+ウィンドウの周り、フレームの色
169+
170+\-
171+
172+なし
173+
174+clMenuText
175+
176+clMenu と共に使われるフォント色
177+
178+\-
179+
180+なし
181+
182+clWindowText
183+
184+clWindow と共に使われるフォント色
185+
186+\-
187+
188+なし
189+
190+clCaptionText
191+
192+アクティブウィンドのタイトルバーの文字色
193+
194+\-
195+
196+なし
197+
198+clActiveBorder
199+
200+?
201+
202+\-
203+
204+なし
205+
206+clInactiveBorder
207+
208+?
209+
210+\-
211+
212+なし
213+
214+clAppWorkspace
215+
216+MDI メインフォームの背景色
217+
218+\-
219+
220+なし
221+
222+clHighlight
223+
224+選択要素のブラシ色
225+
226+\-
227+
228+なし
229+
230+clHighlightText
231+
232+選択文字のフォント色(clHighligh と共に使用)
233+
234+\-
235+
236+なし
237+
238+clBtnFace
239+
240+ボタンの背景色
241+
242+\-
243+
244+なし
245+
246+clBtnShadow
247+
248+アクティブの 3D エフェクトに使われているボタンの影の色(下と右側)
249+
250+\-
251+
252+なし
253+
254+clGrayText
255+
256+無効要素のフォント色
257+
258+\-
259+
260+なし
261+
262+clBtnText
263+
264+clBtnFace と共に使われるボタンのフォント色
265+
266+\-
267+
268+なし
269+
270+clInactiveCaptionText
271+
272+非アクティブウィンドのタイトルバーの文字色
273+
274+\-
275+
276+なし
277+
278+clBtnHighlight
279+
280+アクティブの 3D エフェクトに使われているボタンのハイライトの色(上と左側)
281+
282+\-
283+
284+なし
285+
286+cl3DDkShadow
287+
288+?
289+
290+\-
291+
292+なし
293+
294+cl3DLight
295+
296+?
297+
298+\-
299+
300+なし
301+
302+clInfoText
303+
304+ヒント用のフォント色。clInfoBk と共に使用。
305+
306+\-
307+
308+全部
309+
310+clInfoBk
311+
312+ヒント用のブラシ色。clInfoText と共に使用。
313+
314+\-
315+
316+全部
317+
318+clHotLight
319+
320+?
321+
322+\-
323+
324+なし
325+
326+clGradientActiveCaption
327+
328+アクティブウィンドウのタイトルバーのグラデーション作成時に使われるもう片方の色
329+
330+\-
331+
332+なし
333+
334+clGradientInactiveCaption
335+
336+非アクティブウィンドウのタイトルバーのグラデーション作成時に使われるもう片方の色
337+
338+\-
339+
340+なし
341+
342+clMenuHighlight
343+
344+選択されているメニューアイテムの背景色
345+
346+\-
347+
348+なし
349+
350+clMenuBar
351+
352+メニューバーの背景色
353+
354+\-
355+
356+なし
357+
358+clForm
359+
360+?
361+
362+\-
363+
364+なし
365+
366+clColorDesktop
367+
368+?
369+
370+\-
371+
372+なし
373+
374+cl3DFace
375+
376+?
377+
378+\-
379+
380+なし
381+
382+cl3DShadow
383+
384+?
385+
386+\-
387+
388+なし
389+
390+cl3DHiLight
391+
392+?
393+
394+\-
395+
396+なし
397+
398+clBtnHiLight
399+
400+clBtnHighlight と同じ
401+
402+\-
403+
404+なし
336405
337406# カスタムコントロールにテーマ要素を描画する
338407
339408ユニット **Themes** は標準コントロールの画一された要素の描画のための関数を提供しています。例えば、TTreeView などの展開(+/-など)ボタンを描画するには、以下のようなコードを使用します。
340409
341410``` pascal
342411uses Themes;
343412
344413...
345414
346415procedure TYourCustomControl.Paint;
347416const
348417 PlusMinusDetail: array[Boolean {強調表示}, Boolean {展開しているか}] of TThemedTreeview =
349418 (
350419 (ttGlyphClosed, ttGlyphOpened),
351420 (ttHotGlyphClosed, ttHotGlyphOpened)
352421 );
353422var
354423 Details: TThemedElementDetails;
355424 R: TRect;
356425 Collapse: boolean;
357426begin
358427 ...
359428 //テーマに沿った展開ボタンを描画します。
360429 Details := ThemeServices.GetElementDetails(PlusMinusDetail[False, Collapse]);
361430 R := Rect(ALeft, ATop, ARight + 1, ABottom + 1);
362431 ThemeServices.DrawElement(Canvas.Handle, Details, R, nil);
363432 ...
364433end;
365434```
366435
367436---
368437*From the Free Pascal wiki, page "Colors/ja", as it stood on 2020-02-11 after a change by Trev, 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