TerminalInfoInteger関数の働き・役割
TerminalInfoInteger関数は、MQL5プログラム環境の対応するプロパティの値を返すために使用されます。返される値は整数型(int)であり、端末の様々なプロパティ情報を取得することができます。例えば、ユーザーのモニターのDPI(Dots Per Inch)などの情報が含まれます。
TerminalInfoInteger関数の引数について
TerminalInfoInteger関数の引数は以下の通りです。
int TerminalInfoInteger(
int property_id // プロパティ識別子
);
property_id
property_idはプロパティの識別子を指定します。この識別子はENUM_TERMINAL_INFO_INTEGER列挙型のいずれかでなければなりません。
※ENUM_TERMINAL_INFO_INTEGER列挙型についての詳細は↓の記事をご参照ください。
TerminalInfoInteger関数の戻り値について
TerminalInfoInteger関数は、指定されたプロパティ識別子に対応する整数型の値を返します。例えば、TERMINAL_SCREEN_DPIを指定すると、モニターのDPIが整数値として返されます。
TerminalInfoInteger関数を使う際の注意点
TerminalInfoInteger関数を使用する際には、プロパティ識別子が正しいことを確認してください。無効な識別子を指定すると、予期しない結果を招く可能性があります。また、返される値が整数型であるため、文字列型や実数型のデータとして使用することはできません。
TerminalInfoInteger関数を使ったサンプルコード
以下に、TerminalInfoInteger関数を使用してユーザーのモニターのDPIを取得し、ボタンの幅を計算するサンプルコードを示します。若干複雑なので、小分けにして解説していきます。
//--- 画面に1.5インチの幅のボタンを作成します
void OnStart()
{
// ユーザーのモニターのDPIを取得します
int screen_dpi = TerminalInfoInteger(TERMINAL_SCREEN_DPI);
// DPI=96の標準モニターの画面のドットの基本の幅
int base_width = 144; // 1.5インチ * 96DPI = 144ピクセル(デジタル画像を構成する最小の単位)
// ユーザーモニター(DPIを含む)のボタンの幅を計算します
int width = (base_width * screen_dpi) / 96;
// ボタンの幅をエキスパートログに出力します
Print("Button width in pixels: ", width);
//--- 百分率でのスケーリング係数の計算
int scale_factor = (TerminalInfoInteger(TERMINAL_SCREEN_DPI) * 100) / 96;
//--- スケーリング係数の計算
width = (base_width * scale_factor) / 100;
// 再計算したボタンの幅をエキスパートログに出力します
Print("Scaled button width in pixels: ", width);
}
解説1
void OnStart()
{
// ユーザーのモニターのDPIを取得します
int screen_dpi = TerminalInfoInteger(TERMINAL_SCREEN_DPI);
// DPI=96の標準モニターの画面のドットの基本の幅
int base_width = 144; // 1.5インチ * 96DPI = 144ピクセル(デジタル画像を構成する最小の単位)
- ユーザーのモニターのDPIを取得:
int screen_dpi = TerminalInfoInteger(TERMINAL_SCREEN_DPI);
- TerminalInfoInteger関数を使用して、現在のモニターのDPIを取得しています。TERMINAL_SCREEN_DPIは、ユーザーのモニターのDPIを表すプロパティ識別子です。
- 標準モニターの画面のドットの基本の幅を設定:
int base_width = 144; // 1.5インチ * 96DPI = 144
ピクセル
- ここでは、DPIが96の標準モニターにおいて1.5インチの幅をピクセルで表しています。96DPIのモニターでは、1インチは96ピクセル(デジタル画像を構成する最小の単位)に相当します。したがって、1.5インチは144ピクセルになります。
DPIとは
DPIは「Dots Per Inch」の略で、1インチ(2.54センチメートル)あたりのドット数を表す指標です。これはディスプレイやプリンターの解像度を示すために使われます。例えば、DPIが高いほど、同じサイズの画面により多くのドットが詰め込まれているため、表示される画像やテキストがより詳細で鮮明になります。
解説2
// ユーザーモニター(DPIを含む)のボタンの幅を計算します
int width = (base_width * screen_dpi) / 96;
// ボタンの幅をエキスパートログに出力します
Print("Button width in pixels: ", width);
ユーザーモニター(DPIを含む)のボタンの幅を計算
ここでは、標準モニターのDPI(96)を基に、ユーザーのモニターのDPIに合わせたボタンの幅を計算しています。base_width
は1.5インチの幅をピクセルで表したもので、DPIを考慮して適切なボタンの幅を計算します。
ボタンの幅をエキスパートログに出力
計算したボタンの幅をエキスパートログに出力して、プログラムの実行結果を確認します。エキスパートログはデバッグや情報確認に役立ちます。
解説3
//--- 百分率でのスケーリング係数の計算
int scale_factor = (TerminalInfoInteger(TERMINAL_SCREEN_DPI) * 100) / 96;
//--- スケーリング係数の計算
width = (base_width * scale_factor) / 100;
// 再計算したボタンの幅をエキスパートログに出力します
Print("Scaled button width in pixels: ", width);
}
百分率でのスケーリング係数の計算
int scale_factor = (TerminalInfoInteger(TERMINAL_SCREEN_DPI) * 100) / 96;
ここでは、ユーザーのモニターのDPIに基づいてスケーリング係数を計算しています。TerminalInfoInteger(TERMINAL_SCREEN_DPI)で取得したDPIを基に、標準DPIの96で割り、100を掛けることでスケーリング係数を百分率で求めています。これにより、異なるDPI設定でも一貫した表示サイズを維持できます。
スケーリング係数を使用したボタンの幅の再計算
width = (base_width * scale_factor) / 100;
先ほど計算したスケーリング係数を使用して、ボタンの幅を再計算します。base_width
にスケーリング係数を掛け、100で割ることで、DPIに応じた正確な幅を得ることができます。
再計算したボタンの幅をエキスパートログに出力
Print("Scaled button width in pixels: ", width);
再計算したボタンの幅をエキスパートログに出力して、プログラムの実行結果を確認します。エキスパートログはデバッグや情報確認に役立ちます。
スケーリング係数について
スケーリング係数は、表示する要素のサイズを調整するための比率を表します。これにより、異なる解像度やDPI設定でも、要素が適切なサイズで表示されるようになります。スケーリング係数を使用することで、異なるデバイスや設定に対応した柔軟なデザインが可能になります。