カーソルを単語ごとに移動させる <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