C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Не могу получить имя компонентов под курсором  (Прочитано 992 раз)
Sergey1985
Участник


Сказали спасибо: +8/-1
Offline

Сообщений: 310


Не могу получить имя компонентов под курсором
« : 20 Декабрь 2016, 13:20:58 »

Доброго времени суток. Не могу понять что не так с приведенным ниже кодом. Если использовать его как он есть, то с определением имени компонента наблюдаются огромные тормоза. Скажем курсор уже над формой, а он все имя компонента какого-нибудь показывает(имеющегося на форме).  Если убрать FindDragTarget а раскоментить
//hWnd = WindowFromPoint(*CurPoint);
     //sprintf(buff,"0x%X",hWnd);
     //Memo1->Lines->Add((AnsiString)buff);
     //GetClassName(hWnd,buff,sizeof(buff));
     //Label3->Caption = (AnsiString)buff;

то он может показывать вообще не вообразимые классы.



Код
#include 
#include
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int i=0;
POINT *CurPoint;
char buff[128];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
       : TForm(Owner)
{
CurPoint = new POINT;
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg,
     bool &Handled)
{
//HWND hWnd;
TControl *control;
GetCursorPos(CurPoint);
::ScreenToClient(Form1->Handle,CurPoint);
Label1->Caption = CurPoint->x;
Label2->Caption = CurPoint->y;
    if (Msg.message == WM_MOUSEMOVE)
    {
    i++;
    Caption = i;
    control = FindDragTarget(*CurPoint, true);
    if (control)
    {
 
    Memo1->Lines->Add(control->Name);
    }
    //hWnd = WindowFromPoint(*CurPoint);
    //sprintf(buff,"0x%X",hWnd);
    //Memo1->Lines->Add((AnsiString)buff);
    //GetClassName(hWnd,buff,sizeof(buff));
    //Label3->Caption = (AnsiString)buff;
    }
}
//---------------------------------------------------------------------------

и еще вопрос сразу как говорится до кучи
зачем перед  ScreenToClient нужно ставить двойное двоеточие ::? Без него не работает
« Последнее редактирование: 20 Декабрь 2016, 13:26:07 от Sergey1985 » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.069 секунд. Запросов: 22.