Что нового

[Элементы GUI] Нарисовать квадрат на форме

zerobot

Новичок
Сообщения
78
Репутация
0
Всем привет!
У меня есть прозрачная форма, как нарисовать на ней квадрат(пустой внутри, видно только края) который бы двигался по форме.
К примеру есть цикл, что-то на подобии:
Код:
While 1
$X += 1
$Y += 1
WEnd


и квадрат бы находился там где указывают X и Y ( при этом координаты равны середине квадрата )

*По возможности при помощи WinApi
 
Автор
Z

zerobot

Новичок
Сообщения
78
Репутация
0
Спасибо, а можно ещё какой-нибудь пример с этой функцией?
 

Spyhunter

Знающий
Сообщения
56
Репутация
13
Спасибо, а можно ещё какой-нибудь пример с этой функцией?

Пример из справки
Код:
#include <GuiConstantsEx.au3>
#include <WinAPI.au3>

Opt('MustDeclareVars', 1)

_Main()

Func _Main()
    Local $hGUI, $hBrush, $hDC
    Local $hBrush, $hDC, $hGUI, $ptrRect, $tRect

    ; Создаёт GUI
    $hGUI = GUICreate("WinAPI", 400, 300)
    $hDC = _WinAPI_GetWindowDC($hGUI)
    GUISetState()

    $hBrush = _WinAPI_CreateSolidBrush(0x0000FF)
    $tRect = DllStructCreate($tagRECT)
    DllStructSetData($tRect, "Left", 20)
    DllStructSetData($tRect, "Top", 50)
    DllStructSetData($tRect, "Right", 200)
    DllStructSetData($tRect, "Bottom", 200)
    $ptrRect = DllStructGetPtr($tRect)
    _WinAPI_FrameRect($hDC, $ptrRect, $hBrush)

    ; Цикл выполняется, пока окно не будет закрыто
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    ; Очищает ресурсы
    _WinAPI_DeleteObject($hBrush)
    _WinAPI_ReleaseDC($hGUI, $hDC)

EndFunc
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
zerobot сказал(а):
У меня есть прозрачная форма, как нарисовать на ней квадрат(пустой внутри, видно только края) который бы двигался по форме.

Для того, чтобы что-то советовать, нужно видеть ваш код, а лучше сокращенный рабочий вариант с той самой прозрачной формой и т.д.
 
Автор
Z

zerobot

Новичок
Сообщения
78
Репутация
0
Ну вот что-то вроде этого:

Код:
$hWnd = WinWait("тут игра", "", 5) 
$aPos = ControlGetPos($hWnd, "", "") ;Получаю размеры окна игры
$tPlacement = _WinAPI_GetWindowPlacement($hWnd) 
$_XPos = DllStructGetData($tPlacement, 'rcNormalPosition', 1) ;Получаю положение окна по X
$_YPos = DllStructGetData($tPlacement, 'rcNormalPosition', 2) ;Получаю положение окна по Y
 Local $hRectangle_GUI = GUICreate("", $aPos[2], $aPos[3],$_XPos,$_YPos, $WS_POPUP, $WS_EX_TOOLWINDOW + $WS_EX_TOPMOST) ;Создаю форму прозрачную поверх игры
   GUISetBkColor(0x000000) ;Делаю её бесцветной

    Local $hMaster_Mask = _WinAPI_CreateRectRgn(0, 0, 0, 0)

    For $i = 0 To $iVerticals
        $hMask = _WinAPI_CreateRectRgn($i * $iStep, 0, ($i * $iStep) + 1,  @DesktopHeight)
        _WinAPI_CombineRgn($hMaster_Mask, $hMask, $hMaster_Mask, 2)
        _WinAPI_DeleteObject($hMask)
    Next

    For $i = 0 To $iHorizontals
        $hMask = _WinAPI_CreateRectRgn(0, $i * $iStep, @DesktopWidth, ($i * $iStep) + 1)
        _WinAPI_CombineRgn($hMaster_Mask, $hMask, $hMaster_Mask, 2)
        _WinAPI_DeleteObject($hMask)
    Next

    ; Set overall region
    _WinAPI_SetWindowRgn($hRectangle_GUI, $hMaster_Mask)

    GUISetState()


Вырезано из примера, где форма эта разрисовывалась в клетку.
А нужно вместо этого нарисовать на ней Box (т.е квадрат) который будет менять свои размеры и двигаться по форме в реальном времени.
 
Верх