Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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


Ответ
 
Опции темы
Старый 11.03.2020, 07:24   #1
Maetsky
Пользователь
 
Регистрация: 14.03.2011
Сообщений: 14
По умолчанию Не работает Hint

Пишу гаджет. В модуле формы прописан такой код:
Код:
bool SetToDesktop() {
  HWND listViewhwnd = FindWindowA("Progman", NULL);
  if(listViewhwnd) {
	listViewhwnd = FindWindowExA(listViewhwnd, NULL, "SHELLDLL_DefView", NULL);
	if(listViewhwnd) {
	  listViewhwnd = FindWindowExA(listViewhwnd, NULL, "SysListView32", NULL);
	  if(listViewhwnd) {
		Form1->BorderStyle = bsNone;
		::SetParent(Form1->Handle, listViewhwnd);
		return true;
	  }
	}
  }
  return false;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{      
  if(!SetToDesktop())ShowMessage("Ошибка SetToDesktop");
}
В программе не отображаются всплывающие подсказки на всех объектах, хотя свойства ShowHint заданы в true. Если закомментировать
Код:
::SetParent(Form1->Handle, listViewhwnd);
, то подсказки появляются. В каком направлении рыть?
Maetsky вне форума Ответить с цитированием
Старый 11.03.2020, 11:00   #2
Maetsky
Пользователь
 
Регистрация: 14.03.2011
Сообщений: 14
По умолчанию

Проблема решена ручками.
Объявил глобальную переменную THintWindow *HintWindow; в TForm1::FormCreate прописал HintWindow = new THintWindow(this);
ну и далее:
Код:
void SHint(int HWidth, int HHeight, UnicodeString HText) //процедура показа Hint
{
  TPoint pt = Mouse->CursorPos;
  TRect Rect;
  Rect.Left = pt.x;
  Rect.Top = pt.y+15;
  Rect.Right = Rect.Left + HWidth;
  Rect.Bottom = Rect.Top + HHeight;
  Form1->HintWindow->ActivateHint(Rect, HText);
  Form1->Timer1->Enabled=true;
}

void __fastcall TForm1::Timer1Timer(TObject *Sender) //процедура сокрытия Hint через некоторый интервал времени
{
  HintWindow->ReleaseHandle();
  Timer1->Enabled=false;
}
Пример использования для объекта кнопка:

Код:
void __fastcall TForm1::Button1MouseEnter(TObject *Sender) //показать Hint при наведении мыши
{
  SHint(145,30,"Виртуальная клавиатура\nVirtual keyboard");
}

void __fastcall TForm1::Button1TMouseLeave(TObject *Sender) //скрыть Hint принудительно
{
  Timer1Timer(Sender);
}
Можно в две строки Hint задавать.
Maetsky вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изображение в Hint CheatX C++ Builder 1 27.02.2015 10:21
Hint для DBLookupListBox RamireZ БД в Delphi 0 23.06.2010 23:12
hint и DBGrid victorixx БД в Delphi 4 10.02.2010 04:16
CTreeCtrl и hint iiunbreakableii Общие вопросы C/C++ 0 17.07.2009 14:59


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS