ツールチップの作成(U)          <TOP>


CreateWindowEx ウィンドウ(コントロール)を作成
DestroyWindow CreateWindowExの解放
InitCommonControls コモンコントロールのダイナミックリンクライブラリ(DLL)に含まれている、特定のコモンコントロールクラスを登録
SendMessage ウィンドウにメッセージを送信
SetWindowPos ウィンドウのサイズ、位置、および Z オーダーを設定
 

 

'================================================================
'= ツールチップの作成(U)
'=    (ToolTip2.bas)
'================================================================
#include "Windows.bi"

Type RECT
    Left   As Long
    Top    As Long
    Right  As Long
    Bottom As Long
End Type

Type TOOLINFO
    cbSize   As Long
    uFlags   As Long
    hwnd     As Long
    uId      As Long
    rc       As RECT
    hInst    As Long
    lpszText As Long
    lParam   As Long
End Type

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

' ウィンドウのサイズ、位置、および Z オーダーを設定
Declare Function Api_SetWindowPos& Lib "user32" Alias "SetWindowPos" (ByVal hWnd&, ByVal hWndInsertAfter&, ByVal X&, ByVal Y&, ByVal CX&, ByVal CY&, ByVal uFlags&)

' ウィンドウにメッセージを送信。この関数は、指定したウィンドウのウィンドウプロシージャが処理を終了するまで制御を返さない
Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any)

' ウィンドウのクライアント領域の座標を取得
Declare Function Api_GetClientRect& Lib "user32" Alias "GetClientRect" (ByVal hWnd&, lpRect As RECT)

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

#define TOOLTIPS_CLASSA "tooltips_class32"
#define TTF_IDISHWND &H1                'uIdメンバは、ツールのウィンドウハンドル
#define TTF_CENTERTIP &H2               'チップをツールの中心に表示
#define TTF_SUBCLASS &H10               'ツールをサブクラス化してメッセージを取得
#define TTM_ADDTOOL &H404               '(WM_USER+4)ツールの追加登録
#define TTS_BALLOON &H40                'バルーンチップを作る

Var Shared hWnd As Long
Var Shared flag As Integer

Var Shared Button1 As Object
Var Shared Check1 As Object

Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14
Check1.Attach GetDlgItem("Check1") : Check1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub ToolTip ()
Sub ToolTip()
    Var ti As TOOLINFO
    Var Ret As Long

    ti.cbSize = Len(ti)
    flag = Check1.GetCheck
    If flag = 0 Then
        ti.uFlags = TTF_IDISHWND Or TTF_SUBCLASS
    Else
        ti.uFlags = TTF_IDISHWND Or TTF_SUBCLASS Or TTF_CENTERTIP
    End If
    ti.hwnd = GethWnd
    ti.hinst = GethInst
    ti.uid = Button1.GethWnd
    ti.lpszText = StrAdr("APIで作成したToolTip" & Chr$(0))

    hWnd = Api_CreateWindowEx(0, TOOLTIPS_CLASSA, "", TTS_BALLOON, 0, 0, 0, 0, 0, 0, 0, 0)

    Ret = Api_SendMessage(hWnd, TTM_ADDTOOL, 0, ti)
End Sub

'================================================================
'=
'================================================================
Declare Sub DestroyTP ()
Sub DestroyTP()
    Var Ret As Long

    Ret = Api_DestroyWindow(hWnd)
End Sub

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    ToolTip
End Sub

'================================================================
'=
'================================================================
Declare Sub Check1_on edecl ()
Sub Check1_on()
    DestroyTP
    ToolTip
End Sub

'================================================================
'=
'================================================================
Declare Sub MainForm_QueryClose edecl ()
Sub MainForm_QueryClose()
    DestroyTP
End Sub

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

参考
#define TTDT_AUTOMATIC 0          '遅延時間の割合をデフォルトに戻す
#define TTDT_AUTOPOP 2            'ツールチップコントロールの表示時間
#define TTDT_INITIAL 3            'カーソルを置いてから表示されるまでの時間を指定
#define TTDT_RESHOW 1             '

#define TTF_ABSOLUTE &H80         '
#define TTF_CENTERTIP &H2         'チップをツールの中心に表示
#define TTF_DI_SETITEM &H8000     '
#define TTF_IDISHWND &H1          'uIdメンバは、ツールのウィンドウハンドル
#define TTF_RTLREADING &H4        'テキストを右から左に表示(ヘブライ語、またはアラビア語)
#define TTF_SUBCLASS &H10         'ツールをサブクラス化してメッセージを取得
#define TTF_TRACK &H20            '
#define TTF_TRANSPARENT &H100     '

#define TTM_ACTIVATE &H401        '(WM_USER+1)アクティブ・インアクティブの切り替え
#define TTM_ADDTOOL &H404         '(WM_USER+4)ツールの追加登録
#define TTM_ADJUSTRECT &H431      '(WM_USER+31)
#define TTM_DELTOOLA &H405        '(WM_USER+5)ツールの登録削除
#define TTM_DELTOOLW &H458        '(WM_USER+51)ツールの登録削除
#define TTM_ENUMTOOLSA &H401      '(WM_USER+14)登録ツール情報の取得(列挙)
#define TTM_ENUMTOOLSW &H458      '(WM_USER+58)登録ツール情報の取得(列挙)
#define TTM_GETBUBBLESIZE &H430   '(WM_USER+30)
#define TTM_GETCURRENTTOOLA &H415 '(WM_USER+15)「現在のツール」の情報取得
#define TTM_GETCURRENTTOOLW &H459 '(WM_USER+59)「現在のツール」の情報取得
#define TTM_GETDELAYTIME &H421    '(WM_USER+21)遅延時間の取得
#define TTM_GETMARGIN &H427       '(WM_USER+27)マージンの取得
#define TTM_GETMAXTIPWIDTH &H425  '(WM_USER+25)チップウィンドウの最大幅の取得
#define TTM_GETTEXT &H411         '(WM_USER+11)登録テキストの取得
#define TTM_GETTIPTEXTCOLOR &H423 '(WM_USER+23)テキスト色の取得
#define TTM_GETTOOLCOUNT &H413    '(WM_USER+13)登録ツールの数を取得
#define TTM_GETTOOLINFO &H408     '(WM_USER+8)登録ツール情報の取得
#define TTM_NEWTOOLRECT &H406     '(WM_USER+6)ツール範囲の再設定
#define TTM_POP &H428             '(WM_USER+28)強制消去
#define TTM_RELAYEVENT &H407      '(WM_USER+7)マウスメッセージを中継
#define TTM_SETDELAYTIME &H403    '(WM_USER+3)遅延時間の設定
#define TTM_SETMARGIN &H426       '(WM_USER+26)マージンの設定
#define TTM_SETMAXTIPWIDTH &H424  '(WM_USER+24)チップウィンドウの最大幅の設定
#define TTM_SETTIPBKCOLOR &H419   '(WM_USER+19)背景色の設定
#define TTM_SETTIPTEXTCOLOR &H420 '(WM_USER+20)テキスト色の設定
#define TTM_SETTOOLINFO &H409     '(WM_USER+9)登録ツールの情報を再設定
#define TTM_UPDATE &H429          '(WM_USER+29)強制再描画
#define TTM_UPDATETIPTEXT &H412   '(WM_USER+12)登録テキストの再設定
#define TTM_WINDOWFROMPOINT &H416 '(WM_USER+16)

#define TTS_ALWAYSTIP 1           'ツールチップコントロールの親ウィンドウが非アクティブでも常に表示される
#define TTS_BALLOON &H40          'バルーンチップを作る
#define TTS_CLOSE &H80            'タイトルをツールチップに付けたときに右上に×ボタンが表示
#define TTS_NOANIMATE &H10        'アニメーション表示をしない
#define TTS_NOFADE &H20           '消えるときフェードアウトしない
#define TTS_NOPREFIX 2            '文字列にアンパサント(&)が入っていると、普通これを無視しますが、このスタイルを指定すると表示
#define TTS_USEVISUALSTYLE &H100  'ハイパーリンク付きの文字列を挿入するときに指定