文字サイズのポイントからピクセル変換          <TOP>


文字サイズのポイントからピクセルに変換します。

MulDiv 2つの符号付き32ビット整数を乗算し、その結果(64ビット)を1つの符号付き32ビット整数で除算

 

Declare Function Api_MulDiv& Lib "kernel32" Alias "MulDiv" (ByVal nNumber&, ByVal nNumerator&, ByVal nDenominator&)
    nNumber        被乗数を指定
    nNumerator    乗数を指定
    nDenominator 除数を指定
(nNumber * nNumerator) を、nDenominator で割ることを意味します。
例では、10Pointの文字を印刷する場合の高さを求めています。整数同士の計算ですので結果を10で除算します。

 

'================================================================
'= 文字サイズのポイントからピクセルに変換
'=    (MulDiv.bas)
'================================================================
#include "Windows.bi"

' 2つの符号付き32ビット整数を乗算(64ビット)し、その結果を1つの符号付き32ビット整数で除算
Declare Function Api_MulDiv& Lib "kernel32" Alias "MulDiv" (ByVal nNumber&, ByVal nNumerator&, ByVal nDenominator&)

Var Shared Text(4) As Object
Var Shared Edit(3) As Object
Var Shared Button1 As Object

For i = 0 To 4
    If i < 4 Then
        Edit(i).Attach GetDlgItem("Edit" & Trim$(Str$(i + 1)))
        Edit(i).SetFontSize 14
    End If
    Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1)))
    Text(i).SetFontSize 14
Next
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var A As Long
    Var B As Long
    Var C As Long
    Var D As Long

    A = Val(Edit(0).GetWindowText)
    B = Val(Edit(1).GetWindowText)
    C = Val(Edit(2).GetWindowText)

    D = Api_MulDiv(A, B, C)

    Edit(3).SetWindowText Str$(D)
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End