カーソル(キャレット)をBitmapで <TOP>
ビットマップファイルをキャレットとして使用します。
CreateCaret 独自のキャレットを作成
GetCaretBlinkTime キャレットのブリンク時間を取得
SetCaretBlinkTime キャレットのブリンクタイムを設定
ShowCaret キャレットを表示する
LoadImage 画像ファイルを読み込む
例では、フォントサイズを14P、16P、18PとしたEditBoxにそれぞれのフォントサイズに合わせた鉛筆(のつもり・・)のBitmapを用意しキャレットとして使用しています。
参照
'================================================================ '= カーソル(キャレット)をBitmapで
'= (CreateCaret3.bas) '================================================================ #include "Windows.bi" ' 独自のキャレットを作成する Declare Function Api_CreateCaret& Lib "user32" Alias "CreateCaret" (ByVal hWnd&, ByVal hBitmap&, ByVal nWidth&, ByVal nHeight&) ' キャレットのブリンク時間を取得する Declare Function Api_GetCaretBlinkTime& Lib "user32" Alias "GetCaretBlinkTime" () ' キャレットの点滅時間を設定 Declare Function Api_SetCaretBlinkTime& Lib "user32" Alias "SetCaretBlinkTime" (ByVal wMSeconds&) ' キャレットを表示する Declare Function Api_ShowCaret& Lib "user32" Alias "ShowCaret" (ByVal hWnd&) ' 画像ファイルの読み込み Declare Function Api_LoadImage& Lib "user32" Alias "LoadImageA" (ByVal hInst&, ByVal lpszName$, ByVal uType&, ByVal cxDesired&, ByVal cyDesired&, ByVal fuLoad&) #define LR_LOADFROMFILE &H10 '外部ファイルからロードする #define IMAGE_BITMAP 0 'ビットマップ Var Shared OldBlinkTime As Long Var Shared hBitmap As Long Var Shared Ret As Long Var Shared Edit1 As Object Var Shared Edit2 As Object Var Shared Edit3 As Object Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14 Edit2.Attach GetDlgItem("Edit2") : Edit2.SetFontSize 16 Edit3.Attach GetDlgItem("Edit3") : Edit3.SetFontSize 18 '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() OldBlinkTime = Api_GetCaretBlinkTime Ret = Api_SetCaretBlinkTime(400) hBitmap = Api_LoadImage(GethInst, "Pen14.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE) txt$ = "フォントサイズ(14*14)に合わせ、色を反転したBitmapを作成しキャレットとして使用しています!" Edit1.SetWindowText txt$ Edit1.SetSelText Len(txt$), Len(txt$) Edit1.SetFocus End Sub '================================================================ '= '================================================================ Declare Sub Edit1_SetFocus edecl () Sub Edit1_SetFocus() hBitmap = Api_LoadImage(GethInst, "Pen14.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE) txt$ = "フォントサイズ(14P)に合わせ、色を反転したBitmapを作成しキャレットとして使用しています!" Edit1.SetWindowText txt$ Edit1.SetSelText Len(txt$), Len(txt$) Edit1.SetFocus Ret = Api_CreateCaret(Edit1.GethWnd, hBitmap, 0, 0) Ret = Api_ShowCaret(Edit1.GethWnd) End Sub '================================================================ '= '================================================================ Declare Sub Edit2_SetFocus edecl () Sub Edit2_SetFocus() hBitmap = Api_LoadImage(GethInst, "Pen16.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE) txt$ = "フォントサイズ(16P)に合わせ、色を反転したBitmapを作成しキャレットとして使用しています!" Edit2.SetWindowText txt$ Edit2.SetSelText Len(txt$), Len(txt$) Edit2.SetFocus Ret = Api_CreateCaret(Edit2.GethWnd, hBitmap, 0, 0) Ret = Api_ShowCaret(Edit2.GethWnd) End Sub '================================================================ '= '================================================================ Declare Sub Edit3_SetFocus edecl () Sub Edit3_SetFocus() hBitmap = Api_LoadImage(GethInst, "Pen18.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE) txt$ = "フォントサイズ(18P)に合わせ、色を反転したBitmapを作成しキャレットとして使用しています!" Edit3.SetWindowText txt$ Edit3.SetSelText Len(txt$), Len(txt$) Edit3.SetFocus Ret = Api_CreateCaret(Edit3.GethWnd, hBitmap, 0, 0) Ret = Api_ShowCaret(Edit3.GethWnd) End Sub '================================================================ '= '================================================================ Declare Sub MainForm_QueryClose edecl () Sub MainForm_QueryClose() Ret = Api_SetCaretBlinkTime(OldBlinkTime) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End