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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2016, 20:33   #1
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию Разница при определении координат клика между 2мя Пк

Имеется программа которая определяет координаты клика по программе при нажатии:
Код:
GetWindowRect(H, WindowRect); // это для преобразование глобальных координат в координаты относительно текущего окна
     Windows.GetClientRect(H, rclient); // 
      GetCursorPos(p); // берем глобальные координаты курсора
      w := WindowRect.Right - WindowRect.Left;
      h := WindowRect.Bottom - WindowRect.Top;
      w1 := rclient.Right - rclient.Left;
      h1 := rclient.Bottom - rclient.Top;
      x:=p.x- WindowRect.Left-Round((w-w1)/2);
      y:= p.y-WindowRect.Top-(h-h1 -Round((w-w1)/2));
-Разрешение программы на которой кликаю одинаковое
-Разрешение мониторов 1440х900 и 1920х1080

При разрешении программы по которой кликаю 1366х768( клиентская область) на Пк с фул HD разрешением все норм показывает, а на мониторе 1440х900 если кликнуть по крайнему правому нижниму углу программы будет где то 1344 на 708 ( а на фул HD мониторе нормально как и должно быть около 1366 х768)
Если кликнуть по крайнему левому вернему углу программы мышкой на мониторе 1440х900 покажет около 20х60, а на фул HD около 0х0 как и должно быть.

Походу определение координат отличается на различных мониторах?(
Винда там и там 7мерка.

Последний раз редактировалось Illusiony; 21.02.2016 в 20:43.
Illusiony вне форума Ответить с цитированием
Старый 21.02.2016, 20:59   #2
cotseec
Пользователь
 
Регистрация: 02.05.2012
Сообщений: 45
По умолчанию

вместо перевода координат "экран - окно" вручную воспользуйтесь ScreenToClient function
Skype: cotseec
ICQ: 330-171-495
cotseec вне форума Ответить с цитированием
Старый 21.02.2016, 21:05   #3
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

А теперь вроде ничего не менял но одинаково правильно на двух Пк. Странно, как это...
Illusiony вне форума Ответить с цитированием
Старый 21.02.2016, 23:02   #4
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Цитата:
Сообщение от cotseec Посмотреть сообщение
вместо перевода координат "экран - окно" вручную воспользуйтесь ScreenToClient function
Вот так?
Код:
      GetCursorPos(p); // берем глобальные координаты курсора
     Windows.ScreenToClient(h,p);
     x:=p.x;
     y:=p.y;
Скажите что именно здесь обозначает Windows перед функцией? Это просто таким образом доступ к функции осуществляется или здесь что то другое?

Находил примеры с Windows. GetCursorPos() и просто GetCursorPos(). В чем разница?

Последний раз редактировалось Illusiony; 21.02.2016 в 23:19.
Illusiony вне форума Ответить с цитированием
Старый 21.02.2016, 23:45   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

ScreenToClient - это метод TControl и его наследников , так же как и ClientToScreen. В том числе и формы
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 21.02.2016 в 23:49.
Аватар вне форума Ответить с цитированием
Старый 21.02.2016, 23:47   #6
cotseec
Пользователь
 
Регистрация: 02.05.2012
Сообщений: 45
По умолчанию

Цитата:
Сообщение от Illusiony Посмотреть сообщение
Находил примеры с Windows. GetCursorPos() и просто GetCursorPos(). В чем разница?
Windows - пространство имен (название модуля), в котором описана требуемая функция (чтобы компилятору было однозначно ясно какую конкретно функцию использовать), если нет одноименной функции, описанной в ином модуле, то Windows (в данном случае) не требуется
Skype: cotseec
ICQ: 330-171-495
cotseec вне форума Ответить с цитированием
Старый 21.02.2016, 23:48   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Это указание модуля, из которого взять функцию, требуется редко, только если используете у себя в проекте (а точнее в текущем модуле) два разных модуля с одинаковыми по имени функциями. В данном случае ScreenToClient может браться и из модуля Windows и из модуля Controls (если не ошибаюсь), и вот чтобы убрать возможную неоднозначность, используется это явное указание для компилятора.
phomm вне форума Ответить с цитированием
Старый 24.02.2016, 19:44   #8
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Всем спасибо. Тут еще вопросик,можно ли как то по простому сделать скриншот клиентской области окна чужого приложения?
У меня такое :
Код:
procedure ScreenShot(activeWindow: bool; destBitmap : TBitmap) ;
 var
    w,h ,w1,h1: integer;
    DC : HDC;
    hWin : Cardinal;
    r,rclient : TRect;
Begin

hWin :=  GetForegroundWindow;
      dc := GetWindowDC(hWin) ;
      GetWindowRect(hWin,r) ;
      w := r.Right - r.Left;
      h := r.Bottom - r.Top;
      Windows.GetClientRect(hWin, rclient);
      w1 := rclient.Right - rclient.Left;
      h1 := rclient.Bottom - rclient.Top;

     destBitmap.Width := w1;
     destBitmap.Height := h1;
     BitBlt(destBitmap.Canvas.Handle,
            0,
            0,
            destBitmap.Width,
            destBitmap.Height,
            DC,
           Round((w-w1)/2)-razresh, 
           (h-h1 -Round((w-w1)/2))+sistem,
            SRCCOPY) ;

Последний раз редактировалось Illusiony; 24.02.2016 в 19:50.
Illusiony вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi: организовать шифрованный обмен данными между 2мя функциями ruskod.net Фриланс 3 04.01.2014 16:10
Народ, разница в определении структур. Чем отличается. xe3 Общие вопросы C/C++ 8 06.02.2013 12:27
Ошибка при определении принтера Robin_ Общие вопросы Delphi 1 14.12.2008 02:05
Разница между датами deenka БД в Delphi 3 31.01.2008 13:21