PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » PureBasic для Windows » Код функции Windows Api


Код функции Windows Api

Сообщений 1 страница 8 из 8

1

Не хотел писать но напишу.
Вспомнил тут функцию на api поиска точки в прямоугольники
и  дай думаю попробую а не тут то было ,видимо описание в msdn неправильное типа на структуру point забыли написать что это указатель=ну невозможно же через стек 32бита передать 2 типа лонг а не указатель на них!
Соответственно неправильная работа,Похоже Фред или на msdn понадеялся или накосячил=результат неправильная работа!

Код:
rect.rect
rect\left=10
rect\top=10
rect\right=20
rect\bottom=20

point.point
point\x=15
point\y=15

Debug PtInRect_(@rect,@point)

Debug PtInRect_(@rect,point)

Отредактировано Sergeihik (14.11.2022 17:39:30)

0

2

Кстати вся логика примеров поиска прямоугольника по точки моя за исключением последнего примера гдя от апи,ну я там добавил счётчик элементов  и его проверку и
поиск в массиве ,ну и они x,y начальные ищут на больше равно я на больше ну и поскромничали они на одну то раммку поиска сделать переброс данных в своей парадигме на поиск точки на меньше равно x1,y1  а тупо если точка больше рамки x1,y1....

Отредактировано Sergeihik (14.11.2022 17:58:21)

0

3

Код:
rect.rect
rect\left=10
rect\top=10
rect\right=20
rect\bottom=20

point.point
point\x=15
point\y=15
Debug PtInRect_(@rect,point\x|point\y<<32)

0

4

Ещё можно на PeekQ(@point) заменить.

0

5

Со сдвигом point\x | point\y<<32  ерунда полнейшая на x86
PeekQ(),тоже самое,стек 32 бита.

Отредактировано Sergeihik (15.11.2022 08:18:54)

0

6

всем известная функция
Пётр, может таки скобки нужны?
PtInRect_(@re, pt\x|(pt\y<<32))

есть и другие функции где тоже самое, надо упакованный параметр передавать

Код:
ChildWindowFromPoint_(WindowID(#W), pt\x|(pt\y<<32))


Код:

Procedure IsMouseOver(wnd); находится ли мыша над нужным гаджетом
Protected y, Result, re.RECT, pt.POINT
GetWindowRect_(GadgetID(wnd), @re)
GetCursorPos_(@pt)
Result = PtInRect_(@re, pt\x|(pt\y<<32))
ProcedureReturn Result
EndProcedure


0

7

Хоть и не применимо к x86 это,но<<32,я так понимаю обнулит y ,и всё ось y вне проверки!
А если сделать or(|)то это установит максимальное число от x или y=аут.

Отредактировано Sergeihik (15.11.2022 15:38:27)

0

8

Вообщем в мусорку её эту не рабочию функцию
лучше так

Код:
Procedure.i IsMouseOver(wnd); находится ли мыша над нужным гаджетом
Protected y, Result, re.RECT, pt.POINT
GetWindowRect_(GadgetID(wnd), @re)
GetCursorPos_(@pt)
If pt\x>re\left And pt\x<re\right And pt\y>re\top And pt\y<re\bottom
  ProcedureReturn 1
Else
  ProcedureReturn 0
EndIf
EndProcedure
;или так
Procedure.i IsMouseOver(wnd);
Protected y, Result, re.RECT, pt.POINT
GetWindowRect_(GadgetID(wnd), @re)
GetCursorPos_(@pt)
pt\x+pt\y
re\left+re\top
re\right+re\bottom
If pt\x>=re\left And pt\x<=re\right
  ProcedureReturn 1
Else  
  ProcedureReturn 0
EndIf
EndProcedure

0


Вы здесь » PureBasic - форум » PureBasic для Windows » Код функции Windows Api