[CTRL]+[矢印]キーで単語ごとにカーソル移動 <TOP>
InitCommonControlsEx
コモンコントロールのダイナミックリンクライブラリ(DLL)に含まれている、特定のコモンコントロールクラスを登録
CreateWindowEx ウィンドウ(コントロール)を作成
SendMessage ウィンドウにメッセージを送信
コードで作成したコンボボックスのEditに、"https://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 = "https://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 = "https://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