[CTRL]+[矢印]キーで単語ごとにカーソル移動          <TOP>


InitCommonControlsEx コモンコントロールのダイナミックリンクライブラリ(DLL)に含まれている、特定のコモンコントロールクラスを登録
CreateWindowEx ウィンドウ(コントロール)を作成
SendMessage ウィンドウにメッセージを送信
 

コードで作成したコンボボックスのEditに、"http://tokovalue.jp/"の文字を入れています。

起動直後、[CTRL]+[矢印]キーでカーソルは文字の最後まで移動しますが、 「実行」押下後は、スラッシュ、バックスラッシュ、ピリオドを区切り文字として[CTRL]+[矢印]キーで単語ごとにカーソル移動します。

 

'================================================================
'= [CTRL]+[矢印]キーで単語ごとにカーソル移動
'=    (InitCommonControlsEx.bas)
'================================================================
#include "Windows.bi"

Type INITCOMMONCONTROLSEX
    dwSize As Long
    dwICC  As Long
End Type

Type COMBOBOXEXITEM
    mask           As Long
    iItem          As Long
    pszText        As Long
    cchTextMax     As Long
    iImage         As Long
    iSelecteVarage As Long
    iOverlay       As Long
    iIndent        As Long
    lParam         As Long
End Type

#define WC_COMBOBOXEX "ComboBoxEx32"    '拡張コンボボックス
#define ICC_USEREX_CLASSES &H200        '拡張コンボボックス
#define WS_VISIBLE &H10000000           '可視状態のウィンドウを作成する
#define WS_CHILD &H40000000             '親ウィンドウを持つコントロール(子ウィンドウ)を作成する
#define CBS_DROPDOWN &H2                'CBS_SIMPLEで、リストはドロップダウンアイコンで表示する
#define WM_USER &H400                   'ユーザーが定義できるメッセージの使用領域を表すだけでこれ自体に意味はない
#define CBEM_SETEXTENDEDSTYLE &H40E     '(WM_USER + 14)
#define CBEM_INSERTITEM &H401           '(WM_USER + 1)
#define CB_SETCURSEL &H14E              'コンボボックスのリストボックス内の文字列を選択する
#define CBES_EX_PATHWORDBREAKPROC &H4   '
#define CBEIF_TEXT &H1                  '

' コモンコントロールのダイナミックリンクライブラリ(DLL)に含まれている、特定のコモンコントロールクラスを登録
Declare Function Api_InitCommonControlsEx& Lib "comctl32" Alias "InitCommonControlsEx" (lpInitCtrls As INITCOMMONCONTROLSEX)

' ウィンドウ(コントロール)を作成
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&, Param As Any)

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

Var Shared Button1 As Object

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

Var Shared hWindow As Long

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Var icc As INITCOMMONCONTROLSEX
    Var cbi As COMBOBOXEXITEM
    Var InitSuccess As Long
    Var WindowStyle As Long
    Var ItemIndex As Long
    Var ItemString As String
    Var Index As Long
    Var Ret As Long

    'コモンコントロールのクラスを指定
    icc.dwSize = Len(icc)
    icc.dwICC = ICC_USEREX_CLASSES

    'コモンコントロールのクラスを登録
    InitSuccess = Api_InitCommonControlsEx(icc)

    'コモンコントロールのクラスを登録できたとき
    If InitSuccess <> 0 Then
        'ウィンドウスタイルを設定
        WindowStyle = WS_CHILD Or WS_VISIBLE Or CBS_DROPDOWN

        'ウィンドウを作成
        hWindow = Api_CreateWindowEx(0, WC_COMBOBOXEX, "コンボボックスEx", WindowStyle, 10, 26, 216, 100, GethWnd, 0, GethInst, ByVal 0)
    End If

    'ComboboxExの末尾に項目追加する指定
    ItemIndex = (-1)

    '追加する文字列を指定
    ItemString = "http://tokovalue.jp/"

    '追加する項目情報を構造体に設定
    cbi.iItem = ItemIndex
    cbi.mask = CBEIF_TEXT
    cbi.pszText = StrAdr(ItemString)
    cbi.cchTextMax = Len(ItemString)

    'ComboboxExの初期値を設定
    Index = Api_SendMessage(hWindow, CBEM_INSERTITEM, 0, cbi)

    'ComboboxExの末尾に項目追加する指定
    ItemIndex = (-1)

    '追加する文字列を指定
    ItemString = "http://tokovalue.jp/"

    '追加する項目情報を構造体に設定
    cbi.iItem = ItemIndex
    cbi.mask = CBEIF_TEXT
    cbi.pszText = StrAdr(ItemString)
    cbi.cchTextMax = Len(ItemString)

    'ComboboxExインデックスを変更
    Ret = Api_SendMessage(hWindow, CB_SETCURSEL, Index, ByVal 0)
End Sub

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

    '単語ごとにカーソル移動する拡張スタイルを指定
    ExStyle = CBES_EX_PATHWORDBREAKPROC

    '拡張スタイルを設定
    Ret = Api_SendMessage(hWindow, CBEM_SETEXTENDEDSTYLE, 0, ByVal ExStyle)
End Sub

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