入力、テーブル、およびグリッド コントロール用のフォントと背景
この記事では、色を選択できるようにするための新しいカラー ピッカー コントロールについて説明します。
伝統的に、色はユーザーとコミュニケーションする理想的な方法と考えられてきました。 たとえば、赤色は、重要な情報へのユーザーの注意を引くためによく使用されます。 ただし、一部のユーザーは特定の色または色調を区別できず、一部のユーザーは視覚障害があります。 したがって、ユーザーに情報を伝達するために、色のみを使用することはお勧めしません。 代わりに、すべてのユーザーに情報を伝えるために、記号または追加のテキストとともに色を使用する必要があります。
Dynamics AX 2012 での色の選択
Microsoft Dynamics AX 2012 では、色の選択に次の特性がありました。
- Win32 カラー ピッカーが使用されていました。
- これには、RGB/10 進の変換に Win32 アプリケーション プログラミング インターフェイス (API) が必要でした。 (入力コントロールは RGB の 10 進値を受け入れました。)
Public void lookup()
{
#DEFINE.COLORVALUE(64)
Int r,g,b
container choosencolor;
Binary customcolors = new Binary(#COLORVALUE);
CCColor colorvalue;
Super();
[r,g,b] = WinAPI::RGBint2Con(this.backgroundColor());
chosenColor = WinAPI::chooseColor(element.hWnd(),r,g,b, customColors, true);
If(chosencolor)
{
[r, g, b] = chosencolor;
Colorvalue = WinAPI::RGB2int(r,g,b);
This.backgroundColor(colorValue);
employeeWorkPlannerForm.parmAbsensceColor(colorvalue);
Employeetable.columns(employeeworkplannerform.numberofcolumns());
Absenscecolorparm = colorvalue;
}
}
入力コントロールの色の選択
現在のバージョンでは、カラー ピッカー コントロールは標準コントロールの種類です。 カラー ピッカー コントロールは、フォームに直接配置することも、整数または文字列コントロールのカスタム ルックアップの一部として使用することもできます。 次の例は、カスタム ルックアップでカラー ピッカー コントロールとやり取りする方法を示しています。 ただし、フォームでカラー ピッカーを配置し、色を選択するためのボタンをユーザーに提供する場合、コードは似たものになります。
- カラー ピッカー コントロールは、ユーザーが視覚的に色を選択したり RGB 値を指定できるように、フォームまたはカスタム ルックアップをホストすることができます。
- 戻り値は、入力コントロール プロパティに直接割り当てることができる 10 進数値です。 (ランタイム RGB 変換は必要ありません。)
[Control("String")]
class stringControl
{
/// <summary>
///
/// </summary>
public void lookup()
{
int color = hex2Int(this.valueStr());
color = ColorSelection::selectColorStringControl(this, color);
this.text(int2hex(color));
this.backgroundColor(color);
}
}
[Control("Integer")]
class integerControl
{
/// <summary>
///
/// </summary>
public void lookup()
{
int color = this.value();
color = ColorSelection::selectColor(this, color);
this.value(color);
this.backgroundColor(color);
}
}
テーブル コントロールでの色の使用
入力コントロールの色付けにはデザイン時の操作はありません。 つまり、既定で「青」となるように入力コントロールをモデル化できません。 ただし、色の値を変更できるランタイム機能があります。 次の例は、テーブル コントロールのセルの色を変更する方法を示しています。
public FormControl editControl(int column, int row)
{
stringEdit.colorScheme(FormColorScheme::RGB);
stringEdit.backgroundColor(WinAPI::RGB2int(225,225,125));
stringEdit.foregroundColor(WinAPI::RGB2int(8,10,200));
}
グリッド コントロールでの色の使用
public void displayOption(Common _record, FormRowDisplayOption _options)
{
CLIParentTable table;
table = _record;
if(!cleared)
{
_options.affectedElementsByControl(CliParentTable_AInt.id());
_options.affectedElementsByControl(CliParentTable_AEnum.id());
_options.affectedElementsByControl(CliParentTable_AString.id());
_options.affectedElementsByControl(CliParentTable_EditMethodString.id());
if(table.AInt<=20)
{
_options.backColor(WinAPI::RGB2int(255,165,0));
}
else if( table.AInt>20 && table.AInt <60)
{
_options.backColor(WinAPI::RGB2int(255,255,0));
_options.fontItalic(true);
_options.textColor(WinAPI::RGB2int(255,0,127 ));
_options.fontStrikethrough(true);
}
else
{
_options.backColor(WinAPI::RGB2int(128,0,128));
_options.fontUnderline(true);
}
}
super(_record, _options);
}
整数から RGB 値への実行時の変換ではなく静的 RGB
以前は、Win32 カラー ピッカーが RGB 値を返す一方、背景色 API が整数を受け入れていたため、WinAPI::RGB2Int を使用したランタイム変換が必要でした。 この新しいカラー ピッカーは、コントロールの整数の消費に合わせて整数を返すため、このランタイム変換は不要です。 また、.NET コードは、色に RGB 値を頻繁に使用すると理解されます。 したがって、そのような場合は、使用するたびにランタイム変換を行う必要はありません。 代わりに、静的色変数を定義することができます。 次に 3 つの例を挙げます。
Static int GrayColor = 220 + 220 <<#offset8 + 220<<offset16;
Static int GrayColor = 0xdcdcdc
Static int GrayColor = 14474460; // DCDCDC or 220,220,220