确定powerpoint中的单位设置

问题描述

我正在尝试使用 VBA 来确定 PowerPoint 中测量单位的用户偏好,但是,我找不到正确的方法。您知道一种确定单位设置是否以英寸、厘米、磅为单位的方法吗?

解决方法

如果您使用的是 Windows,则没有首选度量单位的设置。 PPT 从您的 Windows 设置中选取公制或英制单位。

如果了解用户看到的单位很重要,您需要查询 Win API。

如果你的代码需要使用坐标,用户看到的设置无关;您的代码将使用点数(72 英寸)。

对 Dan Appleman 的几本旧书进行了一些挖掘,并拼凑了这个 API 调用,以确定系统是设置为美制还是公制。如果我通过它 1033(美国英语),它返回 1,直到我进入控制面板并将系统设置为公制;然后它返回 0。但是在系统设置为 US 的情况下,如果我将区域设置代码传递给它,该函数将返回 0,例如荷兰语。

公平警告:我严格来说是一个剪切/粘贴/播放,直到它停止使 API 程序员崩溃为止。对此几乎无能为力。用一粒盐把这一切都带走,嗯?

Option Explicit

Declare Function GetLocaleInfo& Lib "kernel32" Alias "GetLocaleInfoA" (ByVal _
Locale As Long,ByVal LCType As Long,ByVal lpLCData As String,ByVal cchData _
As Long)

Function WindowsUSorMetric() As Long
' Returns 1 for U.S. or 0 for Metric
' NOTE: Needs modification before it'll work with 64-bit apps
'       Assumes USEnglish

    Dim Locale As Long
    Dim LCType As Long
    Dim lpLCData As String
    Dim cchData As Long
    
    ' 1033 is the languageID for US English
    ' Use the Object Browser in the VBA IDE,look up msolanguageid for others
    Locale = 1033
    LCType = &HD
    lpLCData = String$(255,0)
    cchData = 255

    Call GetLocaleInfo(Locale,LCType,lpLCData,cchData)

    WindowsUSorMetric = CLng(Left$(lpLCData,InStr(lpLCData,Chr$(0)) - 1))

End Function

Sub TestMe()
    MsgBox WindowsUSorMetric
End Sub