Консультация № 66768
13.12.2006, 07:27
0.00 руб.
0 3 3
Доброго времени суток!
О вопросе № 66465.
Меня не интересовали дополнительные компоненты, моё приложение не будет находится в трее. И вообще из трея показываются не Balloon Tips, а Balloon Hints.
Думаю о двух способах:
1. Отрисовка прямо на экране, в области System Tray.
2. Создание нестондартной формы всё в той же области.

По первому способу возникло сразу несколько вопросов:
1. Размер текстового сообщения заранее не известен, как его можно вычеслить, чтобы размер фона не оказался меньше или больше текста.
2. Как сделать постепенное появление сообщения, то есть прозрачность.
3. Ну нарисовал, вывел текст, а как его оттуда обрать?

По второму вопросу пока только один вопрос: Как сделать полупрозрачную форму?

Заранее благодарю?

Обсуждение

Неизвестный
13.12.2006, 07:40
общий
это ответ
Здравствуйте, Prowler!

По второму вопросу: в делфе 6 у формы есть свойство
AlphaBlend вкл/выкл прозрачности
и AlphaBlendValue от 0 до 255 уровень прозрачности формы, которые собственно и задают прозрачность
Неизвестный
13.12.2006, 12:30
общий
это ответ
Здравствуйте, Prowler!
Размер сообщения получается легко. Берете любой объект (пусть это будет SomeObject) с канвой, устанавливаете нужные параметры SomeObject.Canvas.Font, И применяете методы:
s := MyEditWithText.Text;
w := SomeObject.Canvas.TextWidth(s);
h := SomeObject.Canvas.TextHeight(s);
Ес-сно, учет переноса текста на новую строку и пр придется осуществлять самому.

Рисовать на десктопе можно с использованием контекста устройства:
hdc := GetDC(nil);
И далее см. любую справку по WinAPI
только я что-то никак не пойму, как <i>пере</i>рисовывать на столе.
Неизвестный
14.12.2006, 11:26
общий
это ответ
Здравствуйте, Prowler!
Посмотрите код в приложении. Это способ вызова стандартных baloon-ов. Установка позиции - см. TTM_TRACKPOSITION.
В uses нужно подключить CommCtrl.

Приложение:
var hToolTip : THandle; Ti : TTOOLINFO; R : TRect; ltext : PChar; ltitle : PChar;const TTS_BALLOON = $040; TTM_SETTITLE = 1056;begin hToolTip := CreateWindowEx(0, ‘Tooltips_Class32‘, Nil, WS_POPUP+TTS_BALLOON, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, Form1.Handle, 0, Application.Handle, 0); SetWindowPos(hToolTip, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE+SWP_NOSIZE+SWP_NOACTIVATE); ti.cbSize := SizeOf(ti); ti.uFlags := TTF_SUBCLASS+TTF_TRANSPARENT; ti.hInst := Application.Handle; SendMessage(hToolTip, TTM_ACTIVATE, 1, 0); Windows.GetClientRect(Button1.Handle, R); ltext := ‘Типс‘; ltitle := ‘Заголовок‘; ti.hwnd := Button1.Handle; ti.Rect := R; ti.lpszText := ltext; SendMessage(hToolTip, TTM_ADDTOOL, 0, Longint(@ti)); SendMessage(hToolTip, TTM_SETTITLE, 1, Longint(ltitle)); SendMessage(hToolTip, TTM_ACTIVATE, 1, 0);end;
Форма ответа