powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Tooltip
12 сообщений из 12, страница 1 из 1
Tooltip
    #39925001
Cytrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет.

Что это за API-функция?
Как такое сделать на C#?
В AutoIt эта функция называется ToolTip.

Скриншот.
...
Рейтинг: 0 / 0
Tooltip
    #39925007
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Tooltip
    #39925012
Cytrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропил , мне надо такое всплывающее окошко, как показанно на моём скрине.

Без форм.
А вы ссылаетесь на тему, в которой описывается работа с подсказками для элементов форм .

Мне же надо всплывающее сообщение, которое вызывается абсолютно без каких-либо форм.
В любом заданном месте экрана. По любым заданным координатам.
...
Рейтинг: 0 / 0
Tooltip
    #39925024
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cytrus
Без форм.


Нет вам нужны формы.
Сорян.

Если вам AutoIt нарисует слона, вы скажете, вам слона нужно?
Или ещё чего по-интереснее.

https://docs.microsoft.com/ru-ru/dotnet/framework/winforms/advanced/how-to-create-a-shaped-windows-form
...
Рейтинг: 0 / 0
Tooltip
    #39925027
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Tooltip
    #39925032
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cytrus
Что это за API-функция?
Как такое сделать на C#?
... называется ToolTip.
Скриншот.


С C#-синтаксисом не помогу.
На картинке у тебя судя по всему TTS_BALLOON,
а в качестве parent - рабочий стол hwnd=intptr.zero=0 должно прокатить
Через API tooltip делается так:

Код: 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.
Imports System.Runtime.InteropServices

Public Class cTooltip

  'local variable(s) to hold property value(s)
  Private mvarTipText As String
  Private mvarVisibleTime As Integer
  Private mvarDelayTime As Integer

  'private data
  Private m_lTTHwnd As IntPtr ' hwnd of the tooltip
  Private m_lParentHwnd As IntPtr ' hwnd of the window the tooltip attached to
  Private ti As TOOLINFO

  Public Sub New()
    mvarDelayTime = 500
    mvarVisibleTime = 5000
  End Sub

  Protected Overrides Sub Finalize()
    Destroy()
  End Sub

  Public Sub Create(ByVal ParentHwnd As IntPtr)

    If m_lTTHwnd <> IntPtr.Zero Then DestroyWindow(m_lTTHwnd)

    m_lParentHwnd = ParentHwnd

    Dim lWinStyle As Integer = TTS_ALWAYSTIP Or TTS_NOPREFIX

    m_lTTHwnd = CreateWindowEx(0, _
     TOOLTIPS_CLASSW, _
     vbNullString, _
     lWinStyle, _
     CW_USEDEFAULT, _
     CW_USEDEFAULT, _
     CW_USEDEFAULT, _
     CW_USEDEFAULT, _
     0, _
     0, _
     System.Runtime.InteropServices.Marshal.GetHINSTANCE _
      (System.Reflection.Assembly.GetExecutingAssembly.GetModules()(0)), _
     Nothing)

    'now set our tooltip info structure
    With ti
      .uFlags = TTF_SUBCLASS Or TTF_IDISHWND

      'set the hwnd prop to our parent control's hwnd
      .hwnd = m_lParentHwnd
      .lId = m_lParentHwnd
      .hinst = System.Runtime.InteropServices.Marshal.GetHINSTANCE _
       (System.Reflection.Assembly.GetExecutingAssembly.GetModules()(0))
      '.lpszText = ALREADY SET
      '.rect = lpRect
      .cbSize = Marshal.SizeOf(ti)
    End With

    'add the tooltip structure
    SendMessage_TOOLINFO(m_lTTHwnd, TTM_ADDTOOL, 0, ti)

    SendMessage(m_lTTHwnd, TTM_SETDELAYTIME, TTDT_AUTOPOP, mvarVisibleTime)
    SendMessage(m_lTTHwnd, TTM_SETDELAYTIME, TTDT_INITIAL, mvarDelayTime)
  End Sub

  Public Sub Destroy()
    If m_lTTHwnd <> IntPtr.Zero Then
      DestroyWindow(m_lTTHwnd)
    End If
  End Sub

  Public Property TipText() As String
    Set(ByVal vData As String)
      mvarTipText = vData
      ti.lpszText = vData
      If m_lTTHwnd <> IntPtr.Zero Then
        SendMessage_TOOLINFO(m_lTTHwnd, TTM_UPDATETIPTEXT, 0, ti)
      End If
    End Set
    Get
      Return mvarTipText
    End Get
  End Property

  Public Property VisibleTime() As Integer
    Set(ByVal lData As Integer)
      mvarVisibleTime = lData
    End Set
    Get
      Return mvarVisibleTime
    End Get
  End Property

  Public Property DelayTime() As Integer
    Set(ByVal lData As Integer)
      mvarDelayTime = lData
    End Set
    Get
      Return mvarDelayTime
    End Get
  End Property

End Class


Код: 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.
Imports System.Runtime.InteropServices

Module m_Tooltip

  Public Const TOOLTIPS_CLASSW = "tooltips_class32"

  'Tooltip Structures

  'Custom Draw
  <StructLayout(LayoutKind.Sequential)>
  Public Structure NMTTCUSTOMDRAW

    ' NMCUSTOMDRAW structure that contains general Custom Draw information.
    Dim nmcd As NMCUSTOMDRAW

    ' UINT value specifying how ToolTip text will be formatted when it is displayed.
    ' This value is passed to the DrawText function internally. All values for the
    ' uFormat parameter of DrawText are valid.
    Dim uDrawFlags As Integer

  End Structure

  'uFlags Flags that control the tooltip display
  Public Const TTF_IDISHWND = &H1
  Public Const TTF_CENTERTIP = &H2
  Public Const TTF_SUBCLASS = &H10
  Public Const TTF_TRACK = &H20
  Public Const TTF_ABSOLUTE = &H80
  Public Const TTF_TRANSPARENT = &H100

  <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
  Public Structure TOOLINFO
    Dim cbSize As Integer
    Dim uFlags As Integer
    Dim hwnd As IntPtr
    Dim lId As IntPtr
    Dim rect As RECT
    Dim hinst As IntPtr
    Dim lpszText As String
    Dim lParam As Integer
  End Structure

  'TTM_SETDELAYTIME wParam
  Public Const TTDT_AUTOPOP = 2
  Public Const TTDT_INITIAL = 3

  'Tooltip Control Messages
  Private Const WM_USER = &H400
  Public Const TTM_SETDELAYTIME = (WM_USER + 3)
  Public Const TTM_ADDTOOLA = (WM_USER + 4)
  Public Const TTM_ADDTOOLW = (WM_USER + 50)
  Public Const TTM_ADDTOOL = TTM_ADDTOOLW
  Public Const TTM_UPDATETIPTEXTA = (WM_USER + 12)
  Public Const TTM_UPDATETIPTEXTW = (WM_USER + 57)
  Public Const TTM_UPDATETIPTEXT = TTM_UPDATETIPTEXTW
  Public Const TTM_TRACKACTIVATE = WM_USER + 17
  Public Const TTM_TRACKPOSITION = WM_USER + 18
  Public Const TTM_GETTIPBKCOLOR = (WM_USER + 22)
  Public Const TTM_GETTIPTEXTCOLOR = (WM_USER + 23)
  Public Const TTM_ADJUSTRECT = (WM_USER + 31)

  'Tooltip Control Notifications
  Public Const TTN_FIRST = (-520)
  Public Const TTN_GETDISPINFO = (TTN_FIRST - 0)
  Public Const TTN_SHOW = (TTN_FIRST - 1)
  Public Const TTN_POP = (TTN_FIRST - 2)

  'Tooltip Styles
  Public Const TTS_ALWAYSTIP = &H1
  Public Const TTS_NOPREFIX = &H2
  Public Const TTS_NOANIMATE = &H10
  Public Const TTS_BALLOON = &H40
  Public Const TTS_USEVISUALSTYLE = &H100

  Public Declare Unicode Function SendMessage_TOOLINFO Lib "user32" Alias "SendMessageW" _
   (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByRef lParam As TOOLINFO) As Integer

End Module


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  Public Const CW_USEDEFAULT = &H80000000

  Public Declare Unicode Function CreateWindowEx Lib "user32" Alias "CreateWindowExW" _
   (ByVal dwExStyle As Integer, ByVal lpClassName As String, ByVal lpWindowName As String, _
   ByVal dwStyle As Integer, ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, _
   ByVal nHeight As Integer, ByVal hwndParent As IntPtr, ByVal hMenu As IntPtr, _
   ByVal hInstance As IntPtr, ByRef lpParam As Object) As IntPtr
  Public Declare Function DestroyWindow Lib "user32" (ByVal hwnd As IntPtr) As Boolean
  Public Declare Unicode Function SendMessage Lib "user32" Alias "SendMessageW" _
   (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As IntPtr) As Integer



Хотя м.б. и .NET -функций для твоих целей хватит, судя по предыдущему ответу, врубаться неохота.
...
Рейтинг: 0 / 0
Tooltip
    #39925033
Cytrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропил , у меня этот пример не компилируется.

Отсутствует объект TaskScheduler.
В Object Browser тоже отсутствует такой объект.
...
Рейтинг: 0 / 0
Tooltip
    #39925037
Cytrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий77 , спасибо, но пример слишком большой.
Я в C# сам ещё новичок. С Бейсика в C# переводить такие большие коды мне рановато.

Придётся мне ограничиться выводом сообщения в трей.
...
Рейтинг: 0 / 0
Tooltip
    #39925038
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cytrus,

Информации, которую вам накидали, должно хватить с головой.
...
Рейтинг: 0 / 0
Tooltip
    #39925044
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cytrus
Дмитрий77 , спасибо, но пример слишком большой.
Я в C# сам ещё новичок. С Бейсика в C# переводить такие большие коды мне рановато.

Во-первых, есть переводчики
Code Converter Provided by Telerik
Во-вторых, переводя не спеша по одной строчке (попутно читая документацию -как по .NET, так и по API, а это вообще в оригинале C/C++ а никак не бейсик/С#), неплохой способ набить руку на языке на котором пишешь.
Пример не большой. Лично я никогда не беру на веру чужие простыни, а вытаскиваю только те декларации, константы, функции которые мне лично нужны. Декларировать все и вся бессмысленно.
Для примитивных Tooltip .NET контрола вполне достаточно.
Через API я использую когда напр. надо в Listview наложить ToolTip ровно на текст, или например в случае пользовательского tiooltip с разными шрифтами и своей картинкой.
В твоем случае вывод использовать API напрашивается сам собой, потому что ты хочешь использовать в качестве родителя рабочий стол (хотя честно не приходит в голову зачем), а .NET контрол - он по дизайну к окну (Form) привязан.
...
Рейтинг: 0 / 0
Tooltip
    #39925077
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Сверху даны ссылки, как все сделать чисто на .NET, довольно примитивное решение, обсосано вдоль и поперёк.

Не нужно усложнять и запугивать людей C/C++ и WinAPI.
...
Рейтинг: 0 / 0
Tooltip
    #39925132
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cytrus
Изопропил , у меня этот пример не компилируется.

Отсутствует объект TaskScheduler.
В Object Browser тоже отсутствует такой объект.


какой в жопу Object Browser.

референсы добавь
Код: c#
1.
2.
3.
4.
using System.Drawing;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;



Дмитрий77
В твоем случае вывод использовать API напрашивается сам собой,

нах не впёрлось
как и десктопное окно

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            var tooltip = new MyTooltip(200, 20, 150, 150, "This is my custom tooltip message.", 5);
            tooltip.Show();
            Application.Run(tooltip);
        }

...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Tooltip
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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