カーソル(キャレット)を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