Android97
@Android97
Программист-Альпинист

Как наложить на картинку текст, что бы наведении мыши, вылазила подсказка?

062a0d1330694a3eab594c1b6c73d791.jpga6329f6703b1494db94a78d208df83e8.jpg
  • Вопрос задан
  • 2339 просмотров
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
Задача делится на три вопроса.
I. Как перехватывать мышь? OnMouseMove и OnMouseLeave (вроде так оно…)
II. Как нарисовать подсказку? Есть три способа это сделать, выбирайте любой:
1. Отпечатать подсказку на компоненте-просмотрщике (например, в событии OnPaint). Например, подвели «крысика» — InvalidateRect, примерно соответствующий расположению подсказки (ну или Invalidate целиком, если считаете, что картинка рисуется быстро). В OnPaint — собственно отрисовка.
2. Сделать собственное окошко-подсказку — например, такая же TForm. Внимание, TLabel не умеет вычислять вертикальный размер, когда текст перенесён, поэтому или найдите компонент, который закрывает этот просчёт, либо нарисуйте текст сами, как и в первой части.
3. Вывести тултип средствами WinApi.
III. Вот мы вычислили габариты подсказки и хотим её расположить в границах экрана (варианты 2, 3) или окна (вариант 1). Куда её всунуть? Сделайте несколько вариантов расположения, в порядке предпочтитения.
• Снизу, горизонтальное выравнивание по левому краю. Если умещается по вертикали, но вылезает по горизонтали — сместить влево.
• Затем сверху с теми же условиями.
• Затем справа; вертикальное выравнивание — как уместится.
• Затем слева; вертикальное выравнивание — как уместится.
• А если ни один вариант не проканал — по координатам (0, 0).
Ах да. Вычисляя габариты, убедитесь, что очень длинные подписи переносятся — чтобы не было подсказки, которая шире, чем экран.

Вот так в общих чертах. Делать мне это приходилось; я использовал 1-й способ, однако «затравкой» делал не прямоугольник, а точку (нужны были подписи к графику). Естественно, выравнивал я с небольшим отступом, чтобы курсор не загораживал подпись. Использовал я Graphics32 с собственным кодом рисования закруглённого прямоугольника, получились кавайненькие такие полупрозрачные плашки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы