カーソルを単語ごとに移動させる             <TOP>


拡張コンボボックスをコードで作成、URLを表示させ[Ctrl]+[→]でカーソルを単語ごとに移動させます。

GetSysColor システムのCOLOR取得

CreateWindowEX 新しいウインドウ(コントロール)を作成

DestroyWindow ウインドウ(コントロール)の解放

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

 

 

'================================================================
'= カーソルを単語ごとに移動させる
'=    (CreateWindow.bas)
'================================================================
#include "Windows.bi"

' システムの背景色を取得
Declare Function Api_GetSysColor& Lib "user32" Alias "GetSysColor" (ByVal nIndex&)

#define COLOR_BTNFACE 15                '3Dオブジェクトの表面色

Type tagINITCOMMONCONTROLSEX
    dwSize As Long
    dwICC  As Long
End Type

Type tagCOMBOBOXEXITEM
    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

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

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

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

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

#define CB_SETCURSEL &H14E              'コンボボックスのリストボックス内の文字列を選択する
#define CBEIF_TEXT &H1                  '
#define CBEM_INSERTITEM &H401           '
#define CBEM_SETEXTENDEDSTYLE &H40E     '
#define CBES_EX_PATHWORDBREAKPROC &H4   '単語ごとにカーソル移動する拡張スタイルを指定
#define CBS_DROPDOWN &H2                'CBS_SIMPLEで、リストはドロップダウンアイコンで表示する
#define CBS_SIMPLE &H1                  '単純なコンボボックス。リストは常にドロップダウンされている
#define ICC_USEREX_CLASSES &H200        '拡張コンボボックス
#define WC_COMBOBOXEX "ComboBoxEx32"    '拡張コンボボックス
#define WS_CHILD &H40000000             '親ウインドウを持つコントロール(子ウインドウ)を作成する
#define WS_VISIBLE &H10000000           '可視状態のウィンドウを作成する

Var Shared Button1 As Object

Button1.Attach GetDlgItem("Button1")

Var Shared hComboEx As Long

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Var rgbColor As Long
    Var icce As tagINITCOMMONCONTROLSEX
    Var cei As tagCOMBOBOXEXITEM
    Var ccis As Long
    Var WinStyle As Long
    Var InsItemIdx As Long
    Var InsItemStr As String
    Var InsIndex As Long

    'Buttonの表面色を取得(EDE9EC)
    rgbColor = Api_GetSysColor(COLOR_BTNFACE)

    'MainFormを取得色で塗り
    SetBackColor rgbColor

    '画面を消去し
    Cls

    'MainFormを表示
    ShowWindow -1

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

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

    If ccis <> 0 Then
        'コンボボックス作成
        hComboEx = Api_CreateWindowEx(0, WC_COMBOBOXEX, "コンボボックスEx", WS_CHILD Or WS_VISIBLE Or CBS_DROPDOWN, 5, 20, 225, 100, GethWnd, 0, 0, 0)
    End If

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

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

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

    'ComboboxExの初期値を設定
    InsIndex = Api_SendMessage(hComboEx, CBEM_INSERTITEM, 0, cei)

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

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

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

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

'================================================================
'= [Ctrl] + →
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
	 Var ExStyles As Long
    Var Ret As Long

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

    Ret = Api_SendMessage(hComboEx, CBEM_SETEXTENDEDSTYLE, 0, ByVal ExStyle)
End Sub

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

    Ret = Api_DestroyWindow(hComboEx)
End Sub

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