Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2013, 04:52   #1
AndXor
Пользователь
 
Регистрация: 02.10.2012
Сообщений: 16
По умолчанию BalloonHint

Помогите сделать вот такое окошко, только не для Edit а для ComboBox.
Попробовал заюзать ToolTips и что-то не получается(


Функция которую я написал
Код:
ShowBalloonHint(HWND hwnd,wchar_t TextStr)
{

HWND hwndTT = CreateWindow(TOOLTIPS_CLASS, NULL, 
                            WS_POPUP | TTS_NOPREFIX | TTS_BALLOON, 
                            0, 0, 0, 0, NULL, NULL, NULL, NULL);

 TOOLINFO BaloonTip;

 BaloonTip.cbSize   = sizeof(TOOLINFO);
 BaloonTip.uFlags   = TTF_TRANSPARENT | TTF_CENTERTIP;
 BaloonTip.uId      = 0;
 BaloonTip.hinst    = NULL;
 BaloonTip.lpszText = TextStr;
 
 ::GetClientRect(hwnd, &ti.rect);

 SendMessage(hwndTT, EM_ADDTOOL, 0, (LPARAM) &BaloonTip);
}
AndXor вне форума Ответить с цитированием
Старый 31.05.2013, 08:10   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Прочитайте в документации значение полей hwnd и uId в структуре TOOLINFO и заполните их правильными параметрами.
waleri на форуме Ответить с цитированием
Старый 31.05.2013, 14:04   #3
AndXor
Пользователь
 
Регистрация: 02.10.2012
Сообщений: 16
По умолчанию

Вот что получилось

Но всё же это не то что на картинке.
1. нет иконки ошибки
2. нет заголовка
И при создании это подсказка не исчезает по прошествию какого-то времени, как это делается в 1ой подсказке.
1ую подсказку я сделал при помощи EDITBALLOONTIP, но она к сожалению не хочет показываться на ComboBox'е(
Вот какой у меня получился код
в *.h
Код:
typedef struct tagTOOLINFO{
	UINT      cbSize;
	UINT      uFlags;
	HWND      hwnd;
	UINT_PTR  uId;
	RECT      rect;
	HINSTANCE hinst;
	LPTSTR    lpszText;
#if (_WIN32_IE >= 0x0300)
	LPARAM lParam;
#endif
#if (_WIN32_WINNT >= 0x0501)
	void *lpReserved;
#endif
} TOOLINFO, NEAR *PTOOLINFO, *LPTOOLINFO;
а в *.cpp
Код:
void __fastcall TForm1::BalloonTip(HWND hwnd, String TextStr)
{
HWND hwndTT = CreateWindowEx(WS_EX_TOPMOST,
        TOOLTIPS_CLASS,
        NULL,
		WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP | TTS_BALLOON,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        hwnd,
        NULL,
		NULL,
        NULL
		);

if (hwndTT)
{
wchar_t *wText  = new wchar_t[100];
wcscpy(wText, WideString(TextStr).c_bstr());
	TOOLINFO ti;

	ti.cbSize   = sizeof(ti);
	ti.uFlags   = TTF_CENTERTIP | TTF_TRANSPARENT;
	ti.hwnd     = hwnd;
	ti.uId      = 0;
	ti.hinst    = NULL;
	ti.lpszText = wText;

	::GetClientRect(hwnd, &ti.rect);


	SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM) &ti );
	SendMessage(hwndTT, TTM_TRACKACTIVATE,
	  TRUE, (LPARAM) &ti );

}
}
AndXor вне форума Ответить с цитированием
Старый 31.05.2013, 16:44   #4
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Установка иконки и заголовка
Код:
SendMessage( hwndTT, TTM_SETTITLE, nIconIndex, LPARAM( sCaptionText ) );
FataLL вне форума Ответить с цитированием
Старый 31.05.2013, 23:55   #5
AndXor
Пользователь
 
Регистрация: 02.10.2012
Сообщений: 16
По умолчанию

FataLL спасибо
Ещё такой вопрос. Если я добавлю такой код, то поидее он должен через заданное время автоматом скрыться, или быть может я не прав?
Потому что, что-то он нифига не скрывается)
Код:

	SendMessage(hwndTT, TTM_SETDELAYTIME , TTDT_AUTOPOP, 500);

Последний раз редактировалось AndXor; 01.06.2013 в 15:17.
AndXor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
BalloonHint Altera Общие вопросы Delphi 1 23.09.2011 17:24