数字文字列の形式を書式化          <TOP>


GetNumberFormat 指定した数字文字列を、指定したロケール用にカスタマイズされた数字文字列として書式化
 

 

'================================================================
'= 数字文字列の形式を書式化
'=    (GetNumberFormat.bas)
'================================================================
#include "Windows.bi"

Type NUMBERFMT
    NumDigits     As Long         '小数点以下の数字の数
    LeadingZero   As Long         '小数点以下の数字の数がNumDigitsに満たない場合「0」を加える
    Grouping      As Long         'グループ(日本では千単位)の区切り文字数
    lpDecimalSep  As Long         '小数点を表す文字
    lpThousandSep As Long         'グループの区切り文字
    NegativeOrder As Long         '負数の表示方法
End Type

' 指定されたロケール用にカスタマイズされた数字文字列として数字文字列の形式を設定
Declare Function Api_GetNumberFormat& Lib "kernel32" Alias "GetNumberFormatA" (ByVal Locale&, ByVal dwFlags&, ByVal lpValue$, lpFormat As NUMBERFMT, ByVal lpNumberStr$, ByVal cchNumber&)

#define LOCALE_SYSTEM_DEFAULT &H400     'システムのデフォルトロケール
#define LOCALE_USER_DEFAULT &H800       '現在のユーザのデフォルトロケール

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

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

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var num As String
    Var Buff As String
    Var nf As NUMBERFMT
    Var Ret As Long

    num = Edit(0).GetWindowText

    Buff = String$(255, Chr$(0))

    nf.NumDigits = Val(Edit(1).GetWindowText)
    nf.LeadingZero = 0
    nf.Grouping = Val(Edit(2).GetWindowText)
    nf.lpDecimalSep = StrAdr("." & Chr$(0))
    nf.lpThousandSep = StrAdr("," & Chr$(0))
    '-1.1 の場合 0:(1.1) 1:-1.1 2:- 1.1 3:1.1- 4:1.1 -
    nf.NegativeOrder = Val(Edit(3).GetWindowText)

    Ret = Api_GetNumberFormat(LOCALE_USER_DEFAULT, 0, num, nf, Buff, Len(Buff))
    Text(0).SetWindowText Left$(Buff, Ret)
End Sub

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