ものさし

解決


TK  2025-07-29 09:51:21  No: 152129

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


vram  2025-07-29 11:55:31  No: 152130

プロジェクトのマニフェストあたりに高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 20:43:57  No: 152131

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加