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


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

 

'================================================================
'= ツールチップの作成(T)
'=    (ToolTip.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
    cRect    As RECT
    hinst    As Long
    lpszText 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&, Param As Any)

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

' コモンコントロールのダイナミックリンクライブラリ(DLL)に含まれている、特定のコモンコントロールクラスを登録
Declare Sub Api_InitCommonControls Lib "comctl32" Alias "InitCommonControls" ()

' ウィンドウにメッセージを送信
Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any)

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

#define WM_USER &H400                   'ユーザーが定義できるメッセージの使用領域を表すだけでこれ自体に意味はない
#define TTM_ADDTOOL (&H400 + 4)         'ツールチップをツールに登録
#define TTM_SETMAXTIPWIDTH (&H400 + 24) 'ツールチップの最大幅
#define TTF_CENTERTIP &H2               'チップをツールの中心に表示
#define TTF_IDISHWND &H1                'uIdメンバは、ツールのウィンドウハンドル
#define TTF_RTLREADING &H4              'テキストを右から左に表示(ヘブライ語、またはアラビア語)
#define TTF_SUBCLASS &H10               'ツールをサブクラス化してメッセージを取得
#define HWND_TOPMOST (-1)               'ウィンドウを常に最前面に配置
#define SWP_NOMOVE &H2                  'ウィンドウの現在位置を保持する
#define SWP_NOSIZE &H1                  'ウィンドウの現在のサイズを保持する
#define SWP_NOACTIVATE &H10             'ウィンドウをアクティブにしない

Var Shared MainForm As Object
Var Shared Edit1 As Object
Var Shared Button1 As Object
Var Shared Button2 As Object

MainForm.Attach GethWnd
Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14
Button2.Attach GetDlgItem("Button2") : Button2.SetFontSize 14

Var Shared hToolTip As Long

'================================================================
'=
'================================================================
Declare Sub SetMultiLineToolTip(ByVal hwnd As Long, sToolTip As String)
Sub SetMultiLineToolTip(ByVal hwnd As Long, sToolTip As String)
    Var ti As TOOLINFO
  
    ti.cbSize = Len(ti)
    ti.hwnd = hWnd
    ti.uFlags = TTF_IDISHWND Or TTF_SUBCLASS
    ti.uId = hWnd
    ti.hinst = GethInst
    ti.lpszText = StrAdr(sToolTip & Chr$(0))

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

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Var Ret As Long

    Api_InitCommonControls

    hToolTip = Api_CreateWindowEx(0, "tooltips_class32", "", 0, 0, 0, 0, 0, 0, 0, 0, 0)

    Ret = Api_SendMessage(hToolTip, TTM_SETMAXTIPWIDTH, 0, 300)
  
    SetMultiLineToolTip Button1.GethWnd, "このボタンクリックで" & Chr$(13, 10) & "エディットにTooltip表示"
    SetMultiLineToolTip Button2.GethWnd, "このボタン" & Chr$(13, 10) & "クリックで" & Chr$(13, 10) & "プログラム終了"
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    SetMultiLineToolTip Edit1.GethWnd, Edit1.GetWindowText
End Sub

'================================================================
'=
'================================================================
Declare Sub Button2_on edecl ()
Sub Button2_on()
    Var Ret As Long

    Ret = Api_DestroyWindow(hToolTip)
    End
End Sub

'================================================================
'=
'================================================================
Declare Sub MainForm_QueryClose edecl ()
Sub mainForm_QueryClose()
    Var Ret As Long

    Ret = Api_DestroyWindow(hToolTip)
End Sub

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