PureBasic - форум

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

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


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Как определить координаты и размер окна во время движения?


Как определить координаты и размер окна во время движения?

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

1

Здравствуйте!
Чтобы узнать координаты и размеры окна после его перемещения достаточно воспользоваться WindowX() и  WindowY(). Аналогично и с его размерами - WindowWidth() и WindowHeight()
А Вот как быть, если нужно узнать координаты или размеры окна пока оно движется, т.е. пока пользователь перемещает или растягивает окно?
Вот попытка решить эту задачу:

Код
Код:
Dim FunkObrVyz(11) ; массив для коррекции координат окна
 
; FunkObrVyz(0) - номер окна
; FunkObrVyz(1) - погрешность внешней координаты по оси Х
; FunkObrVyz(2) - погрешность внешней координаты по оси Y
; FunkObrVyz(3) - погрешность внутренней ширины окна
; FunkObrVyz(4) - погрешность внутренней высоты окна
; FunkObrVyz(5) - координата внешнего Х окна
; FunkObrVyz(6) - координата внешнего Y окна
; FunkObrVyz(7) - внутренняя ширина окна
; FunkObrVyz(8) - внутренняя высота окна
; FunkObrVyz(9) - минимальнодопустимая ширина окна
; FunkObrVyz(10) - минимальнодопустимая высота окна
; FunkObrVyz(11) - флаг обновления погрешностей окна
 
FunkObrVyz(0) = 2
FunkObrVyz(5) = 100
FunkObrVyz(6) = 100
FunkObrVyz(7) = 150
FunkObrVyz(8) = 120
FunkObrVyz(9) = 90
FunkObrVyz(10) = 90
 
Procedure Change(hwnd, Msg, wParam, lParam)
  
  Shared FunkObrVyz()
  Shared My_x
  Protected *WinRect.RECT
  
  If Msg = #WM_SIZING  Or Msg = #WM_MOVING
    *WinRect = lParam
    My_x = *WinRect \ left ; х-координата левого края рамки растягивания окна
    My_y = *WinRect \ top  ; у-координата верхнего края рамки растягивания окна
    My_w = *WinRect \ right - *WinRect \ left ; приблизительная ширина при растягивании окна
    My_h = *WinRect \ bottom - *WinRect \ top ; приблизительная высота при растягивании окна
    
    If FunkObrVyz(11) = 0 ; если начато передвижение или растягивание окна
      
      ; запоминаем погрешности внешних координат
      ; и внутренних размеров окна в массив
      FunkObrVyz(1) = WindowX(FunkObrVyz(0)) - My_x
      FunkObrVyz(2) = WindowY(FunkObrVyz(0)) - My_y
      FunkObrVyz(3) = WindowWidth(FunkObrVyz(0)) - My_w
      FunkObrVyz(4) = WindowHeight(FunkObrVyz(0)) - My_h
      FunkObrVyz(11) = 1 ; флаг завершения запоминания
    EndIf
    
    x = My_x + FunkObrVyz(1)
    y = My_y + FunkObrVyz(2)
    w = My_w + FunkObrVyz(3)
    h = My_h + FunkObrVyz(4)
    
    ; при уменьшении окна меньше минимальнодопустимого
    ; приравниваем к минимальнодопустимым размерам
    If w < FunkObrVyz(9)
      w = FunkObrVyz(9)
    EndIf
    If h < FunkObrVyz(10)
      h = FunkObrVyz(10)
    EndIf
    
    If x <> FunkObrVyz(5) Or y <> FunkObrVyz(6) Or w <> FunkObrVyz(7) Or h <> FunkObrVyz(8)
      FunkObrVyz(5) = x
      FunkObrVyz(6) = y
      FunkObrVyz(7) = w
      FunkObrVyz(8) = h
    EndIf
  EndIf
  
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
 
If OpenWindow(FunkObrVyz(0), FunkObrVyz(5), FunkObrVyz(6), FunkObrVyz(7), FunkObrVyz(8), "Пример...", #PB_Window_SizeGadget | #PB_Window_SystemMenu)
  
  SetWindowCallback(@Change(), FunkObrVyz(0))
  
  Repeat
    Event = WaitWindowEvent()
    If Event = #PB_Event_SizeWindow Or Event = #PB_Event_MoveWindow
      Debug "Реальный икс - "+Str(WindowX(FunkObrVyz(0))) + " , Расчетный икс - " + Str(FunkObrVyz(5))
      Debug "Реальный игрек - "+Str(WindowY(FunkObrVyz(0))) + " , Расчетный игрек - " + Str(FunkObrVyz(6))
      Debug "Реальная ширина - "+Str(WindowWidth(FunkObrVyz(0))) + " , Расчетная ширина - " + Str(FunkObrVyz(7))
      Debug "Реальная высота - "+Str(WindowHeight(FunkObrVyz(0))) + " , Расчетная высота - " + Str(FunkObrVyz(8))
      FunkObrVyz(11) = 0
    EndIf
  Until Event = #PB_Event_CloseWindow
EndIf

Только вот, не совсем удачная попытка... потому, как расчетные координаты при перетаскивании, а иногда и при сжатии\растягивании окна отличаются от тех, которые приобретает окно по завершению движения. Задача кажется нерешаемой, но ведь Windows "знает' где и какого размера ему рисовать окно, конда пользователь отпускает ЛКМ.
Подскажите, пожалуйста как можно вычислить\получить координаты и размеры окна при его перемещении?

0

2

я это решал в AutoIt3, вот из справки:

В отличии от WM_SIZE функция WM_SIZING выполняется при нажатии и отпуске мыши на границах окна.

Одна выполняет функцию вычисления это в процессе движения, другая в момент окончания действия.
Ещё могут понадобиться функции WM_MOVE и WM_MOVING или WM_WINDOWPOSCHANGED и WM_WINDOWPOSCHANGING
Также может понадобиться WM_ACTIVATE, например если окно свёрнуто, то при сохранении координат е запрашивать текущие, а брать из переменных, которые получены до сворачивания.
Ещё могут понадобиться WM_EXITSIZEMOVE и WM_ENTERSIZEMOVE (все ссылки тут), если размер потребуется вычислять только в конце действия. Ну и WM_GETMINMAXINFO, чтобы ограничить минимальное или максимальное размеры для развёрнутого и восстановленного состояния окна.

ещё может понадобиться что-то вроде этого:

Код:
Frm = GetSystemMetrics_(32) * 2
CpT = GetSystemMetrics_(4) + GetSystemMetrics_(33) * 2

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

Код:
SMCYCAPTION	4	Высота заголовка окна
SMCXFRAME	32	Ширина рамки для окна, размеры которого можно изменять
SMCYFRAME	33	Высота рамки для окна, размеры которого можно изменять

Отредактировано AZJIO (18.03.2021 15:28:38)

0

3

Nigri_lupus написал(а):

Чтобы узнать координаты и размеры окна после его перемещения достаточно воспользоваться WindowX() и  WindowY(). Аналогично и с его размерами - WindowWidth() и WindowHeight()
А Вот как быть, если нужно узнать координаты или размеры окна пока оно движется, т.е. пока пользователь перемещает или растягивает окно?

по условию вроде должно быть так:

Код:
Procedure SizeWindowHandler()
  Win = EventWindow()
  string$ = ~"x:" + WindowX(Win) +
            " y:" + WindowY(Win) +
            " w:" + WindowWidth(Win)  +
            " h:" + WindowHeight(Win)
  Debug string$
EndProcedure

OpenWindow(0, 100, 100, 200, 200, "Live window size", #PB_Window_SizeGadget | #PB_Window_SystemMenu)
BindEvent(#PB_Event_SizeWindow, @SizeWindowHandler())
BindEvent(#PB_Event_MoveWindow, @SizeWindowHandler())
SizeWindowHandler()

Repeat
  Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow

Отредактировано Lin (19.03.2021 01:33:55)

0

4

Lin
Да, если ничего особенного, то так и WindowBounds ещё для ограничений мин-макс размеров, что есть в представленном коде. Но для особых случаев неплохо знать и WinAPI.

0

5

AZJIO,
Надо получить размеры и координаты окна не после отпускания пользователем ЛКМ, а до...
Поэтому я и использую не WM_WINDOWPOSCHANGED и WM_WINDOWPOSCHANGING, а #WM_SIZING  и #WM_MOVING.. Они позволяют получать данные в процессе изменения.
Lin, приведенный вами код тоже выдает результат уже после того, как пользователь отпустил ЛМК.
Может, вот этот код сможет более наглядно донести мою мысль:

Код:
 
Dim FunkObrVyz(11) ; массив для коррекции координат окна
 
; FunkObrVyz(0) - номер окна
; FunkObrVyz(1) - погрешность внешней координаты по оси Х
; FunkObrVyz(2) - погрешность внешней координаты по оси Y
; FunkObrVyz(3) - погрешность внутренней ширины окна
; FunkObrVyz(4) - погрешность внутренней высоты окна
; FunkObrVyz(5) - координата внешнего Х окна
; FunkObrVyz(6) - координата внешнего Y окна
; FunkObrVyz(7) - внутренняя ширина окна
; FunkObrVyz(8) - внутренняя высота окна
; FunkObrVyz(9) - минимальнодопустимая ширина окна
; FunkObrVyz(10) - минимальнодопустимая высота окна
; FunkObrVyz(11) - флаг обновления погрешностей окна
 
FunkObrVyz(0) = 2
FunkObrVyz(5) = 100
FunkObrVyz(6) = 100
FunkObrVyz(7) = 150
FunkObrVyz(8) = 120
FunkObrVyz(9) = 90
FunkObrVyz(10) = 90
 
Procedure Change(hwnd, Msg, wParam, lParam)
  
  Shared FunkObrVyz()
  Shared My_x
  Protected *WinRect.RECT
  
  If Msg = #WM_SIZING  Or Msg = #WM_MOVING
    *WinRect = lParam
    My_x = *WinRect \ left ; х-координата левого края рамки растягивания окна
    My_y = *WinRect \ top  ; у-координата верхнего края рамки растягивания окна
    My_w = *WinRect \ right - *WinRect \ left ; приблизительная ширина при растягивании окна
    My_h = *WinRect \ bottom - *WinRect \ top ; приблизительная высота при растягивании окна
    
    If FunkObrVyz(11) = 0 ; если начато передвижение или растягивание окна
      
      ; запоминаем погрешности внешних координат
      ; и внутренних размеров окна в массив
      FunkObrVyz(1) = WindowX(FunkObrVyz(0)) - My_x
      FunkObrVyz(2) = WindowY(FunkObrVyz(0)) - My_y
      FunkObrVyz(3) = WindowWidth(FunkObrVyz(0)) - My_w
      FunkObrVyz(4) = WindowHeight(FunkObrVyz(0)) - My_h
      FunkObrVyz(11) = 1 ; флаг завершения запоминания
    EndIf
    Debug "X - "+Str(My_x) 
    Debug "Y - "+Str(My_y) 
      Debug "Width - "+Str(My_w) 
      Debug "Heigh - " +Str(My_h)
    x = My_x + FunkObrVyz(1)
    y = My_y + FunkObrVyz(2)
    w = My_w + FunkObrVyz(3)
    h = My_h + FunkObrVyz(4)
    
    ; при уменьшении окна меньше минимальнодопустимого
    ; приравниваем к минимальнодопустимым размерам
    If w < FunkObrVyz(9)
      w = FunkObrVyz(9)
    EndIf
    If h < FunkObrVyz(10)
      h = FunkObrVyz(10)
    EndIf
    
    If x <> FunkObrVyz(5) Or y <> FunkObrVyz(6) Or w <> FunkObrVyz(7) Or h <> FunkObrVyz(8)
      FunkObrVyz(5) = x
      FunkObrVyz(6) = y
      FunkObrVyz(7) = w
      FunkObrVyz(8) = h
    EndIf
  EndIf
  
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
 
If OpenWindow(FunkObrVyz(0), FunkObrVyz(5), FunkObrVyz(6), FunkObrVyz(7), FunkObrVyz(8), "Пример...", #PB_Window_SizeGadget | #PB_Window_SystemMenu)
  
  SetWindowCallback(@Change(), FunkObrVyz(0))
  
  Repeat
    Event = WaitWindowEvent()
    If Event = #PB_Event_SizeWindow Or Event = #PB_Event_MoveWindow
      Debug "Реальный икс - "+Str(WindowX(FunkObrVyz(0))) + " , Расчетный икс - " + Str(FunkObrVyz(5))
      Debug "Реальный игрек - "+Str(WindowY(FunkObrVyz(0))) + " , Расчетный игрек - " + Str(FunkObrVyz(6))
      Debug "Реальная ширина - "+Str(WindowWidth(FunkObrVyz(0))) + " , Расчетная ширина - " + Str(FunkObrVyz(7))
      Debug "Реальная высота - "+Str(WindowHeight(FunkObrVyz(0))) + " , Расчетная высота - " + Str(FunkObrVyz(8))
      FunkObrVyz(11) = 0
    EndIf
  Until Event = #PB_Event_CloseWindow
EndIf

0

6

Nigri_lupus написал(а):

...
Lin, приведенный вами код тоже выдает результат уже после того, как пользователь отпустил ЛМК.
...

Вы пишите странное!

Какая версия PB и OC?

0

7

Сие зависит не от версии ПБ и Оси, а от настройки "Отображать содержимое окна при перетаскивании"
(в одном случае работает по отпусканию, в другом при движении)

Отредактировано Kuzmat (20.03.2021 15:11:52)

0

8

Kuzmat написал(а):

Сие зависит не от версии ПБ и Оси, а от настройки "Отображать содержимое окна при перетаскивании"
(в одном случае работает по отпусканию, в другом при движении)

Спасибо, что напомнили.
Сейчас прыгаешь между линуксами и виндой и не обращаешь внимания. Вспомнил, что раньше в настройках винды первым делом обязательно выставлял максимальное быстродействие, т.е. все "галочки" эффектов  погашены.
Сейчас по пробовал такое на 24 дюймах(1920*1080), на десятке и быстро, быстро вернулся к умолчальным параметрам, глаза чуть не потекли. o.O

p.s. Всё таки техника нас избаловала. Давно живу на скромных холодных-funless целеронах, конкретно сейчас J1800, и даже забыл о том, что когда то для комфорта было желание задумываться о количестве активных экранных эффектов.

0

9

useful
Я перезагружался в винду и что-то у меня ресайз происходил при отпуске кнопки мыши в Win10x64, хотя у меня включено "Отображать содержимое окна при перетаскивании". И главное без этой галочки перетаскивание сопровождается изменением виртуального квадрата пустого-прозрачного внутри, а тут окно изменяется полое, то есть цвет окна есть, но элементы прыгают в позиции при отпуске кнопки мыши. В Linux этот же код раздвигается вместе с элементами. И что, значит не зря я давал примеры.

0

10

Kuzmat написал(а):

а от настройки "Отображать содержимое окна при перетаскивании"

ну та если настройка выключена то и окно не двигается в момент перетаскивания, а перемещается только в момент отпускания ЛКМ

0

11

Kuzmat написал(а):

Сие зависит не от версии ПБ и Оси, а от настройки "Отображать содержимое окна при перетаскивании"
(в одном случае работает по отпусканию, в другом при движении)

Отредактировано Kuzmat (Вчера 15:11:52)

Смысл кода,как раз в том,  чтобы получить координаты и размеры окна при перетаскивании или изменении, вне зависимости от настроек Windows и даже его версии.
Об этом я как раз и писал:

Nigri_lupus написал(а):

Надо получить размеры и координаты окна не после отпускания пользователем ЛКМ, а до...

вне зависимости от того, как у пользователя винды настроены...
Я немного поработал над кодом и испытал его на трех машинах с разными версиями Windows.
2 обычных стационарных машины на которых стоят windows 7 и windows 10, при этом на них разные темы(размеры и вид окон) и, разумеется разные настройки отображения. Так вот на них доработанный код работает идеально.
А вот, когда запускаю его на ноутбуке(Win 10) j,обнаруживается погрешность в расчетах.
Кстати,

Код:
Dim FunkObrVyz(116) ; массив для коррекции координат основного окна 

; FunkObrVyz(0) - номер окна 
; FunkObrVyz(1) - погрешность внешней координаты по оси Х
; FunkObrVyz(2) - погрешность внешней координаты по оси Y
; FunkObrVyz(3) - погрешность внутренней ширины   окна 
; FunkObrVyz(4) - погрешность внутренней высоты   окна 
; FunkObrVyz(5) - координата внешнего Х   окна 
; FunkObrVyz(6) - координата внешнего Y   окна 
; FunkObrVyz(7) - внутренняя ширина   окна 
; FunkObrVyz(8) - внутренняя высота   окна 
; FunkObrVyz(9) - минимальнодопустимая ширина   окна 
; FunkObrVyz(10) - минимальнодопустимая высота   окна 
; FunkObrVyz(11) - флаг обновления погрешностей   окна 
; FunkObrVyz(12) - погрешность по оси Х при перемещении   окна 

FunkObrVyz(0) = 2
FunkObrVyz(5) = 100
FunkObrVyz(6) = 100
FunkObrVyz(7) = 150
FunkObrVyz(8) = 120
FunkObrVyz(9) = 90
FunkObrVyz(10) = 90

Procedure Ghost_Change(hwnd, Msg, wParam, lParam)
  
  Shared FunkObrVyz()
  Protected *WinRect.RECT
  
  ; Расчеты при передвижении или изменении размеров   окна 
  If Msg = #WM_SIZING Or Msg = #WM_MOVING
    
    *WinRect = lParam
    My_x = *WinRect \ left ; х-координата левого края рамки растягивания 
    My_y = *WinRect \ top  ; у-координата верхнего края рамки растягивания 
    My_w = *WinRect \ right - *WinRect \ left ; ширина рамки выделения
    My_h = *WinRect \ bottom - *WinRect \ top ; высота рамки выделения
    
    If FunkObrVyz(11) = 0 ; если начато передвижение или растягивание окна 
        
        ; запоминаем погрешности внешних координат
        ; и внутренних размеров   окна скнера в массив
        FunkObrVyz(1) = WindowX(FunkObrVyz(0)) - My_x
        FunkObrVyz(2) = WindowY(FunkObrVyz(0)) - My_y
        FunkObrVyz(3) = WindowWidth(FunkObrVyz(0)) - My_w
        FunkObrVyz(4) = WindowHeight(FunkObrVyz(0)) - My_h
        FunkObrVyz(11) = 1 ; флаг завершения запоминания
      EndIf
    
    If Msg = #WM_SIZING
      x = My_x + FunkObrVyz(1) ; расчет координаты Х при изменении размеров окна
    Else
      x = My_x + FunkObrVyz(12) ; расчет координаты Х при перемещении окна
    EndIf
    
    ; расчет координаты Y , ширины и высоты окна при перемещении или изменении размеров окна 
    y = My_y
    w = My_w + FunkObrVyz(3)
    h = My_h + FunkObrVyz(4)
    
    ; при уменьшении окна  меньше минимальнодопустимого
    ; приравниваем к минимальнодопустимым размерам
    If w < FunkObrVyz(9)
      w = FunkObrVyz(9)
    EndIf
    If h < FunkObrVyz(10)
      h = FunkObrVyz(10)
    EndIf
    
    If x <> FunkObrVyz(5) Or y <> FunkObrVyz(6) Or w <> FunkObrVyz(7) Or h <> FunkObrVyz(8)
      FunkObrVyz(5) = x
      FunkObrVyz(6) = y
      FunkObrVyz(7) = w
      FunkObrVyz(8) = h
      ; перерисовка   окна 
       ResizeWindow(FunkObrVyz(0), FunkObrVyz(5), FunkObrVyz(6), FunkObrVyz(7), FunkObrVyz(8))
      ; Resize ОТСЛЕЖИВАЕМОГО ОКНА ВО ВРЕМЯ ФУНКЦИИ ОБРАТНОГО ВЫЗОВА НА ОТСЛЕЖИВАЕМОЕ ОКНО НЕ ВЛИЯЕТ !!!!
    EndIf
  EndIf
  
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

; Открытие   окна 
If OpenWindow(FunkObrVyz(0), FunkObrVyz(5), FunkObrVyz(6), FunkObrVyz(7), FunkObrVyz(8), "Пример...", #PB_Window_SizeGadget | #PB_Window_SystemMenu)

  
  ; Вычисление погрешности по X при перемещении   окна 
  FunkObrVyz(12) = GetSystemMetrics_(#SM_CXFRAME) - (WindowX(FunkObrVyz(0), #PB_Window_InnerCoordinate) - WindowX(FunkObrVyz(0)))
  
  SetWindowCallback(@Ghost_Change(), FunkObrVyz(0))
  
  Repeat
    Event = WaitWindowEvent()
    If Event = #PB_Event_SizeWindow Or Event = #PB_Event_MoveWindow

      FunkObrVyz(11) = 0
            Debug "Реальный икс - " + Str(WindowX(FunkObrVyz(0))) + " , Расчетный икс - " + Str(FunkObrVyz(5))
      Debug "Реальный игрек - " + Str(WindowY(FunkObrVyz(0))) + " , Расчетный игрек - " + Str(FunkObrVyz(6))
      Debug "Реальная ширина - " + Str(WindowWidth(FunkObrVyz(0))) + " , Расчетная ширина - " + Str(FunkObrVyz(7))
      Debug "Реальная высота - " + Str(WindowHeight(FunkObrVyz(0))) + " , Расчетная высота - " + Str(FunkObrVyz(8))
      If WindowX(FunkObrVyz(0)) <> FunkObrVyz(5) Or WindowY(FunkObrVyz(0)) <> FunkObrVyz(6) Or WindowWidth(FunkObrVyz(0)) <> FunkObrVyz(7) Or WindowHeight(FunkObrVyz(0)) <> FunkObrVyz(8)
     ;   ResizeWindow(FunkObrVyz(0), FunkObrVyz(5), FunkObrVyz(6), FunkObrVyz(7), FunkObrVyz(8))
        FunkObrVyz(13) =  WindowX(FunkObrVyz(0)) 
 
      EndIf
    EndIf
  Until Event = #PB_Event_CloseWindow
EndIf 
 

А надо бы сделать код универсальным, т.е. под любую из версий Windows и с любыми настройками...
В конце-то концов сам-то Windows "знает" где и с какими размерами он будет рисовать окно, если пользователь сейчас отпустит мышь. Иначе бы окно не моло бы быть нарисованным :-)

0

12

Nigri_lupus написал(а):

Надо получить размеры и координаты окна не после отпускания пользователем ЛКМ, а до...

Nigri_lupus написал(а):

Lin, приведенный вами код тоже выдает результат уже после того, как пользователь отпустил ЛМК.

https://mega.nz/file/fWgCxIqT#i0_N-NAZb … ZSt9YMSo5A
чтото я запутался, может кто-то мне объяснить что хочет человек?

Отредактировано Lin (22.03.2021 02:52:55)

0

13

Nigri_lupus написал(а):
Код:
; FunkObrVyz(0) - номер окна 
; FunkObrVyz(1) - погрешность внешней координаты по оси Х
; FunkObrVyz(2) - погрешность внешней координаты по оси Y
; FunkObrVyz(3) - погрешность внутренней ширины   окна 
; FunkObrVyz(4) - погрешность внутренней высоты   окна 
; FunkObrVyz(5) - координата внешнего Х   окна 
; FunkObrVyz(6) - координата внешнего Y   окна 
; FunkObrVyz(7) - внутренняя ширина   окна 
; FunkObrVyz(8) - внутренняя высота   окна 
; FunkObrVyz(9) - минимальнодопустимая ширина   окна 
; FunkObrVyz(10) - минимальнодопустимая высота   окна 
; FunkObrVyz(11) - флаг обновления погрешностей   окна 
; FunkObrVyz(12) - погрешность по оси Х при перемещении   окна

Удобнее будет использовать структуру https://www.purebasic.com/documentation … tures.html

0

14

Lin, Вероятно, ответ на Ваш вопрос станет более очевидным, если:
1. в windows отключить настройку - "Отображать содержимое окна при перетаскивании"
2. Добавить в мой код, после строки:   

Код:
If x <> FunkObrVyz(5) Or y <> FunkObrVyz(6) Or w <> FunkObrVyz(7) Or h <> FunkObrVyz(8)

   строчку:   

Код:
SetWindowTitle(FunkObrVyz(0) ,"X - " + Str(FunkObrVyz(5))+", Y - " + Str(FunkObrVyz(6))+ ", Width - " + ", Height - " + Str(FunkObrVyz(8)))

  Тут, каюсь - мой недочет. Сделай я это заранее, было бы сразу видно, что вычисление параметров окна идет по ходу их изменения пользователем.   
3. Прочитать мой предыдущий пост, где написано:

Nigri_lupus написал(а):

А надо бы сделать код универсальным, т.е. под любую из версий Windows и с любыми настройками...

4. просмотреть это видео:
https://disk.yandex.ru/i/12PNSXx7sU-gTg

Отредактировано Nigri_lupus (22.03.2021 17:51:47)

0

15

Пётр написал(а):

Удобнее будет использовать структуру

Пётр, спасибо за совет. Делать всё массивами - сила привычки :blush:

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Как определить координаты и размер окна во время движения?