![]() |
|
|
#1
|
|||
|
|||
|
Пишу гаджет. В модуле формы прописан такой код:
Код:
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");
}Код:
::SetParent(Form1->Handle, listViewhwnd); |
|
#2
|
|||
|
|||
|
Проблема решена ручками.
Объявил глобальную переменную 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);
} |
| Этот пользователь сказал Спасибо Maetsky за это полезное сообщение: | ||
Admin (12.03.2020)
| ||