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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2018, 14:28   #1
garuna
Форумчанин
 
Аватар для garuna
 
Регистрация: 13.04.2013
Сообщений: 180
По умолчанию узнать имя компонента зная его координаты на форме

собственно, сабж. уже часа полтора не могу найти решение, прошу помощи
garuna вне форума Ответить с цитированием
Старый 26.10.2018, 14:49   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ой, так в общем случае задача решения не имеет. в одной и той же позиции могут находится от нуля до бесконечности компонент.

а так, если Вам это реально надо - перебирайте все компоненты на форме в цикле и ищите те, координаты которых Вам подходят.

p.s. озвучьте задачу, которую Вы пытаетесь решить.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.10.2018, 14:59   #3
garuna
Форумчанин
 
Аватар для garuna
 
Регистрация: 13.04.2013
Сообщений: 180
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ой, так в общем случае задача решения не имеет. в одной и той же позиции могут находится от нуля до бесконечности компонент.

а так, если Вам это реально надо - перебирайте все компоненты на форме в цикле и ищите те, координаты которых Вам подходят.

p.s. озвучьте задачу, которую Вы пытаетесь решить.
на форме расположена панель (pnlContainer), внутри этой панели еще несколько динамически созданных панелей одинаковой высоты и ширины расположенные одна над другой со свойством Align = alTop.
нужно при наведении мыши на одну из панелей узнать имя панели расположенной над ней. для этого решил действовать так:
1) узнать координаты панели над которой находится курсор
2) сместить координаты на несколько пикселей вверх и получить имя панели в этих координатах

на событие OnMouserEnter каждой панели вешаю это:
Код:
var
 P1: TPoint;
begin
  P1 := (Sender as TPanel).ClientToParent(Point(0, 0));
  if pnlContainer.ControlAtPos(Point(P1.X, P1.Y-5), False) = nil
  then lbl1.Caption:= 'nil'
  else lbl1.Caption:= pnlContainer.ControlAtPos(Point(P1.X, P1.Y-5), False).Name;
но всегда почему-то возвращается Nil. не могу понять в чем дело.
garuna вне форума Ответить с цитированием
Старый 26.10.2018, 18:42   #4
jillitil
Форумчанин
 
Аватар для jillitil
 
Регистрация: 17.10.2018
Сообщений: 184
По умолчанию

Код:
VAR
  I, TM, ME: Integer;
  N: STRING;
BEGIN
  TM    := 0;
  ME    := TPanel(Sender).Top;  // ME:=  координатa TOP текущей панели
  FOR I    := 0 TO Self.pnlContainer.ControlCount    - 1 DO
    IF (Self.pnlContainer.Controls[I].Top    > TM)
    AND (Self.pnlContainer.Controls[I].Top    < ME) THEN
    BEGIN
      TM    := Self.pnlContainer.Controls[I].Top;
      N    := Self.pnlContainer.Controls[I].Name;
    END;
  ShowMessage('Панель"'    + N    + '" надомной.');
END;

Последний раз редактировалось jillitil; 26.10.2018 в 19:13.
jillitil вне форума Ответить с цитированием
Старый 26.10.2018, 20:07   #5
garuna
Форумчанин
 
Аватар для garuna
 
Регистрация: 13.04.2013
Сообщений: 180
По умолчанию

jillitil, благодарю, я так и сделал в итоге)
вопрос решён.
garuna вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обращение к свойству компонента не зная его имени NeVerSS Компоненты Delphi 7 20.09.2014 10:18
как убить процесс зная его имя? One.Love Win Api 14 18.02.2012 14:31
Узнать букву диска, зная его название vvn94 Общие вопросы Delphi 5 19.06.2011 23:23
Как узнать алгоритм шифрования зная имя и код активации? kasoi Общие вопросы Delphi 0 06.12.2010 18:56
Как завершить процесс, зная его имя Никки Win Api 6 14.01.2008 14:04