モニター上にものさしを表示させたいと考えてます。
解像度によって色々処理が必要と思いますが、そもそも対応って可能でしょうか?
プロジェクトのマニフェストあたりに高DPIを有効にするかどうかで変わりますが
高DPIではない場合
cmをピクセルに変換
function CentimetersToPixels(Cm: Double): Integer;
var
DC: HDC;
DPI: Integer;
begin
DC := GetDC(0);
try
DPI := GetDeviceCaps(DC, LOGPIXELSX); // 水平方向のDPI
Result := Round(Cm * DPI / 2.54); // 1インチ = 2.54cm
finally
ReleaseDC(0, DC);
end;
end;
高DPIの場合Delphi 10.3以降だとインチをピクセルに変換するのが用意されてるからセンチをインチに換算して
function CentimetersToPixels(Cm: Double; Control: TControl): Integer;
begin
Result := Round(Cm * Control.CurrentPPI / 2.54);
end;
こうかな?
あとは関数を使ってメモリを書けば ものさしになるとおもうけど
vramさん
ご回答ありがとうございます。
非常に勉強になりました。
ご教授いただいた内容で確認をしてみたいと思います。