Вывести Tooltip на Screen (X,Y -известны) из кода. - VB
Формулировка задачи:
Срочно нужны специалисты по ToolTip.
Есть класс CTooltip.cls
Позаимствованный когда-то с этого форума (приложу его на всякий случай).
Мне надо (из кода, без елозанья мышкой по объекту) сходу вывести ToolTip на объект Screen.
Будем считать что координаты (X, Y) куда примерно надо выводить известны.
напр. реальные значения в районе трея (1136,1004); (1140,999).
Если я например делаю так (тест задача - чтоб он
Я ожидал
нажали на Command2 -сразу где-то над Text1 появился Tooltip
На деле выходит:
нажали на Command2 -фига
А на Screen вообще не знаю как.
Т.е. первая задача:
В приложенном классе ф-ция Create имеет вид:
Данная задача является подзадачей
Shell_NotifyIcon + Ballon(?) Tooltip
Прошу помочь.
C Tooltip до сих пор довольствовался приложенным классом и мне этого хватало.
К сожалению тему Tooltip сильно не копал.
Есть класс CTooltip.cls
Позаимствованный когда-то с этого форума (приложу его на всякий случай).
Мне надо (из кода, без елозанья мышкой по объекту) сходу вывести ToolTip на объект Screen.
Будем считать что координаты (X, Y) куда примерно надо выводить известны.
напр. реальные значения в районе трея (1136,1004); (1140,999).
Если я например делаю так (тест задача - чтоб он
сразу
появился над Text1)Я ожидал
нажали на Command2 -сразу где-то над Text1 появился Tooltip
На деле выходит:
нажали на Command2 -фига
потом
поелозили по Text1 -он появился (в месте где елозили)А на Screen вообще не знаю как.
Т.е. первая задача:
Как из кода сразу вывести Tooltip (пусть пока любой) на Screen (ну пусть пока в любое место)?
В приложенном классе ф-ция Create имеет вид:
Данная задача является подзадачей
Shell_NotifyIcon + Ballon(?) Tooltip
Прошу помочь.
C Tooltip до сих пор довольствовался приложенным классом и мне этого хватало.
К сожалению тему Tooltip сильно не копал.
Решение задачи: «Вывести Tooltip на Screen (X,Y -известны) из кода.»
textual
Листинг программы
Attribute VB_Name = "Module1"
Option Explicit
'Initialization of New ClassNames
Public Const ICC_BAR_CLASSES = &H4 'toolbar, statusbar, trackbar, tooltips
Private Declare Sub InitCommonControls Lib "comctl32.dll" ()
Private Declare Function InitCommonControlsEx Lib "comctl32.dll" (lpInitCtrls As tagINITCOMMONCONTROLSEX) As Boolean
Type tagINITCOMMONCONTROLSEX
dwSize As Long ' size of this structure
dwICC As Long ' flags indicating which classes to be initialized.
End Type
' ToolTip Styles
Public Const TTS_ALWAYSTIP = &H1
Public Const TTS_NOPREFIX = &H2
Public Const TTS_BALLOON = &H40 ' comctl32.dll v5.8 require
Public Const CW_USEDEFAULT = &H80000000
Public Const WS_POPUP = &H80000000
Public Const WM_USER = &H400
' ToolTip Messages
Public Const TTM_SETDELAYTIME = (WM_USER + 3)
Public Const TTM_ADDTOOL = (WM_USER + 4)
Public Const TTM_SETTIPBKCOLOR = (WM_USER + 19)
Public Const TTM_SETTIPTEXTCOLOR = (WM_USER + 20)
Public Const TTM_SETMAXTIPWIDTH = (WM_USER + 24)
Public Const TTDT_AUTOPOP = 2
Public Const TTDT_INITIAL = 3
Public Const TTF_IDISHWND = &H1
Public Const TTF_CENTERTIP = &H2
Public Const TTF_SUBCLASS = &H10
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Type TOOLINFO
cbSize As Long
uFlags As Long
hwnd As Long
uId As Long
cRect As RECT
hinst As Long
lpszText As String
End Type
Public Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
Public Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public bCreated As Boolean, hTT As Long
Public hCreated() As Long
Public Sub CreateTTWindow(hParent As Long, Optional bBalloon As Boolean = False)
Dim h As Long, lStyle As Long
lStyle = TTS_NOPREFIX Or TTS_ALWAYSTIP
If bBalloon Then lStyle = lStyle Or TTS_BALLOON
hTT = CreateWindowEx(0, "tooltips_class32", 0, lStyle, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hParent, 0, App.hInstance, 0)
If Not bCreated Then
ReDim hCreated(0)
bCreated = True
Else
ReDim Preserve hCreated(UBound(hCreated) + 1)
End If
hCreated(UBound(hCreated)) = hTT
End Sub
Public Sub SetToolTip(objTT As Object, sTipText As String, _
Optional BkColor As Long = &HEEFFFF, _
Optional TxtColor As Long = vbBlack, _
Optional MaxWidth As Long = 300, _
Optional DelayTime As Long = 500, _
Optional VisibleTime As Long = 2000, _
Optional bCenter As Boolean = False)
Dim TI As TOOLINFO
With TI
GetClientRect objTT.hwnd, .cRect
.hwnd = objTT.hwnd
.uFlags = TTF_IDISHWND Or TTF_SUBCLASS
If bCenter Then
.uFlags = .uFlags Or TTF_CENTERTIP
End If
.uId = objTT.hwnd
.lpszText = sTipText
.cbSize = Len(TI)
End With
SendMessageLong hTT, TTM_SETMAXTIPWIDTH, 0, MaxWidth
SendMessageLong hTT, TTM_SETDELAYTIME, TTDT_INITIAL, DelayTime
SendMessageLong hTT, TTM_SETDELAYTIME, TTDT_AUTOPOP, VisibleTime
SendMessageLong hTT, TTM_SETTIPTEXTCOLOR, TxtColor, 0&
SendMessageLong hTT, TTM_SETTIPBKCOLOR, BkColor, 0&
SendMessage hTT, TTM_ADDTOOL, 0, TI
End Sub
Public Sub DestroyTT()
If Not bCreated Then Exit Sub
Dim i As Integer
For i = 0 To UBound(hCreated)
DestroyWindow hCreated(i)
Next
End Sub
Public Function InitComctl32(dwFlags As Long) As Boolean
Dim icc As tagINITCOMMONCONTROLSEX
On Error GoTo Err_OldVersion
icc.dwSize = Len(icc)
icc.dwICC = dwFlags
InitComctl32 = InitCommonControlsEx(icc)
On Error GoTo 0
Exit Function
Err_OldVersion:
InitCommonControls
End Function
Private Sub Form_Load()
'Создаем всплывающие подсказки
InitComctl32 ICC_BAR_CLASSES
'Якобы говорим
CreateTTWindow hwnd, True
SetToolTip Text2, "Не преключая регистра" & vbCrLf & "начинайте печатать. По русски?", vbBlue, vbWhite, 400
'Просто подсказка
CreateTTWindow hwnd, False
SetToolTip Text1, "Не преключая регистра" & vbCrLf & "начинайте печатать. По английски?", , , 100, , , True
SetToolTip Command1, "Выход собственно...", , , 300, , , True
End Sub
Private Sub Form_Unload(Cancel As Integer)
DestroyTT
End Sub