Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11726 / 76734 ←次へ | 前へ→

【70540】Re:四角形の大きさが変
発言  UO3  - 11/11/27(日) 7:51 -

引用なし
パスワード
   ▼すなさん さん:

おはようございます。

アップされたコードを、こちらの環境(2010 と 2003) で試しましたら
いずれも、縦横数値が逆転しているだけで、同じ値でした。

ところで、エクセルで指定する長さはポイント単位ですね。
実際には、これを、Windowsが画面に描画する際には、ピクセル(いわゆる画素)に変換して処理します。(たぶん?)

で、想像ですけど

1.そのときの表示倍率に基づいた1インチあたりのポイント数を取得。
2.1インチあたりの画素数を取得。(表示倍率にかかわらず一定)
3.指定されたポイント数に相当する画素数を取得。
4.その画素数分のドットを描画。

このようにしているんだろうと理解しています。
で、2.の数字は、標準設定であれば縦も横も同じで、96あたりに設定されていると
思われますが、ここは、任意に設定することもできます。

以下を実行してみて、同じ数になるかどうか、確認してみられてはいかがでしょう。

Option Explicit

Declare Function GetDC Lib "User32.dll" (ByVal hWnd As Long) As Long
Declare Function ReleaseDC Lib "User32.dll" (ByVal hWnd As Long, _
                          ByVal hdc As Long) As Long
Declare Function GetDeviceCaps Lib "gdi32.dll" (ByVal hdc As Long, _
                        ByVal nIndex As Long) As Long

Const LOGPIXELSX = 88
Const LOGPIXELSY = 90

Sub TestDPI()
  MsgBox "横は" & GetDPI(LOGPIXELSX) & vbLf & "縦は" & GetDPI(LOGPIXELSY)
End Sub

Private Function GetDPI(ByVal nFlag As Long) As Long
  Dim hdc As Long
  hdc = GetDC(Application.hWnd)
  GetDPI = GetDeviceCaps(hdc, nFlag)
  Call ReleaseDC(&H0, hdc)
End Function

5 hits

【70539】四角形の大きさが変 すなさん 11/11/26(土) 23:10 質問
【70540】Re:四角形の大きさが変 UO3 11/11/27(日) 7:51 発言
【70546】Re:四角形の大きさが変 すなさん 11/11/28(月) 0:13 発言
【70551】Re:四角形の大きさが変 UO3 11/11/29(火) 9:32 発言
【70557】Re:四角形の大きさが変 すなさん 11/11/29(火) 23:25 お礼
【70541】Re:四角形の大きさが変 UO3 11/11/27(日) 8:02 発言
【70547】Re:四角形の大きさが変 すなさん 11/11/28(月) 0:18 発言
【70552】Re:四角形の大きさが変 とおりすぎ 11/11/29(火) 10:32 回答

11726 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free