アップダウンコントロールの作成(T)          <TOP>


アップダウンコントロールを作成します。CreateUpDownControlおよびCreateWindowExでも作成できますが、前者のほうが簡単です。

CreateUpDownControl アップダウンコントロールを作成

CreateWindowEx ウインドウ(コントロール)を作成

DestroyWindow CreateWindowExの解放

 

左:CreateUpDownControlで作成    右:アップ・ダウン矢印をクリックした状態

 
左:「作成」ボタンをクリックし、CreateWindowExで作成    右:nMaxを1000以上に設定した場合、3桁毎にカンマ(,)が入ります。

コードの中でコメント行のようにor UDS_NOTHOUSANDSを追加した場合(Edit2の表示は、3桁毎のカンマは入りません)

 

'================================================================
'= アップダウンコントロールの作成
'=    (CreateUpDownControl.bas)
'================================================================
#include "Windows.bi"

#define WS_VISIBLE &H10000000         '表示する
#define WS_CHILD &H40000000           '親ウインドウを持つコントロール(子ウインドウ)を作成する

#define PBM_SETSTEP &H404             '(WM_USER + 4)増分の設定
#define UPDOWN_CLASS "msctls_updown32"'アップダウンコントロール

#define ICC_ANIMATE_CLASS &H80        'アニメートコントロール
#define ICC_BAR_CLASSES &H4           'ツールバー、ステータスバー、トラックバー、ツールチップ
#define ICC_COOL_CLASSES &H400        'レバーコントロール
#define ICC_DATE_CLASSES &H100        'DTPコントロール
#define ICC_HOTKEY_CLASS &H40         'ホットキーコントロール
#define ICC_INTERNET_CLASSES &H800    'IPアドレスコントロール(Version4.71以降)
#define ICC_LISTVIEW_CLASSES &H1      'リストビュー、ヘッダーコントロール
#define ICC_NATIVEFNTCTL_CLASS &H2000 'ネィティブフォントコントロール
#define ICC_PAGESCROLLER_CLASS &H1000 'ページャーコントロール(Version4.71以降)
#define ICC_PROGRESS_CLASS &H20       'プログレスバー
#define ICC_TAB_CLASSES &H8           'タブコントロール、ツールチップ
#define ICC_TREEVIEW_CLASSES &H2      'ツリービュー、ツールチップ
#define ICC_UPDOWN_CLASS &H10         'アップダウンコントロール
#define ICC_USEREX_CLASSES &H200      '拡張コンボボックス
#define ICC_WIN95_CLASSES &HFF        'すべてのコントロール

#define UDM_GETPOS &H468              '現在のポジションを取得
#define UDM_GETPOS32 &H472            '現在のポジション(32ビット値)を取得
#define UDM_SETBUDDY &H469            'バディウィンドウを設定
#define UDM_SETPOS &H467              '現在のポジション(32ビット値)を設定
#define UDM_SETPOS32 &H471            '現在のポジションを設定
#define UDM_SETRANGE &H465            'ポジションの範囲を設定
#define UDM_SETRANGE32 &H46F          'ポジションの範囲(32ビット値)を設定

#define UDS_ALIGNLEFT &H8             'アップダウンをバディウィンドウの左に配置
#define UDS_ALIGNRIGHT &H4            'アップダウンをバディウィンドウの右に配置
#define UDS_ARROWKEYS &H20            '矢印キーで現在位置を変更できる(スピンコントロールの場合)
#define UDS_AUTOBUDDY &H10            'Zオーダが一つ前のウィンドウを自動的にバディとする
#define UDS_HORZ &H40                 '水平アップダウンにする
#define UDS_NOTHOUSANDS &H80          '三桁ごとの区切り記号を表示しない(スピンコントロールの場合)
#define UDS_SETBUDDYINT &H2           '位置の変更をバディウィンドウに自動的に表示する
#define UDS_WRAP &H1                  '範囲を越えたとき値を折り返す

' アップダウンコントロールを作成
Declare Function Api_CreateUpDownControl& Lib "comctl32" Alias "CreateUpDownControl" (ByVal dwStyle&, ByVal x&, ByVal y&, ByVal nWidth&, ByVal nHeight&, ByVal hParent&, ByVal ID&, ByVal hInstance&, ByVal hBuddy&, ByVal max&, ByVal min&, ByVal StartPos&)

' ウインドウ(コントロール)を作成
Declare Function Api_CreateWindowEx& Lib "user32" Alias "CreateWindowExA" (ByVal ExStyle&, ByVal ClassName$, ByVal WinName$, ByVal Style&, ByVal x&, ByVal y&, ByVal nWidth&, ByVal nHeight&, ByVal Parent&, ByVal Menu&, ByVal Instance&, ByVal Param&)

' CreateWindowExの解放
Declare Function Api_DestroyWindow& Lib "user32" Alias "DestroyWindow" (ByVal hWnd&)

Var Shared Edit1 As Object
Var Shared Edit2 As Object
Var Shared Button1 As Object

Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
Edit2.Attach GetDlgItem("Edit2") : Edit2.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

Var Shared hUpDownCtrl As Long

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Var nMin As Long
    Var nMax As Long
    Var nPos As Long
    Var Ret As Long

    nMin = 0
    nMax = 2000
    nPos = 900

    'アップダウンコントロールを作成する
    Ret = Api_CreateUpDownControl(WS_CHILD Or WS_BORDER Or WS_VISIBLE Or UDS_SETBUDDYINT Or UDS_ALIGNRIGHT, 0, 0, 0, 0, GethWnd, 100, GetInst, Edit1.GethWnd, nMax, nMin, nPos)
    Ret = Api_CreateUpDownControl(WS_CHILD Or WS_BORDER Or WS_VISIBLE Or UDS_SETBUDDYINT Or UDS_HORZ, 20, 72, 70, 16, GethWnd, 100, GetInst, Edit2.GethWnd, nMax, nMin, nPos)
'   Ret = Api_CreateUpDownControl(WS_CHILD Or WS_BORDER Or WS_VISIBLE Or UDS_SETBUDDYINT Or UDS_HORZ Or UDS_NOTHOUSANDS, 20, 72, 70, 16, GethWnd, 100, GetInst, Edit2.GethWnd, nMax, nMin, nPos)
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()

    hUpDownCtrl = Api_CreateWindowEx(0, UPDOWN_CLASS, "", WS_CHILD Or WS_VISIBLE Or ICC_UPDOWN_CLASS, 200, 26, 0, 40, GethWnd, 0, 0, 0) 
    hUpDownCtrl = Api_CreateWindowEx(0, UPDOWN_CLASS, "", WS_CHILD Or WS_VISIBLE Or ICC_UPDOWN_CLASS Or UDS_HORZ, 120, 50, 70, 16, GethWnd, 0, 0, 0) 
End Sub

'================================================================
'=
'================================================================
Declare Sub MainForm_QueryClose edecl ()
Sub MainForm_QueryClose()
    Var Ret As Long

    Ret = Api_DestroyWindow(hUpDownCtrl)
End Sub

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