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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2010, 12:44   #1
chandrasecar
Форумчанин
 
Аватар для chandrasecar
 
Регистрация: 03.10.2008
Сообщений: 180
По умолчанию Получение параметров элемента управления при воздействии на него

Каким образом можно получить координаты объекта (элемента управления), его высоту, длину и тип, на который было произведено воздействие мышкой? При этом объект (элемент управления) располагается вне приложения, например кнопка "пуск" у виндоуса или др. элементы в окнах программ "МС офис" и пр..
Щелчок мыши перехватываю сл. образом:
Код:
protected
  procedure TForm1.WndProc (var Msg: TMessage); override;

****************

procedure TForm1.WndProc (var Msg: TMessage);
begin
  if (Msg.Msg = MWM_LBUTTONDOWN) then
    ShowMessage('Нажата левая кнопка мыши');
  // и т.д. со всеми нажатиями
end;
В этой процедуре мне и нужно получать перечисленные параметры.
лучший подарок женщине-программисту
chandrasecar вне форума Ответить с цитированием
Старый 29.07.2010, 12:48   #2
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Глобальный мышиный хук + WindowFromPoint. По дескриптору окна можно получить всё остальное.
пыщь
JTG вне форума Ответить с цитированием
Старый 29.07.2010, 21:01   #3
chandrasecar
Форумчанин
 
Аватар для chandrasecar
 
Регистрация: 03.10.2008
Сообщений: 180
По умолчанию

Глобальный хук в моей ситуации не поможет. Не нужно чтобы мышь перехватывалась, нужно только чтобы программа скрытно реагировала на нажатие мыши где угодно. В моей ситуации подходит только тот блок кода который я привел (может есть и лучше, но он работает). А вот с WindowFromPoint не все понятно. Я нажимаю на кнопку в программе Ворд 2007, WindowFromPoint считывает HWND окна Ворда; и как с этим узнать абсолютные координаты этой кнопочки, ее ширину и высоту?
лучший подарок женщине-программисту
chandrasecar вне форума Ответить с цитированием
Старый 29.07.2010, 21:13   #4
D@rkD@iver
Форумчанин
 
Регистрация: 28.07.2009
Сообщений: 189
По умолчанию

ну по HWND можно найти все это
пишу программы для студентов и школьников на Pascal, Delphi, C++, WINAPI, assembler
обучаю программированию на паскале(дистанционно);mail: hruslow@gmail.com
D@rkD@iver вне форума Ответить с цитированием
Старый 29.07.2010, 22:14   #5
chandrasecar
Форумчанин
 
Аватар для chandrasecar
 
Регистрация: 03.10.2008
Сообщений: 180
По умолчанию

Как я понял WindowFromPoint возвращает не Handle окна, а элемента воздействия: потому что я нажимаю внутри одного окна на разные элементы и он возвращает разные значения Handle. Как теперь по Handle можно определить абсолютные координаты элемента управления, ширину и высоту?
лучший подарок женщине-программисту
chandrasecar вне форума Ответить с цитированием
Старый 29.07.2010, 23:03   #6
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  Wnd: HWND;                   // Hahdle найденного окна
  Pos: TPoint;                 // Позиция курсора
  Rect: TRect;                 // Координаты окна
  buff: array[0..255] of char; // Буфер
  WndText: string;             // Текст окна
  NameClass: string;           // Класс окна
begin
   // Получаем позицию курсора
   GetCursorPos( Pos );
   // Получаем Handle окна под курсором
   Wnd := WindowFromPoint( Pos );
   GetWindowRect( Wnd, Rect );
   GetWindowText( Wnd, buff, SizeOf( buff ) );
   WndText := StrPas( buff );
   GetClassName( Wnd, buff, SizeOf( buff ) );
   NameClass := StrPas( buff );

   // Выводим координаты курсора
   LabelPosX.Caption := 'X: ' + IntToStr( Pos.X );
   LabelPosY.Caption := 'Y: ' + IntToStr( Pos.Y );

   LabelHandle.Caption := 'Handle: ' + IntToStr( Wnd );
   LabelName.Caption := 'Name: ' + WndText;
   LabelClass.Caption := 'Class: ' + NameClass;
   LabelLeft.Caption := 'Left = ' + IntToStr( Rect.Left );
   LabelTop.Caption := 'Top = ' + IntToStr( Rect.Top );
   LabelWidth.Caption := 'Width = ' + IntToStr( Rect.Right - Rect.Left );
   LabelHeight.Caption := 'Height = ' + IntToStr( Rect.Bottom - Rect.Top );

   // Получаем Handle родительского окна
   Wnd := GetParent( Wnd );
   GetWindowRect( Wnd, Rect );
   GetWindowText( Wnd, buff, SizeOf( buff ) );
   WndText := StrPas( buff );
   GetClassName( Wnd, buff, SizeOf( buff ) );
   NameClass := StrPas( buff );

   LabelParentHandle.Caption := 'ParentHandle: ' + IntToStr( Wnd );
   LabelParentName.Caption := 'ParentName: ' + WndText;
   LabelParentClass.Caption := 'ParentClass: ' + NameClass;
   LabelParentLeft.Caption := 'ParentLeft = ' + IntToStr( Rect.Left );
   LabelParentTop.Caption := 'ParentTop = ' + IntToStr( Rect.Top );
   LabelParentWidth.Caption := 'ParentWidth = ' + IntToStr( Rect.Right - Rect.Left );
   LabelParentHeight.Caption := 'ParentHeight = ' + IntToStr( Rect.Bottom - Rect.Top );
end;
Остальное читаем вот тут ==> Читать
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 01.08.2010, 10:28   #7
chandrasecar
Форумчанин
 
Аватар для chandrasecar
 
Регистрация: 03.10.2008
Сообщений: 180
По умолчанию

Огромнейшее спасибо!
лучший подарок женщине-программисту
chandrasecar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Просмотр последнего добавленного элемента, установление на него камеры PVD Общие вопросы Delphi 5 03.05.2010 14:32
Создание собствееного элемента управления noxin Win Api 0 24.03.2010 22:53
Выбор значения из диапазона ячеек и получение ссылки на него Otando Microsoft Office Excel 2 12.12.2009 08:44
Создание элемента управления сайтом SDaD Помощь студентам 3 22.04.2009 10:38
Перечисление свойств элемента управления YuraL Microsoft Office Excel 2 08.03.2009 13:02