Что нового

Пересчёт координат при разном разрешении экрана

BORIS09087

Новичок
Сообщения
20
Репутация
0
Всем здравствуйте. Понадобилось пересчитать координаты для для другого разрешения экрана. написал скриптик, всё работает, но...
Координаты пересчитываются дробно. Как сделать правильно? Округлять или нужна другая формула? Подскажите...

Код:
#include <GUIConstantsEx.au3>
#include <GUIComboBox.au3>
#include <ButtonConstants.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>

Local $BaseW, $BaseH, $BaseX, $BaseY, $Combo1, $Bas1, $Bas2
 
$hGUI = GUICreate("РАСЧЁТ", 220, 280, 100, 200, $WS_OVERLAPPEDWINDOW + $WS_POPUP)
GUISetBkColor(0x90EE90)
GUISetFont(10, 800, 0, "Arial Bold")
$Label1 = GUICtrlCreateLabel("ВЫБРАТЬ РАЗРЕШЕНИЕ ЭКРАНА", 20, 10, 260, 10)
GUICtrlSetFont(-1, 8, 600, 0, "Arial")
$Combo1 = GUICtrlCreateCombo ("", 20, 30, 180, 22)
GUICtrlSetData (-1, "1680х1050|1600х900|1280х1024")
$Label2 = GUICtrlCreateLabel("ВВЕСТИ КООРДИНАТУ Х", 20, 60, 260, 10)
GUICtrlSetFont(-1, 8, 600, 0, "Arial")
$Input1 = GUICtrlCreateInput("", 20, 80, 80, 22)
GUICtrlSetBkColor(-1, 0xF0E68C)
$Label3 = GUICtrlCreateLabel("ВВЕСТИ КООРДИНАТУ Y", 20, 110, 300, 10)
GUICtrlSetFont(-1, 8, 600, 0, "Arial")
$Input2 = GUICtrlCreateInput("", 20, 130, 80, 22)
GUICtrlSetBkColor(-1, 0xF0E68C)
$Button_1 = GUICtrlCreateButton("РАСЧИТАТЬ", 20, 160, 180, 22)
$Label4 = GUICtrlCreateLabel("РЕЗУЛЬТАТЫ РАСЧЁТА", 20, 190, 300, 10)
GUICtrlSetFont(-1, 8, 600, 0, "Arial")
$Input3 = GUICtrlCreateInput("", 20, 210, 80, 22)
GUICtrlSetBkColor(-1, 0xF0E68C)
$Input4 = GUICtrlCreateInput("", 20, 240, 80, 22)
GUICtrlSetBkColor(-1, 0xF0E68C)
GUISetState()
;-----------------------------------------------------------------------------------------------------

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop

    Case $Combo1
      Switch GUICtrlRead($Combo1)

        Case "1680х1050"
             Beep(2000,100)
             $Bas1 = 1680
             $Bas2 = 1050
        Case "1600х900"
             Beep(2000,100)
             $Bas1 = 1600
             $Bas2 = 900
        Case "1280х1024"
             Beep(2000,100)
             $Bas1 = 1280
             $Bas2 = 1024
      EndSwitch

        Case $Button_1
             Beep(1000,100)
             $BaseW = $Bas1
             $BaseH = $Bas2

             $BaseX = GUICtrlRead($Input1)
             $BaseY = GUICtrlRead($Input2)
             $CalcX = @DesktopWidth / $BaseW * $BaseX
             $CalcY = @DesktopHeight / $BaseH * $BaseY
             ControlSetText("РАСЧЁТ", "", $input3, $CalcX)
             ControlSetText("РАСЧЁТ", "", $input4, $CalcY)
    EndSwitch
WEnd


Сейчас перепроверил, пересчитывает неправильно(. Есть формула для пкресчёта?
 
Последнее редактирование:

IMStrelcov

CTPEJIbLLOB
Сообщения
259
Репутация
66
Сейчас перепроверил, пересчитывает неправильно(. Есть формула для пкресчёта?
Я переводил бы числа в процентное соотношение.
Код:
$BaseX = 128
$BaseY = 102
$BaseW = 1280
$BaseH = 1024

ConsoleWrite('Prev X - '& $BaseX& ', Y - '& $BaseY& ', '& $BaseW& 'x'& $BaseH&  @CRLF)

$CalcX = Round($BaseX / ($BaseW / 100))
$CalcY = Round($BaseY / ($BaseH / 100))

$BaseW = 1366
$BaseH = 768
$BaseX = Round($CalcX * ($BaseW / 100))
$BaseY = Round($CalcY * ($BaseH / 100))

ConsoleWrite('New X - '& $BaseX& ', Y - '& $BaseY& ', '& $BaseW& 'x'& $BaseH&  @CRLF)

$CalcX = Round($BaseX / ($BaseW / 100))
$CalcY = Round($BaseY / ($BaseH / 100))

$BaseW = 1280
$BaseH = 1024
$BaseX = Round($CalcX * ($BaseW / 100))
$BaseY = Round($CalcY * ($BaseH / 100))

ConsoleWrite('Prev X - '& $BaseX& ', Y - '& $BaseY& ', '& $BaseW& 'x'& $BaseH&  @CRLF)
 
Верх