アップダウンコントロールの作成(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