powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вывести Tooltip на Screen (X,Y -известны) из кода.
2 сообщений из 2, страница 1 из 1
Вывести Tooltip на Screen (X,Y -известны) из кода.
    #38268631
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Срочно нужны специалисты по ToolTip.
Есть класс CTooltip.cls
Позаимствованный когда-то с этого форума (приложу его на всякий случай).
Мне надо (из кода, без елозанья мышкой по объекту) сходу вывести ToolTip на объект Screen.
Будем считать что координаты (X, Y) куда примерно надо выводить известны.
напр. реальные значения в районе трея (1136,1004); (1140,999).

Если я например делаю так (тест задача - чтоб он сразу появился над Text1)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Sub Command2_Click()
    TT.Destroy
    TT.Style = TTBalloon
    TT.Title = "Large title Text"
    TT.TipText = "Small tooltip text"
    TT.Create Form1.Text1.hwnd
End Sub



Я ожидал
нажали на Command2 -сразу где-то над Text1 появился Tooltip

На деле выходит:
нажали на Command2 -фига
потом поелозили по Text1 -он появился (в месте где елозили)

А на Screen вообще не знаю как.

Т.е. первая задача:
Как из кода сразу вывести Tooltip (пусть пока любой) на Screen (ну пусть пока в любое место)?

В приложенном классе ф-ция Create имеет вид:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
Public Function Create(ByVal ParentHwnd As Long) As Boolean
   Dim lWinStyle As Long
   
   If m_lTTHwnd <> 0 Then
      DestroyWindow m_lTTHwnd
   End If
   
   m_lParentHwnd = ParentHwnd
   
   lWinStyle = TTS_ALWAYSTIP Or TTS_NOPREFIX
   
   ''create baloon style if desired
   If mvarStyle = TTBalloon Then lWinStyle = lWinStyle Or TTS_BALLOON
    
   m_lTTHwnd = CreateWindowEx(0&, _
      TOOLTIPS_CLASSA, _
      vbNullString, _
      lWinStyle, _
      CW_USEDEFAULT, _
      CW_USEDEFAULT, _
      CW_USEDEFAULT, _
      CW_USEDEFAULT, _
      0&, _
      0&, _
      App.hInstance, _
      0&)
               
   ''now set our tooltip info structure
   With ti
      ''if we want it centered, then set that flag
      If mvarCentered Then
         .lFlags = TTF_SUBCLASS Or TTF_CENTERTIP Or TTF_IDISHWND
      Else
         .lFlags = TTF_SUBCLASS Or TTF_IDISHWND
      End If
       
      ''set the hwnd prop to our parent control's hwnd
      .hwnd = m_lParentHwnd
      .lId = m_lParentHwnd '0
      .hInstance = App.hInstance
      '.lpstr = ALREADY SET
      '.lpRect = lpRect
      .lSize = Len(ti)
   End With
   
   ''add the tooltip structure
   SendMessage m_lTTHwnd, TTM_ADDTOOLA, 0&, ti

   ''if we want a title or we want an icon
   If mvarTitle <> vbNullString Or mvarIcon <> TTNoIcon Then
      SendMessage m_lTTHwnd, TTM_SETTITLE, CLng(mvarIcon), ByVal mvarTitle
   End If

   If mvarForeColor <> Empty Then
      SendMessage m_lTTHwnd, TTM_SETTIPTEXTCOLOR, mvarForeColor, 0&
   End If

   If mvarBackColor <> Empty Then
      SendMessage m_lTTHwnd, TTM_SETTIPBKCOLOR, mvarBackColor, 0&
   End If
   
   SendMessageLong m_lTTHwnd, TTM_SETDELAYTIME, TTDT_AUTOPOP, mvarVisibleTime
   SendMessageLong m_lTTHwnd, TTM_SETDELAYTIME, TTDT_INITIAL, mvarDelayTime
End Function



Данная задача является подзадачей
Shell_NotifyIcon + Ballon(?) Tooltip

Прошу помочь.
C Tooltip до сих пор довольствовался приложенным классом и мне этого хватало.
К сожалению тему Tooltip сильно не копал.
...
Рейтинг: 0 / 0
Вывести Tooltip на Screen (X,Y -известны) из кода.
    #38269226
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот код выглядит так, как будто может помочь. Не помню, как он себя ведет.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
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

Дмитрий77 ну пусть пока в любое местоЗадать в RECT координаты?
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вывести Tooltip на Screen (X,Y -известны) из кода.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]