Sign in to follow this  
Followers 0
cdkid

Create pic with "hotspots"

6 posts in this topic

Well, for those of you who dont know what a `hotspot' is, it's an area on a picture that when you click it something happens. Is it possible to create a picture with them? or would i have to check for mouseclicks in my While...WEnd loop, and check the position?

~cdkid


AutoIt Console written in C#. Write au3 code right at the console :D_FileWriteToLineWrite to a specific line in a file.My UDF Libraries: MySQL UDF Library version 1.6 MySQL Database UDF's for AutoItI have stopped updating the MySQL thread above, all future updates will be on my SVN. The svn location is:kan2.sytes.net/publicsvn/mysqlnote: This will still be available, but due to my new job, and school hours, am no longer developing this udf.My business: www.hirethebrain.com Hire The Brain HireTheBrain.com Computer Consulting, Design, Assembly and RepairOh no! I've commited Scriptocide!

Share this post


Link to post
Share on other sites



Well, for those of you who dont know what a `hotspot' is, it's an area on a picture that when you click it something happens. Is it possible to create a picture with them? or would i have to check for mouseclicks in my While...WEnd loop, and check the position?

~cdkid

Is the pic in a fixed place?

[center]Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.[/center]

Share this post


Link to post
Share on other sites

Yeah. I s'pose i could just detect a mouseclick, then check if the window is active, then where and do functions accordingly. Just wondering if there was a premade UDF or something.

~cdkid


AutoIt Console written in C#. Write au3 code right at the console :D_FileWriteToLineWrite to a specific line in a file.My UDF Libraries: MySQL UDF Library version 1.6 MySQL Database UDF's for AutoItI have stopped updating the MySQL thread above, all future updates will be on my SVN. The svn location is:kan2.sytes.net/publicsvn/mysqlnote: This will still be available, but due to my new job, and school hours, am no longer developing this udf.My business: www.hirethebrain.com Hire The Brain HireTheBrain.com Computer Consulting, Design, Assembly and RepairOh no! I've commited Scriptocide!

Share this post


Link to post
Share on other sites

#4 ·  Posted (edited)

Yeah. I s'pose i could just detect a mouseclick, then check if the window is active, then where and do functions accordingly. Just wondering if there was a premade UDF or something.

~cdkid

I've not seen one, but it wouldn't be too hard to do:
#include <guiconstants.au3>

$main = GUICreate('MyPic', 150, 150)
$pic = GUICtrlCreatePic('Water lilies.jpg', 0, 0)

GUISetState()

While 1
    $msg = GUIGetMsg()
    If $msg = - 3 Then Exit
    If _PicClickedHotSpot(2, 86, 23, 110, 'Left') Then MsgBox(0, 'Pic', 'You clicked the left most flower')
WEnd

Func _PicClickedHotSpot($i_XLeft, $i_YLeft, $i_XRight, $i_YRight, $s_Left_Right = 'Left', $v_Dll = 'user32.dll')
    If StringInStr($s_Left_Right, 'left') Then
        $s_Left_Right = '01'
    Else
        $s_Left_Right = '02'
    EndIf
    $v_MouseModeOpt = Opt('MouseCoordMode', 2)
    Local $a_MousePos = MouseGetPos()
    Local $a_R = DllCall($v_dll, "int", "GetAsyncKeyState", "int", '0x' & $s_Left_Right)
    If $a_MousePos[0] >= $i_XLeft And $a_MousePos[1] >= $i_YLeft _ 
        And $a_MousePos[0] <= $i_XRight And $a_MousePos[1] <= $i_YRight _ 
        And Not @error And BitAND($a_R[0], 0x8000) = 0x8000 Then
        Opt('MouseCoordMode', $v_MouseModeOpt)
        Return 1
    EndIf
    Opt('MouseCoordMode', $v_MouseModeOpt)
EndFunc
Attatched is the water_lilies jpg in case you don't have it in your sample folder.

Edit

Made it a UDF if you want to use it. See original above.

Edited by SmOke_N

[center]Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.[/center]

Share this post


Link to post
Share on other sites

Neat, thanks.

~cdkid


AutoIt Console written in C#. Write au3 code right at the console :D_FileWriteToLineWrite to a specific line in a file.My UDF Libraries: MySQL UDF Library version 1.6 MySQL Database UDF's for AutoItI have stopped updating the MySQL thread above, all future updates will be on my SVN. The svn location is:kan2.sytes.net/publicsvn/mysqlnote: This will still be available, but due to my new job, and school hours, am no longer developing this udf.My business: www.hirethebrain.com Hire The Brain HireTheBrain.com Computer Consulting, Design, Assembly and RepairOh no! I've commited Scriptocide!

Share this post


Link to post
Share on other sites

Neat, thanks.

~cdkid

Good deal...

Just one thing, as I was thinking about how nice it would be to just draw the hotspot with a DllCall, I guess you could have just made:

#include <guiconstants.au3>

$main = GUICreate('MyPic', 150, 150)
$pic = GUICtrlCreatePic('Water lilies.jpg', 0, 0)

GUISetState()

While 1
    $msg = GUIGetMsg()
    If $msg = - 3 Then Exit
    If _PicClickedHotSpot(2, 86, 23, 110, 'Left') Then MsgBox(0, 'Pic', 'You clicked the left most flower')
WEnd

Func _PicClickedHotSpot($i_XLeft, $i_YLeft, $i_XRight, $i_YRight, $s_Left_Right = 'Left', $v_Dll = 'user32.dll')
    If StringInStr($s_Left_Right, 'left') Then
        $s_Left_Right = '01'
    Else
        $s_Left_Right = '02'
    EndIf
    $v_MouseModeOpt = Opt('MouseCoordMode', 2)
    Local $a_MousePos = MouseGetPos()
    Local $a_R = DllCall($v_dll, "int", "GetAsyncKeyState", "int", '0x' & $s_Left_Right)
    If $a_MousePos[0] >= $i_XLeft And $a_MousePos[1] >= $i_YLeft _
        And $a_MousePos[0] <= $i_XRight And $a_MousePos[1] <= $i_YRight _
        And Not @error And BitAND($a_R[0], 0x8000) = 0x8000 Then
        Opt('MouseCoordMode', $v_MouseModeOpt)
        Return 1
    EndIf
    Opt('MouseCoordMode', $v_MouseModeOpt)
EndFunc
To:
#include <guiconstants.au3>

$main = GUICreate('MyPic', 150, 150)
$pic = GUICtrlCreatePic('Water lilies.jpg', 0, 0)
$label = GUICtrlCreateLabel('', 2, 86, 21, 24)

GUICtrlSetState($pic, $GUI_DISABLE)

GUISetState()

While 1
    $msg = GUIGetMsg()
    If $msg = - 3 Then Exit
    If $msg = $label Then MsgBox(0, 'Pic', 'The left most flower was clicked')
WEnd
But that wouldn't have been as much fun :):mellow:

[center]Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.[/center]

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