Здравствуйте, maximum28, Вы писали:
M>Как сделать в ToolTipText'е жесткий разрыв строк? Ни "... & Chr$(13) & ...", ни "... & vbCrLf & ..." не помогает.
По всему выходит, что никак (стандартными VB методами)
Можно попробовать инициализировать CommonControls вручную и самому создавать ToolTips с необходимыми параметрами, но сие есть боль головная.
The darkness around me
Shores of solar sea
Oh how i wish to go down with the sun....
Здравствуйте, maximum28, Вы писали:
M>Как сделать в ToolTipText'е жесткий разрыв строк? Ни "... & Chr$(13) & ...", ни "... & vbCrLf & ..." не помогает.
Если такое нужно сделать в одном-двух местах, то имеет смысл создать Label, раскрасить ее в цвет системного тултипа, установить ее нужного размера (используя методы TextWidth и TextHeight форм или PictureBoxа), сделать ее топмост окном, и таскать в обработчике MouseMove по этому контролу...
Работы много, в принципе, но разок когда-то такое делал...
Здравствуйте, mik1, Вы писали:
M>Здравствуйте, maximum28, Вы писали:
M>>Как сделать в ToolTipText'е жесткий разрыв строк? Ни "... & Chr$(13) & ...", ни "... & vbCrLf & ..." не помогает.
M>Если такое нужно сделать в одном-двух местах, то имеет смысл создать Label, раскрасить ее в цвет системного тултипа, установить ее нужного размера (используя методы TextWidth и TextHeight форм или PictureBoxа), сделать ее топмост окном, и таскать в обработчике MouseMove по этому контролу... M>Работы много, в принципе, но разок когда-то такое делал...
Вряд ли это выход... Во первых возня с ZOrder, во вторых обработка событий и таймирование, в третьих Label не выйдет за пределы окна, а чато это очень необходимо... ИМХО, овчинка выделки не стоит... Хотя, если очень надо, то можно и извратиться
The darkness around me
Shores of solar sea
Oh how i wish to go down with the sun....
Здравствуйте, black hermit, Вы писали:
BH>Здравствуйте, mik1, Вы писали:
M>>Здравствуйте, maximum28, Вы писали:
M>>>Как сделать в ToolTipText'е жесткий разрыв строк? Ни "... & Chr$(13) & ...", ни "... & vbCrLf & ..." не помогает.
M>>Если такое нужно сделать в одном-двух местах, то имеет смысл создать Label, раскрасить ее в цвет системного тултипа, установить ее нужного размера (используя методы TextWidth и TextHeight форм или PictureBoxа), сделать ее топмост окном, и таскать в обработчике MouseMove по этому контролу... M>>Работы много, в принципе, но разок когда-то такое делал...
BH>Вряд ли это выход... Во первых возня с ZOrder, во вторых обработка событий и таймирование, в третьих Label не выйдет за пределы окна, а чато это очень необходимо... ИМХО, овчинка выделки не стоит... Хотя, если очень надо, то можно и извратиться
Ну если Label не вылезет, то формочка с BorderStyle=0 — очень даже вылезет. Все остальное так же, как в первом посте. Так что читсо VB-ными средставми это реализуемо. Но писать прилично придется.
Здравствуйте, al, Вы писали:
al>Здравствуйте, mik1, Вы писали:
M>>Если такое нужно сделать в одном-двух местах, то имеет смысл создать Label ... сделать ее топмост окном...
al>Label — вообще не окно
Спасибо за предновогоднее просвещение.
Действительно, Label — это просто текст, выводимый на канву родителя.
Что-то перед НГ стормозил. Но если вместо Label взять TextBox или Form, то все-таки все будет работать.
Здравствуйте, maximum28, Вы писали:
M>Максимальную ширину чего и где?
Ну я в VB не силён, но на уровне WinAPI у tooltip есть максимальная ширина. Если текст выходит за эту ширину он переносится на следующую строчку. По умолчанию (сразу после создания) там максимальная ширина не ограничена. Так вот если максимальная ширина не ограничена, то и жёсткие переносы не работают. Оконное сообщение для этого дела TTM_SETMAXTIPWIDTHб скорее всего и proprty соответствующий будет.
Здравствуйте, adontz, Вы писали:
A>Ну я в VB не силён, но на уровне WinAPI у tooltip есть максимальная ширина.
А в VB тултипы не из комона — у них свои, и TTM_SETMAXTIPWIDTH на них не действует, равно как и все другие TTM_. Можно конечно адски просабклассить, но глядя на код, который хотя бы просто находит hwnd vb-шного тултипа, сразу кисло становиться — проще создать ручками тултип из конома.
F>А в VB тултипы не из комона — у них свои, и TTM_SETMAXTIPWIDTH на них не действует, равно как и все другие TTM_. Можно конечно адски просабклассить, но глядя на код, который хотя бы просто находит hwnd vb-шного тултипа, сразу кисло становиться — проще создать ручками тултип из конома.
Вот, например, код, который отрубает тултип у TreeView. Что тут кислого?
Private Declare Function SendMessage Lib"user32"Alias"SendMessageA" _
(ByVal hWND As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long
Private Const TV_FIRST = &H1100
Private Const TVM_GETTOOLTIPS = (TV_FIRST + 25)
Private Const WM_USER As Long = &H400
Private Const TTM_ACTIVATE As Long = (WM_USER + 1)
hwndTT = SendMessage(Tree.hWND, TVM_GETTOOLTIPS, 0, 0)
SendMessage hwndTT, TTM_ACTIVATE, 0, 0
Здравствуйте, promsoft, Вы писали:
P>Вот, например, код, который отрубает тултип у TreeView. Что тут кислого?
Хе-хе-хе. TreeView сам из Win32 Common Controls и tooltip'ы _к его элементам_ тоже комоновые — тут проблем нет.
Нет, речь идет о том, чтобы именно VB-шные тултипы многострочными сделать, то есть те, что, напр., у Command, у Text.
А там фишка в том, что на все контролы в программе создается единственное окно класса VBBubbleRT6 (или VBBubble, если запускаем под VB), причем создается оно не сразу, а только при первом WM_MOUSEMOVE на любом vb-шном контроле. Поэтому поиск этого единственного окна зключается в посылке любому контролу WM_MOUSEMOVE, после чего EnumWindows в поисках окна с классом VBBubbleRT6, принадлежащих данному процессу.
Ничего сложного, конечно, нет, но кисло то, что решить такую задачу, не нарушая Low Cohesion можно только с потерей производительности (на создание отдельной формы с контролом, которому посылать WM_MOUSEMOVE). Но в любом случае эти тултипы не из комона.
F>Нет, речь идет о том, чтобы именно VB-шные тултипы многострочными сделать, то есть те, что, напр., у Command, у Text. F>Ничего сложного, конечно, нет, но кисло то, что решить такую задачу, не нарушая Low Cohesion можно только с потерей производительности (на создание отдельной формы с контролом, которому посылать WM_MOUSEMOVE). Но в любом случае эти тултипы не из комона.