Sign in to follow this  
Followers 0
liten

Transparent button

8 posts in this topic

i need help creating a transparent button, that is theier but "Not their" (because you cant see it, so if you click in the AEREA where the button is ETc, Basicly how would i make a Transparent button, i tried winsetrans, then i reliezed, it said win...........ETC, i need help any one with knowledege on this (not english spelling bad)


My UDF:Freeze.au3-Freeze values like CE, ML, ETC[i][/i][u][/u]

Share this post


Link to post
Share on other sites



You can use _WinAPI_PtInRect() function to determine if mouse click coordinates are within a rectangular area like:

#include <WinAPI.au3>
#include <WindowsConstants.au3>

If Not IsDeclared('WM_LBUTTONDOWN') Then Global Const $WM_LBUTTONDOWN = 0x0201

Global $hGUI = GUICreate('Click in the middle', 100, 100)
Global $tRect
Global $fPress = False

$tRect = DllStructCreate($tagRECT)

DllStructSetData($tRect, 'Left', 15)
DllStructSetData($tRect, 'Top', 40)
DllStructSetData($tRect, 'Right', 80)
DllStructSetData($tRect, 'Bottom', 63)

GUISetState()
GUIRegisterMsg($WM_LBUTTONUP, 'WM_LBUTTONUP')
GUIRegisterMsg($WM_LBUTTONDOWN, 'WM_LBUTTONDOWN')

Do
Until GUIGetMsg() = -3

GUIDelete()
Exit

Func WM_LBUTTONUP($hWnd, $iMsg, $iwParam, $ilParam)
    Local $tPoint
    
    $tPoint = DllStructCreate($tagPOINT)
    DllStructSetData($tPoint, 'X', BitAND($ilParam, 0xFFFF))
    DllStructSetData($tPoint, 'Y', Int(BitAND($ilParam, 0xFFFF0000)/65536))
    
    If _WinAPI_PtInRect($tRect, $tPoint) And $fPress Then
        MsgBox(0, 'Title', 'Text')
    EndIf
    
    $fPress = False
    Return 'GUI_RUNDEFMSG'
EndFunc

Func WM_LBUTTONDOWN($hWnd, $iMsg, $iwParam, $ilParam)
    Local $tPoint
    
    $tPoint = DllStructCreate($tagPOINT)
    DllStructSetData($tPoint, 'X', BitAND($ilParam, 0xFFFF))
    DllStructSetData($tPoint, 'Y', Int(BitAND($ilParam, 0xFFFF0000)/65536))
    
    If _WinAPI_PtInRect($tRect, $tPoint) Then $fPress = True
    
    Return 'GUI_RUNDEFMSG'
EndFunc

Share this post


Link to post
Share on other sites

#3 ·  Posted (edited)

You can use _WinAPI_PtInRect() function to determine if mouse click coordinates are within a rectangular area like:

#include <WinAPI.au3>
#include <WindowsConstants.au3>

If Not IsDeclared('WM_LBUTTONDOWN') Then Global Const $WM_LBUTTONDOWN = 0x0201

Global $hGUI = GUICreate('Click in the middle', 100, 100)
Global $tRect
Global $fPress = False

$tRect = DllStructCreate($tagRECT)

DllStructSetData($tRect, 'Left', 15)
DllStructSetData($tRect, 'Top', 40)
DllStructSetData($tRect, 'Right', 80)
DllStructSetData($tRect, 'Bottom', 63)

GUISetState()
GUIRegisterMsg($WM_LBUTTONUP, 'WM_LBUTTONUP')
GUIRegisterMsg($WM_LBUTTONDOWN, 'WM_LBUTTONDOWN')

Do
Until GUIGetMsg() = -3

GUIDelete()
Exit

Func WM_LBUTTONUP($hWnd, $iMsg, $iwParam, $ilParam)
    Local $tPoint
    
    $tPoint = DllStructCreate($tagPOINT)
    DllStructSetData($tPoint, 'X', BitAND($ilParam, 0xFFFF))
    DllStructSetData($tPoint, 'Y', Int(BitAND($ilParam, 0xFFFF0000)/65536))
    
    If _WinAPI_PtInRect($tRect, $tPoint) And $fPress Then
        MsgBox(0, 'Title', 'Text')
    EndIf
    
    $fPress = False
    Return 'GUI_RUNDEFMSG'
EndFunc

Func WM_LBUTTONDOWN($hWnd, $iMsg, $iwParam, $ilParam)
    Local $tPoint
    
    $tPoint = DllStructCreate($tagPOINT)
    DllStructSetData($tPoint, 'X', BitAND($ilParam, 0xFFFF))
    DllStructSetData($tPoint, 'Y', Int(BitAND($ilParam, 0xFFFF0000)/65536))
    
    If _WinAPI_PtInRect($tRect, $tPoint) Then $fPress = True
    
    Return 'GUI_RUNDEFMSG'
EndFunc

ok i have been messign with this and i STILL cant find out how to adjust the corrds of the click range

DllStructSetData($tRect, 'Left', 15)

DllStructSetData($tRect, 'Top', 40)

DllStructSetData($tRect, 'Right', 80)

DllStructSetData($tRect, 'Bottom', 63)

tried messing with that

EDIT:i want it to make if ANYWHERE on the gui is clicked...

Edited by liten

My UDF:Freeze.au3-Freeze values like CE, ML, ETC[i][/i][u][/u]

Share this post


Link to post
Share on other sites

#4 ·  Posted (edited)

Try thinking of it like a button that is as followed but it definitely not one:

$Btn = GUICtrlCreateButton('Button', 15, 40, 70, 23)

So if you read the function description of GUICtrlCreateButton() you'll have a clue but the rect works a little different in that it represents coordinates rather than x, y, width, height. So x+width will get you the right and the same goes to the y+height.

Edit: So you don't need it anyway:

#include <GUIConstantsEx.au3>

Global $hGUI = GUICreate('Test', 200, 200)
GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_PRIMARYUP
            MsgBox(0, 'Title', 'Text')
            
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd
Edited by Authenticity

Share this post


Link to post
Share on other sites

Ok i have 2 GUI in my script i only want to use the loop for if its clicked on one, how would i go about doing this

$GUI_EVENT_PRIMARYUP?


My UDF:Freeze.au3-Freeze values like CE, ML, ETC[i][/i][u][/u]

Share this post


Link to post
Share on other sites

Read the GUIGetMsg() function description. If specified advanced mode it returns an array that gives you more information about the event.

Share this post


Link to post
Share on other sites

i tried

While 1

$nMsg = GUIGetMsg($Gui)

Select

Case $nMsg = $GUI_EVENT_CLOSE

Exit

Case $nMsg = $GUI_EVENT_PRIMARYUP

MsgBox(0, 'Title', 'Text')

EndSelect

WEnd

and a variety of other wyas By messing with GUiGermeaasae, SO that it only get the message for one form (GUI) instead of both

No luck, any advice?


My UDF:Freeze.au3-Freeze values like CE, ML, ETC[i][/i][u][/u]

Share this post


Link to post
Share on other sites

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global $hGUI1, $hGUI2

$hGUI1 = GUICreate('Test', 200, 200)
GUISetState()
$hGUI2 = GUICreate('', 100, 100, 50, 50, $WS_CHILD, 0, $hGUI1)
GUISetState()

While 1
    Local $aMsg = GUIGetMsg(1)
    Switch $aMsg[0]
        Case $GUI_EVENT_PRIMARYUP
            If $aMsg[1] = $hGUI1 Then
                MsgBox(0, '', 'GUI1')
            Else
                MsgBox(0, '', 'GUI2')
            EndIf
            
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Next time read the function and parameters description carefully.

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0