peter1234 Posted December 27, 2005 Share Posted December 27, 2005 (edited) This may be too trivial to post, but it took me a while to figure it out, so I though it might be a helpful post. If someone knows of better way to do it, please post where I can look for info. In case it is not obvious, you can click through the transparent part of the upper region to drag the region under it. expandcollapse popup;*********************************************************************************** ; DRAG 2 TRANSPARENT REGIONS DEMO ; NOTES - 1. the BMP and BMP2RGN.dll must be in same folder as script for this demo ; 2. click mouse on NON-transparent part of region to be dragged ; 3. use ESC key to terminate script ; 4. BMP2RGN.dll by Larry, SetWindowRgn by Larry, GUICtrlCreatePic by Larry, _IsPressed by ezzetabi ; 5. special thanks to jonk for his great suggestion about checking focus ; 6. does not require beta AutoIt ; 7. REV: 05.12.27C ;************************************************************************************ #include <GUIConstants.au3> ;***************************** ; functions ;***************************** Func _IsPressed($hexKey) Local $aR, $bRv $hexKey = '0x' & $hexKey $aR = DllCall("user32", "int", "GetAsyncKeyState", "int", $hexKey) If $aR[0] <> 0 Then $bRv = 1 Else $bRv = 0 EndIf Return $bRv EndFunc Func Terminate() GUIDelete ( $gui1 ) GUIDelete ( $gui2 ) Exit EndFunc Func SetWindowRgn($h_win, $rgn) DllCall("user32.dll", "long", "SetWindowRgn", "hwnd", $h_win, "long", $rgn, "int", 1) EndFunc Func _DragRegion ($gui,$reg_x,$reg_y,ByRef $x,ByRef $y) Local $pos[2],$xm,$ym,$dx,$dy $pos = MouseGetPos() $xm=$pos[0] $ym=$pos[1] If ($xm<$x) or ($xm>($x+$reg_x)) then Return If ($ym<$y) or ($ym>($y+$reg_y)) then Return $dx=$xm-$x $dy=$ym-$y while _IsPressed(01) = 1 ; left mouse button $pos = MouseGetPos() $xm=$pos[0] $ym=$pos[1] $x = $xm - $dx $y = $ym - $dy WinMove ( $gui, "", $x, $y ) wend Return EndFunc ;***************************** ; inputs for gui1 ;***************************** $reg_bmp1 = "Santa.bmp" ; enter bmp to use for region $reg_x1=350 ; enter bmp x size in pixels $reg_y1=120 ; enter bmo y size in pixels $red1 = 255 ; enter red interger value of transpartent color $green1 = 255 ; enter green interger value of transpartent color $blue1 = 255 ; enter blue interger value of transpartent color $x_start1 = 50 ; enter original x coordinate to be used for region top right corner $y_start1 = 100 ; enter original y coordinate to be used for region top right corner ;***************************** ; make gui1 ;***************************** $gui1 = GUICreate("gui1",$reg_x1,$reg_y1,$x_start1,$y_start1,$WS_POPUP) GUICtrlCreatePic($reg_bmp1,0,0,$reg_x1,$reg_y1 ) $a = DLLCall(".\BMP2RGN.dll","int","BMP2RGN", _ "str",$reg_bmp1, "int",$red1, "int",$green1, "int",$blue1) SetWindowRgn($gui1, $a[0]) GUISetState(@SW_SHOW,$gui1 ) $x1=$x_start1 $y1=$y_start1 WinMove ( $gui1, "", $x1, $y1 ) $title1=WinGetTitle("") ;***************************** ; inputs for gui2 ;***************************** $reg_bmp2 = "Santa.bmp" ; enter bmp to use for region $reg_x2=350 ; enter bmp x size in pixels $reg_y2=120 ; enter bmo y size in pixels $red2 = 255 ; enter red interger value of transpartent color $green2 = 255 ; enter green interger value of transpartent color $blue2 = 255 ; enter blue interger value of transpartent color $x_start2 = 150 ; enter original x coordinate to be used for region top right corner $y_start2 = 200 ; enter original y coordinate to be used for region top right corner ;***************************** ; make gui2 ;***************************** $gui2 = GUICreate("gui2",$reg_x2,$reg_y2,$x_start2,$y_start2,$WS_POPUP) GUICtrlCreatePic($reg_bmp2,0,0,$reg_x2,$reg_y2 ) $a = DLLCall(".\BMP2RGN.dll","int","BMP2RGN", _ "str",$reg_bmp2, "int",$red2, "int",$green2, "int",$blue2) SetWindowRgn($gui2, $a[0]) GUISetState(@SW_SHOW,$gui2 ) $x2=$x_start2 $y2=$y_start2 WinMove ( $gui2, "", $x2, $y2 ) $title2=WinGetTitle("") ;***************************** ; script ;***************************** HotKeySet("{ESC}", "Terminate") while 1 If $title1=WinGetTitle("") then _DragRegion ($gui1,$reg_x1,$reg_y1,$x1,$y1) If $title2=WinGetTitle("") then _DragRegion ($gui2,$reg_x2,$reg_y2,$x2,$y2) sleep (100) wendSanta.bmpBMP2RGN.dll Edited December 28, 2005 by peter1234 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now