Что нового

Мерцание картинки при перемещении в окне GUI

mmsgeorge

Новичок
Сообщения
96
Репутация
0
Здравствуйте! При перемещении картинки в окне GUI, картинка мерцает, как убрать мерцание? Я делал задержку , а также делал, что если нет перемещения, то не записывалось новое значение координат, но не помогает, все равно мерцает..
Код:
Func peremeshenie_kartinki()
 Local $regim_koordinat_mouse = Opt("MouseCoordMode", 2)

    Local $informaciya_okna = GUIGetCursorInfo($GL_dobavit_novost)
    Local $informaciya_objekta, $informaciya_mouse, $novaya_x_pos, $novaya_y_pos

    If IsArray($informaciya_okna) And $informaciya_okna[2] = 1 And $informaciya_okna[4] = @GUI_CtrlId Then
GUICtrlSetPos ( @GUI_CtrlId, -1 ,-1,75,75)

		  $informaciya_okna = GUIGetCursorInfo($GL_dobavit_novost)
            $informaciya_objekta = ControlGetPos($GL_dobavit_novost, "", @GUI_CtrlId)
            $informaciya_mouse = MouseGetPos()
		$velx= $informaciya_mouse[0]-$informaciya_objekta[0]
$vely= $informaciya_mouse[1]-$informaciya_objekta[1]
        While IsArray($informaciya_okna) And $informaciya_okna[2] = 1

            $informaciya_okna = GUIGetCursorInfo($GL_dobavit_novost)
            $informaciya_objekta = ControlGetPos($GL_dobavit_novost, "", @GUI_CtrlId)
            $informaciya_mouse = MouseGetPos()

            $novaya_x_pos = $informaciya_mouse[0]-($informaciya_objekta[2]/2)
            $novaya_y_pos = $informaciya_mouse[1]-($informaciya_objekta[3]/2)

if $novaya_x_pos <> $informaciya_objekta[0] or  $novaya_x_pos <> $informaciya_objekta[1] then
                GUICtrlSetPos(@GUI_CtrlId, $novaya_x_pos, $novaya_y_pos)

                Sleep(50)
Else
			 Sleep(10)
EndIf
        WEnd
    EndIf

GUICtrlSetPos ( @GUI_CtrlId, -1 ,-1,120,120)
EndIf
Next
    Opt("MouseCoordMode", $regim_koordinat_mouse)
EndFunc

картинка создавалась с параметром $WS_EX_TOPMOST, так как под ней другая картинка (фон) на все окно GUI с параметром $GUI_DISABLE, фон остался в итоге
Забыл сказать, мерцание пропадает, если сделать большую задержку, но тогда пропадает плавность.
 

avtoIT

Новичок
Сообщения
94
Репутация
0
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$hGui = GUICreate ('', 350, 200, -1, -1, BitOR ($WS_BORDER, $WS_POPUP, $WS_CLIPCHILDREN))
GUICtrlCreatePic ('bck.bmp', 0, 0, 350, 200)
GUICtrlSetState (-1, $GUI_DISABLE)

$hPic = GUICtrlCreatePic ('123.bmp', 10, 10, 50, 50)


GUISetState()


While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
		Case $hPic
			_Move_Pic()
    EndSwitch
WEnd

Func _Move_Pic()
	$posMouse = GUIGetCursorInfo ($hGui)
	$posPic = ControlGetPos ('', '', $hPic)
	$raznx = $posMouse[0] - $posPic[0]
	$razny = $posMouse[1] - $posPic[1]
	While 1
		$posMouse = GUIGetCursorInfo ($hGui)
		If $posMouse[2] = 0 Or $posMouse[4] <> $hPic Then
			ExitLoop
		EndIf
		GUICtrlSetPos ($hPic, $posMouse[0] - $raznx, $posMouse[1] - $razny)
		;Sleep(10)
	WEnd
EndFunc

Вроде работает, $WS_CLIPCHILDREN, можно еще вот этот попробовать $WS_EX_COMPOSITED
 
Автор
M

mmsgeorge

Новичок
Сообщения
96
Репутация
0
avtoIT
попробую ,$WS_EX_COMPOSITED кажется только на хр
если добавить $WS_CLIPCHILDREN , то за перемещением остается шлейф, если в твоем случае отключить $WS_CLIPCHILDREN, то мерцание появляется также
 
Верх