|
C SysLink контролом кто сталкивался? Как сделать чтоб ссылка не всегда была подчеркнута?
|
|||
---|---|---|---|
#18+
Создать создал. Но поведение не совсем правильное. Т.е. он должен быть подчеркнут когда мышка по нему елозит, а у меня он подчеркнут ВСЕГДА (с курсором руки все в порядке). Вод код: Код: 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.
Сразу оговорюсь, что код работает только под манифестом, это оговорено в msdn. Как лечить подчеркивание? В принципе подобное реализуется через обычную VB6-label. Но то чего хочу все равно не получится, тк по mouse_move я могу "подчеркнуть текст", но на снять подчеркивание события нет, если только не лепить детский сад по mouse_move соседних элементов. Ну плюс focus rectangle у label нету. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2013, 11:33 |
|
C SysLink контролом кто сталкивался? Как сделать чтоб ссылка не всегда была подчеркнута?
|
|||
---|---|---|---|
#18+
Чего-то ничего не получается Поигрался с LM_SETITEM Код: 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.
Вот так можно сделать enable=false Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
На вистах работает еще LIS_HOTTRACK -приобретает светло-голубой цвет LIS_DEFAULTCOLORS -приобретает черный цвет Больше ничего не выжал. Или это не задокументировано в MSDN, или это нормально не делается. Странно. В .net на тему подчеркивания есть Hover Underline. Но при том сразу обратил внимание на то, что .Net контрол не показывает фокус при нажатии мышкой (нестандарт). ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2013, 18:29 |
|
C SysLink контролом кто сталкивался? Как сделать чтоб ссылка не всегда была подчеркнута?
|
|||
---|---|---|---|
#18+
А все-таки я это сделал. Надо понять состояние, когда мышь пришла в SysLink и что несколько сложнее что она оттуда ушла. Состояние что мышь в SysLink определяем константой State_HotTrack 1. Сабклассим SysLink и ловим первый WM_MOUSEMOVE В нем: 1) фиксируем состояние "мышь в SysLink" (State_HotTrack = True) 2) заказываем событие WM_MOUSELEAVE (само не вызовется) через вызов TrackMouseEvent+TME_LEAVE 3) меняем состояние SysLink на LIS_HOTTRACK (ссылка подсвечивается), либо на любое другое (например можно использовать LIS_FOCUSED) -тогда цвет ссылки не меняется 4) Пункт 3 что существенно вызывает NM_CUSTOMDRAW , которое следит за "подчеркиванием", поэтому хоть что-то (пусть незаметное) там надо вызвать. 2. При получении WM_MOUSELEAVE (оно гарантированно вызовется в силу 1.2) 1) фиксируем состояние "мышь ушла" (State_HotTrack = False) 2) снимаем флаг LIS_HOTTRACK (убираем подсвечивание), либо другое установленный (например LIS_FOCUSED если цвет ссылки не менялся) 3)Пункт 2 что опять существенно вызывает NM_CUSTOMDRAW , которое следит за "подчеркиванием". Код: 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.
Ну, а задача CustomDraw - вернуть "шрифт с подчеркиванием" когда State_HotTrack = True либо вернуть "шрифт без подчеркивания" когда State_HotTrack = False Код: 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.
Но - это работает только на Вистообразных. На XP не поддерживается LIS_HOTTRACK и ни одно из LIS_ не вызывает CustomDraw, т.е. нету ввода для управления подчеркиванием. Еще на классике в Vista лучше использовать LIS_FOCUSED -т.е. цвет не меняется, а CustomDraw генерируется - цвет выделения там фиговый какой-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2013, 10:36 |
|
C SysLink контролом кто сталкивался? Как сделать чтоб ссылка не всегда была подчеркнута?
|
|||
---|---|---|---|
#18+
Собственно вот этого добивался. Для XP (и классика и XP тема) думаю сойдет стандартное поведение. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2013, 10:42 |
|
C SysLink контролом кто сталкивался? Как сделать чтоб ссылка не всегда была подчеркнута?
|
|||
---|---|---|---|
#18+
Я вот этого понять не могу: Дмитрий77На XP ... ни одно из LIS_ не вызывает CustomDraw, т.е. нету ввода для управления подчеркиванием. Если глядеть в ControlSpy, то NM_CustomDraw от SysLink там генерируется прекрасно на том же XP, а у меня в проге нет. Почему? По крайне мере при нажатии на него он же перерисовывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2013, 11:32 |
|
|
start [/forum/topic.php?fid=60&msg=38299639&tid=2156909]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
72ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 269ms |
total: | 434ms |
0 / 0 |