ツールチップの作成(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 'ハイパーリンク付きの文字列を挿入するときに指定