【MQL4】TERMINAL_SCREEN_DPIを使えばディスプレイの解像度に関わらずオブジェクトの大きさを揃えられる

原因はDPIの違い

オブジェクトを使ったインジケーター等を作って「よしバッチリ!」と思って第三者に配布したところ、「大きすぎて見にくい」とか「ずれる」と言われたことありませんか?

例えばこんな感じ。

オブジェクトが大きすぎる例

オブジェクトサイズをDPIで調整した例

上が大きすぎる例で、下が丁度いい例です。

ディスプレイの解像度(1920×1080とかのアレ)の問題だと思っていたものの、同じ解像度に設定してもオブジェクトの大きさが揃わない(一致しない)のです。

ずっと原因が分からなかったのですが、ついにその原因が分かりました。

その原因はズバリ、DPIです。

DPIとはDot Per Inch(ドット・パー・インチ)の略で、1インチの中にどれだけのドットを表現できるかを表します。

DPIが大きいほどより精細な色彩を画面に映すことが可能です。

ディスプレイの解像度の設定を変えてもDPIの数字は変わりません。

だから同じ解像度に設定しても見た目が一致しないんですね。

「ピクセルとDPIは違うの?」「DPIって結局何なの?」って方はドットとピクセルの違いに詳しく書かれていますので、興味のある方はご一読ください。

でもって、MQL4にはこのDPIを取得できる組込関数が用意されています!(知らなかった!)

それがTerminalInfoInteger(TERMINAL_SCREEN_DPI)関数です。

これを呼び出せばお使いのPCのDPIが分かります。

市場に出回ってるPCの大半は96か120で、高性能だと144ってところでしょうか。

開発しているPCのDPIを調べ、それをもとにオブジェクトサイズを調整してあげれば、DPIが異なるPCでも同じ見た目を実現できます。

こんな感じのコードになります。

// EAやインジケーターを稼働させるPCのDPI
int dpi = TerminalInfoInteger(TERMINAL_SCREEN_DPI);

// 開発者PCのDPI
int dpiDevPC = 120;

// 何らかのオブジェクトの横幅
int xSize = 100;

// 調整したオブジェクトの横幅
// 割り算で小数点が発生しないようにすること
// つまり割り切れるようにxSizeを定義すること
// 5の倍数がオススメ
int xSizeAdjust = (xSize * dpi) / dpiDevPC;

// 以降はxSizeAdjustを使ってオブジェクトを作成していけばよい

コメントに記載していますが、割り算が小数点が出ることなく割り切れるように元のオブジェクトサイズを定義してあげないと、DPIの違いによって微妙にずれちゃいますので、ご注意ください。

5の倍数で定義することをお勧めします。人間にも分かりやすいですしね。

MT4の無料プログラミング講座

メルマガ登録して、MT4のプログラミング講座を無料で受けちゃおう!

超豪華プレゼントも盛りだくさん♪

MT4プログラミングを習得すると、オリジナルEA運用、作成代行、商品販売等、複数の収入源を手に入れられるよ。副業に最適だね!

↓↓↓ 詳細はこちら ↓↓↓

アイキャッチ

>

エターナル・パートナーPRO ~MT4裁量トレード支援ツール~ 「MT4は裁量トレーダーに優しくない」そう思ったことありませんか?もっと快適にトレードするための強力な売買ツールが必要だと考え、開発したのが「エターナル・パートナーPRO」です。元々は自分自身のために開発したツールですので、手抜き無しのガチものです。既に200名近い方に手に取っていただき、喜びの声が続々と届いております。ぜひご覧ください!

CTR IMG