エディットボックスの属性を変更          <TOP>


GetWindowLong 指定されたウィンドウに関しての情報を取得

SetWindowLong 指定されたウィンドウの属性を変更

SendMessage ウィンドウにメッセージを送信

 

例では、エディットボックスの入力時に大文字での入力・小文字での入力・数字のみの入力を切り替えます。

参照

エディットボックスの読取専用設定・解除

 

'================================================================
'= エディットボックスの属性を変更
'=    (SetWindowLong2.bas)
'================================================================
#include "Windows.bi"

' 指定されたウィンドウに関しての情報を取得
Declare Function Api_GetWindowLong& Lib "user32" Alias "GetWindowLongA" (ByVal hWnd&, ByVal nIndex&)

' 指定されたウィンドウの属性を変更
Declare Function Api_SetWindowLong& Lib "user32" Alias "SetWindowLongA" (ByVal hWnd&, ByVal nIndex&, ByVal dwNewLong&)

' ウィンドウにメッセージを送信
Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any)

#define GWL_STYLE -16                   'アプリケーションのインスタンスハンドル
#define ES_LOWERCASE &H10               '入力文字を小文字にする
#define ES_NUMBER &H2000                '数値入力専用にする
#define ES_UPPERCASE 8                  '入力文字を大文字にする
#define EM_SCROLLCARET &HB7             'キャレットをスクロールさせて表示す
#define EM_SETREADONLY &HCF             'エディットコントロールの読み取り専用スタイルを設定する
#define EM_SETSEL &HB1                  'エディットコントロール内部のテキストを選択する
#define EM_UNDO &HC7                    'エディットコントロール内での直前の操作を取り消す

Var Shared Edit1 As Object
Var Shared Radio(3) As Object
Var Shared Check1 As Object
Var Shared Group(1) As Object
Var Shared Button(1) As Object

Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
For i = 0 To 3
    If i < 2 Then
        Group(i).Attach GetDlgItem("Group" & Trim$(Str$(i + 1))) : Group(i).SetFontSize 14
        Button(i).Attach GetDlgItem("Button" & Trim$(Str$(i + 1))) : Button(i).SetFontSize 14
    End If
    Radio(i).Attach GetDlgItem("Radio" & Trim$(Str$(i + 1))) : Radio(i).SetFontSize 14
Next
Check1.Attach GetDlgItem("Check1") : CHeck1.SetFontSize 14

Var Shared defstyle As Long

'================================================================
'=
'================================================================
Declare Function Index bdecl () As Integer
Function Index()
    Index = Val(Mid$(GetDlgRadioSelect("Radio1"), 6)) - 1
End Function

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
   defstyle = Api_GetWindowLong(Edit1.GethWnd, GWL_STYLE)
   ShowWindow -1
End Sub

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

    Ret = Api_SendMessage(Edit1.GethWnd, EM_UNDO, 0, ByVal 0)

    Edit1.SetFocus
End Sub

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

    Ret = Api_SendMessage(Edit1.GethWnd, EM_SCROLLCARET, 0, ByVal 0)
    Edit1.SetFocus
End Sub

'================================================================
'=
'================================================================
Declare Sub RadioSel()
Sub RadioSel()
    Var Ret As Long

    Ret = Api_SetWindowLong(Edit1.GethWnd, GWL_STYLE, defstyle)
   
    Select Case index
        Case 0    '通常
      
        Case 1    '数字のみ(ES_NUMBER)
            Ret = Api_SetWindowLong(Edit1.GethWnd, GWL_STYLE, defstyle Or ES_NUMBER)

        Case 2    '大文字(ES_UPPERCASE)
            Ret = Api_SetWindowLong(Edit1.GethWnd, GWL_STYLE, defstyle Or ES_UPPERCASE)
      
        Case 3    '小文字(ES_LOWERCASE)
            Ret = Api_SetWindowLong(Edit1.GethWnd, GWL_STYLE, defstyle Or ES_LOWERCASE)
    End Select
   
    Edit1.SetFocus
End Sub

'================================================================
'=
'================================================================
Declare Sub Check1_on edecl ()
Sub Check1_on()
    Var state As Long
    Var Ret As Long

    state = Check1.GetCheck
    Ret = Api_SendMessage(Edit1.GethWnd, EM_SETREADONLY, state, ByVal 0)
                                    
    Edit1.SetFocus
End Sub

'================================================================
'=
'================================================================
Declare Sub Radio1_on edecl ()
Sub Radio1_on()
    RadioSel
End Sub

'================================================================
'=
'================================================================
Declare Sub Radio2_on edecl ()
Sub Radio2_on()
    RadioSel
End Sub

'================================================================
'=
'================================================================
Declare Sub Radio3_on edecl ()
Sub Radio3_on()
    RadioSel
End Sub

'================================================================
'=
'================================================================
Declare Sub Radio4_on edecl ()
Sub Radio4_on()
    RadioSel
End Sub

'================================================================
'=
'================================================================
Declare Sub MainForm_QueryClose edecl ()
Sub MainForm_QueryClose()
    End
End Sub

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