ToolTIp

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Arto
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 125
Зарегистрирован: 16.04.2002 (Вт) 18:23

ToolTIp

Сообщение Arto » 19.01.2010 (Вт) 14:28

Здравствуйте
Не уж-то не возможно ToolTIp-у fontname и fontsize назначить
Спасибо

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: ToolTIp

Сообщение MIT » 19.01.2010 (Вт) 14:52

Здравствуйте
Ой мне кажется что тут кто то не знает что существуют знаки препинания
Также этот кто то не знает что существект гугл
Который легко обо всем расскажет
Пожалуйста
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Arto
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 125
Зарегистрирован: 16.04.2002 (Вт) 18:23

Re: ToolTIp

Сообщение Arto » 19.01.2010 (Вт) 15:57

Спасибо

Arto
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 125
Зарегистрирован: 16.04.2002 (Вт) 18:23

Re: ToolTIp

Сообщение Arto » 20.01.2010 (Ср) 10:19

Вопрос в догонку
В принципе получилось, шрифт и размер поменять удалось.
Но теперь возникла другая проблема, тект в нем у меня многострочный , что типа "AAA" & vbCrLf & "BBB", используя данный пример ToolTIp у меня все время выводит его одной строкой
Как быть?

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: ToolTIp

Сообщение Денис » 20.01.2010 (Ср) 10:48

Код: Выделить всё
Multiline = True
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Arto
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 125
Зарегистрирован: 16.04.2002 (Вт) 18:23

Re: ToolTIp

Сообщение Arto » 20.01.2010 (Ср) 10:50

Денис писал(а):
Код: Выделить всё
Multiline = True

В ToolTIp такого нет

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: ToolTIp

Сообщение MIT » 20.01.2010 (Ср) 12:16

Стандартный тултип разбивает на строки сам:
Изображение

Однако тот вариант, что был предложен на официальном сайте не учитывает особенности текста. Немного подправив исходник, мы получаем требуемое:
Изображение

Код: Выделить всё
Public Class MyTooltip
   Inherits ToolTip

   Sub New()
      MyBase.New()
      Me.OwnerDraw = True
      AddHandler Me.Draw, AddressOf OnDraw
   End Sub
   Public Sub New(ByVal Cont As System.ComponentModel.IContainer)
      MyBase.New(Cont)
      Me.OwnerDraw = True
      AddHandler Me.Draw, AddressOf OnDraw
   End Sub

   Private f As New Font("Arial", 16, FontStyle.Bold, GraphicsUnit.Pixel)
   Private sf As New StringFormat With {.FormatFlags = StringFormatFlags.NoWrap}

   Private Sub OnDraw(ByVal sender As Object, ByVal e As DrawToolTipEventArgs)
      Using b As New SolidBrush(Me.ForeColor)

         Dim newArgs As DrawToolTipEventArgs = New DrawToolTipEventArgs( _
               e.Graphics, _
               e.AssociatedWindow, _
               e.AssociatedControl, _
               e.Bounds, _
               e.ToolTipText, _
               Me.BackColor, _
               Me.ForeColor, _
               f)

         newArgs.DrawBackground()
         newArgs.DrawBorder()
         e.Graphics.DrawString(newArgs.ToolTipText, newArgs.Font, b, newArgs.Bounds, sf)
      End Using
   End Sub

   Private Sub MyTooltip_Popup(ByVal sender As Object, ByVal e As System.Windows.Forms.PopupEventArgs) Handles Me.Popup
      Using img As New Bitmap(1, 1), g As Graphics = Graphics.FromImage(img)
         Dim s As SizeF = g.MeasureString(MyBase.GetToolTip(e.AssociatedControl), f, New SizeF(500, Single.PositiveInfinity), sf, Nothing, Nothing)
         s.Width += 1
         e.ToolTipSize = S2S(s)
      End Using
   End Sub
   Private Function S2S(ByVal s As SizeF) As Size
      Return New Size(s.Width, s.Height)
   End Function
   Private Function S2S(ByVal s As Size) As SizeF
      Return New Size(s.Width, s.Height)
   End Function

   Protected Overrides Sub Dispose(ByVal disposing As Boolean)
      MyBase.Dispose(disposing)
      If disposing Then
         sf.Dispose()
         f.Dispose()
      End If
   End Sub
End Class


Замечания:
1) Мне не нравится строка Using img As New Bitmap(1, 1), g As Graphics = Graphics.FromImage(img), но я не знаю где еще можно взять Graphics - Me.CreateGraphics отсутствует.
2) По-умолчанию используется максимальная ширина тултипа в 500px, однако ее можно поменять.
3) Также по-умолчанию используется стиль текста NoWrap, что запрещает при рендеринге переносить текст на новую строку в неположенном месте. В сочетании с пунктом 2 может получиться ситуация, что длинные строки тултипа не поместятся в максимальную его ширину. Поэтому, наверно, лучше будет написать sf As StringFormat = StringFormat.GenericDefault, но это на усмотрение ТС.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Arto
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 125
Зарегистрирован: 16.04.2002 (Вт) 18:23

Re: ToolTIp

Сообщение Arto » 20.01.2010 (Ср) 15:20

спасибо
буду изучать

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: ToolTIp

Сообщение Admiralisimys » 21.01.2010 (Чт) 11:35

MIT собственно говоря, объект Graphics, вне события Paint, и получают, вызвав метод CreateGraphics, класса Control (или любого наследующего его, тот же Form или вызывающий замечания - Bitmap).

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: ToolTIp

Сообщение MIT » 21.01.2010 (Чт) 12:00

Ну-ка получи Graphics в событии Popup через CreateGraphics...
Я вроде бы по-русски написал, что данная функция недоступна. Ты наверно не знаешь, но тултип не на прямую наследует Control.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: ToolTIp

Сообщение Admiralisimys » 21.01.2010 (Чт) 12:36

Код: Выделить всё
Imports System
Imports System.Windows.Forms
Imports System.Drawing

Class ToolTipClass
    Inherits Form
    Shared Sub Main()
   Application.Run(New ToolTipClass)
    End Sub
    Sub New
   Dim Button1 As New Button
   Button1.Parent = Me
   Button1.Size = New Size (100, 50)
   Button1.Location = New Point((Me.ClientSize.Width - 100) / 2, (Me.ClientSize.Height - 50) / 2)
   Button1.Text = "Button1"

   Dim ToolTip1 As New ToolTip
   ToolTip1.SetToolTip (Button1, "Проверка всплывающей подсказки")
   ToolTip1.Active = True
   AddHandler ToolTip1.Popup, AddressOf ToolTip1_Popup
    End Sub
    Private Sub ToolTip1_Popup(ByVal Obj As Object, ByVal Pea As PopupEventArgs)
   Dim g As Graphics = Me.CreateGraphics
    End Sub
End Class

Ещё по поводу Me.CreateGraphics в соседней теме VB 2008 графика, сообщение от 1Steps

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: ToolTIp

Сообщение MIT » 21.01.2010 (Чт) 13:15

Admiralisimys, прости, ты что там куришь?
Мы тут говорим про наследование класса ToolTip, про переделку функций рендеринга и задание кастомного шрифта. Какой Inherits Form, какой Dim ToolTip1 As New ToolTip? Me.CreateGraphics отностися к форме, ты что предлагаешь каждому классу тултипа создавать свою форму? Или может ты предлагаешь вынести обработку событий тултипа в сторонний класс?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: ToolTIp

Сообщение Admiralisimys » 21.01.2010 (Чт) 13:59

MIT предлагаю каждой форме свой элемент подсказки, и обрабатывать в его событиях (в данном случаи в событии рисования (Draw)) какой из элементов управления нуждается в подсказке. Как в примере на MSDN ToolTip.Draw Event по отношению к трём кнопкам на форме.
Там тоже можно задавать свой шрифт.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: ToolTIp

Сообщение MIT » 27.01.2010 (Ср) 2:03

Апну тему возможно полезной инфой: вместо создания "пустого" объекта Graphics можно заюзать статический метод рендерера - System.Windows.Forms.TextRenderer.MeasureText
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 32

    TopList