ものさし

解決


TK  2025-07-29 00:51:21  No: 152129  IP: 192.*.*.*

モニター上にものさしを表示させたいと考えてます。
解像度によって色々処理が必要と思いますが、そもそも対応って可能でしょうか?

編集 削除
vram  2025-07-29 02:55:31  No: 152130  IP: 192.*.*.*

プロジェクトのマニフェストあたりに高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;

こうかな?
あとは関数を使ってメモリを書けば ものさしになるとおもうけど

編集 削除
TK  2025-07-29 11:43:57  No: 152131  IP: 192.*.*.*

vramさん
ご回答ありがとうございます。
非常に勉強になりました。
ご教授いただいた内容で確認をしてみたいと思います。

編集 削除