Jump to content
Sign in to follow this  
MrCreatoR

GUIHyperLink - Create HyperLink controls

Recommended Posts

AutoIt version: 3.3.6.1
UDF version: 1.2

Description: This library allows easily to create HyperLink controls.
Few Label-distinctive features:


* Opening of the hyperlink/function (see bellow) is performed only after the mouse button is released, and only when the element is hovering.
* Changing of the color for visited (open) link.
* When dragging the hyperlink, mouse cursor is changed to NOT ALLOWED (indicating that link can not be dragged).
* There is ability not just to open links, but also call user function.

 

Example:

#include <GUIConstantsEx.au3>
#include "GUIHyperLink.au3"

$hGUI = GUICreate("GUICtrlHyperLink UDF Demo!", 300, 200)

$nAutoItScript_Com_HyperLink = _GUICtrlHyperLink_Create("AutoIt Official Website", 100, 50, 110, 15, 0x0000FF, 0x551A8B, _
    -1, 'http://google.com', 'Visit: www.google.com', $hGUI) ;Intentionally set as google.com, will change later

$nAutoItScript_Ru_HyperLink = _GUICtrlHyperLink_Create("AutoIt Russian Community", 90, 80, 130, 15, 0x0000FF, 0x551A8B, _
    -1, 'http://autoit-script.ru', 'Visit: www.autoit-script.ru', $hGUI)

$nCreatoRLab_HyperLink = _GUICtrlHyperLink_Create("CreatoR's Lab", 120, 110, 70, 15, 0x0000FF, 0x551A8B, _
    1, '_CreatoRLab_ShowInfo(@THIS@, ' & $hGUI & ')', 'Show website information...', $hGUI)

_GUICtrlHyperLink_SetData($nAutoItScript_Com_HyperLink, 2, 'www.autoitscript.com')
GUICtrlSetTip($nAutoItScript_Com_HyperLink, 'Visit: www.autoitscript.com')

GUISetState(@SW_SHOW, $hGUI)

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func _CreatoRLab_ShowInfo($nCtrlID, $h_GUI)
    MsgBox(64, 'Info', 'HyperLink Clicked:' & @CRLF & GUICtrlRead($nCtrlID), 0, $h_GUI)
EndFunc



Attachments:
GUIHyperLink_1.2.zip
GUICtrlHyperLink_1.1.zip
GUICtrlHyperLink_1.0.zip


Screenshot:
GUICtrlHyperLink_UDF.png

Changelog:

v1.2
* Attempt to fix the issue when sometimes script crashed with error: "Array variable has incorrect number of subscripts or subscript dimension range exceeded".

v1.1
+ Added _GUICtrlHyperLink_SetData function. Sets HyperLink control data.
* Changed example.
* Fixed "THIS" issue, now use @THIS@ instead.
* Fixed issue with receiving clicks even if the HyperLink label is under other window (the main window not active).
* Fixed issue with receiving clicks when the mouse "down click" was made not on the label control.

v1.0
First public version.

Edited by MrCreatoR

 

Spoiler

Using OS: Win 7 Professional, Using AutoIt Ver(s): 3.3.6.1 / 3.3.8.1

AutoIt_Rus_Community.png AutoIt Russian Community

My Work...

Spoiler

AutoIt_Icon_small.pngProjects: ATT - Application Translate Tool {new}| BlockIt - Block files & folders {new}| SIP - Selected Image Preview {new}| SISCABMAN - SciTE Abbreviations Manager {new}| AutoIt Path Switcher | AutoIt Menu for Opera! | YouTube Download Center! | Desktop Icons Restorator | Math Tasks | KeyBoard & Mouse Cleaner | CaptureIt - Capture Images Utility | CheckFileSize Program

AutoIt_Icon_small.pngUDFs: OnAutoItErrorRegister - Handle AutoIt critical errors {new}| AutoIt Syntax Highlight {new}| Opera Library! | Winamp Library | GetFolderToMenu | Custom_InputBox()! | _FileRun UDF | _CheckInput() UDF | _GUIInputSetOnlyNumbers() UDF | _FileGetValidName() UDF | _GUICtrlCreateRadioCBox UDF | _GuiCreateGrid() | _PathSplitByRegExp() | _GUICtrlListView_MoveItems - UDF | GUICtrlSetOnHover_UDF! | _ControlTab UDF! | _MouseSetOnEvent() UDF! | _ProcessListEx - UDF | GUICtrl_SetResizing - UDF! | Mod. for _IniString UDFs | _StringStripChars UDF | _ColorIsDarkShade UDF | _ColorConvertValue UDF | _GUICtrlTab_CoverBackground | CUI_App_UDF | _IncludeScripts UDF | _AutoIt3ExecuteCode | _DragList UDF | Mod. for _ListView_Progress | _ListView_SysLink | _GenerateRandomNumbers | _BlockInputEx | _IsPressedEx | OnAutoItExit Handler | _GUICtrlCreateTFLabel UDF | WinControlSetEvent UDF | Mod. for _DirGetSizeEx UDF
 
AutoIt_Icon_small.pngExamples: 
ScreenSaver Demo - Matrix included | Gui Drag Without pause the script | _WinAttach()! | Turn Off/On Monitor | ComboBox Handler Example | Mod. for "Thinking Box" | Cool "About" Box | TasksBar Imitation Demo

Like the Projects/UDFs/Examples? Please rate the topic (up-right corner of the post header: Rating AutoIt_Rating.gif)

* === My topics === *

==================================================
My_Userbar.gif
==================================================

 

 

 

AutoIt is simple, subtle, elegant. © AutoIt Team

Share this post


Link to post
Share on other sites

Update!

v1.1

+ Added _GUICtrlHyperLink_SetData function. Sets HyperLink control data.

* Changed example.

* Fixed "THIS" issue, now use @THIS@ instead.

* Fixed issue with recieving clicks even if the HyperLink label is under other window (the main window not active).

* Fixed issue with recieving clicks when the mouse "down click" was made not on the label control.

Please check the first post.


 

Spoiler

Using OS: Win 7 Professional, Using AutoIt Ver(s): 3.3.6.1 / 3.3.8.1

AutoIt_Rus_Community.png AutoIt Russian Community

My Work...

Spoiler

AutoIt_Icon_small.pngProjects: ATT - Application Translate Tool {new}| BlockIt - Block files & folders {new}| SIP - Selected Image Preview {new}| SISCABMAN - SciTE Abbreviations Manager {new}| AutoIt Path Switcher | AutoIt Menu for Opera! | YouTube Download Center! | Desktop Icons Restorator | Math Tasks | KeyBoard & Mouse Cleaner | CaptureIt - Capture Images Utility | CheckFileSize Program

AutoIt_Icon_small.pngUDFs: OnAutoItErrorRegister - Handle AutoIt critical errors {new}| AutoIt Syntax Highlight {new}| Opera Library! | Winamp Library | GetFolderToMenu | Custom_InputBox()! | _FileRun UDF | _CheckInput() UDF | _GUIInputSetOnlyNumbers() UDF | _FileGetValidName() UDF | _GUICtrlCreateRadioCBox UDF | _GuiCreateGrid() | _PathSplitByRegExp() | _GUICtrlListView_MoveItems - UDF | GUICtrlSetOnHover_UDF! | _ControlTab UDF! | _MouseSetOnEvent() UDF! | _ProcessListEx - UDF | GUICtrl_SetResizing - UDF! | Mod. for _IniString UDFs | _StringStripChars UDF | _ColorIsDarkShade UDF | _ColorConvertValue UDF | _GUICtrlTab_CoverBackground | CUI_App_UDF | _IncludeScripts UDF | _AutoIt3ExecuteCode | _DragList UDF | Mod. for _ListView_Progress | _ListView_SysLink | _GenerateRandomNumbers | _BlockInputEx | _IsPressedEx | OnAutoItExit Handler | _GUICtrlCreateTFLabel UDF | WinControlSetEvent UDF | Mod. for _DirGetSizeEx UDF
 
AutoIt_Icon_small.pngExamples: 
ScreenSaver Demo - Matrix included | Gui Drag Without pause the script | _WinAttach()! | Turn Off/On Monitor | ComboBox Handler Example | Mod. for "Thinking Box" | Cool "About" Box | TasksBar Imitation Demo

Like the Projects/UDFs/Examples? Please rate the topic (up-right corner of the post header: Rating AutoIt_Rating.gif)

* === My topics === *

==================================================
My_Userbar.gif
==================================================

 

 

 

AutoIt is simple, subtle, elegant. © AutoIt Team

Share this post


Link to post
Share on other sites

Has anyone ever placed a combo box above their hyperlinks in a single gui and had both selected at the same time w/ one click? I have a drop down list combo box directly above my hyperlinks and when I click anything from the combo box located above my hyperlinks - both are selected at the same time. BTW - My drop down list combo box populates on top of my hyperlinks... so that's the main issue I know... I'm just hoping their is an easy fix or workaround. - If this post shouldn't be here I apologize - Please delete it - I can always ask elsewhere. Thanks! Example here:

Edited by souldjer777

"Maybe I'm on a road that ain't been paved yet. And maybe I see a sign that ain't been made yet"
Song Title: I guess you could say
Artist: Middle Class Rut

Share this post


Link to post
Share on other sites

Update!

 

v1.2
* Attempt to fix the issue when sometimes script crashed with error: "Array variable has incorrect number of subscripts or subscript dimension range exceeded".

 

Spoiler

Using OS: Win 7 Professional, Using AutoIt Ver(s): 3.3.6.1 / 3.3.8.1

AutoIt_Rus_Community.png AutoIt Russian Community

My Work...

Spoiler

AutoIt_Icon_small.pngProjects: ATT - Application Translate Tool {new}| BlockIt - Block files & folders {new}| SIP - Selected Image Preview {new}| SISCABMAN - SciTE Abbreviations Manager {new}| AutoIt Path Switcher | AutoIt Menu for Opera! | YouTube Download Center! | Desktop Icons Restorator | Math Tasks | KeyBoard & Mouse Cleaner | CaptureIt - Capture Images Utility | CheckFileSize Program

AutoIt_Icon_small.pngUDFs: OnAutoItErrorRegister - Handle AutoIt critical errors {new}| AutoIt Syntax Highlight {new}| Opera Library! | Winamp Library | GetFolderToMenu | Custom_InputBox()! | _FileRun UDF | _CheckInput() UDF | _GUIInputSetOnlyNumbers() UDF | _FileGetValidName() UDF | _GUICtrlCreateRadioCBox UDF | _GuiCreateGrid() | _PathSplitByRegExp() | _GUICtrlListView_MoveItems - UDF | GUICtrlSetOnHover_UDF! | _ControlTab UDF! | _MouseSetOnEvent() UDF! | _ProcessListEx - UDF | GUICtrl_SetResizing - UDF! | Mod. for _IniString UDFs | _StringStripChars UDF | _ColorIsDarkShade UDF | _ColorConvertValue UDF | _GUICtrlTab_CoverBackground | CUI_App_UDF | _IncludeScripts UDF | _AutoIt3ExecuteCode | _DragList UDF | Mod. for _ListView_Progress | _ListView_SysLink | _GenerateRandomNumbers | _BlockInputEx | _IsPressedEx | OnAutoItExit Handler | _GUICtrlCreateTFLabel UDF | WinControlSetEvent UDF | Mod. for _DirGetSizeEx UDF
 
AutoIt_Icon_small.pngExamples: 
ScreenSaver Demo - Matrix included | Gui Drag Without pause the script | _WinAttach()! | Turn Off/On Monitor | ComboBox Handler Example | Mod. for "Thinking Box" | Cool "About" Box | TasksBar Imitation Demo

Like the Projects/UDFs/Examples? Please rate the topic (up-right corner of the post header: Rating AutoIt_Rating.gif)

* === My topics === *

==================================================
My_Userbar.gif
==================================================

 

 

 

AutoIt is simple, subtle, elegant. © AutoIt Team

Share this post


Link to post
Share on other sites

Hi,

I checked out your Hyperlink control after I got stuck with my own - only to find that you're doing much the same I had done, and have the same limitation: There's no keyboard interaction.  When I initially added WS_TABSTOP, I realized there was no focus indication, and things just got progressively more insane from there.

Here's a mock-up of what I ended up doing (lots of duplicate code, nothing even half-way automated):

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

$hwndWindow = GUICreate("Dialog", 300, 120); Simplified hyperlink label
$idLabelFocus = GUICtrlCreateLabel("Control with focus: ", 8, 8, 280, 17)
$idLabelActivity = GUICtrlCreateLabel("Activity: ", 8, 24, 208, 17)
$idHyperlinkG = GUICtrlCreateLabel("www.google.com", 8, 48, 200, 17, $WS_TABSTOP)
$idHyperlinkA = GUICtrlCreateLabel("www.autoitscript.com", 8, 64, 200, 17, $WS_TABSTOP)
$idButton1 = GUICtrlCreateButton("Button 1", 8, 80, 100, 17, $WS_TABSTOP)
$idButton2 = GUICtrlCreateButton("Button 2", 108, 80, 100, 17, $WS_TABSTOP)

; Change the labels to appear like hyperlinks
GUICtrlSetColor($idHyperlinkG,0x0000ff)
GUICtrlSetColor($idHyperlinkA,0x0000ff)
GUICtrlSetCursor($idHyperlinkG,0)
GUICtrlSetCursor($idHyperlinkA,0)

; Get the hyperlinks' HWNDs
Global $hwndHyperlinkG = GuiCtrlGetHandle($idHyperlinkG)
Global $hwndHyperlinkA = GuiCtrlGetHandle($idHyperlinkA)

; Initialize the focus to the first control (first tabstop?)
Global $hwndFocused
$hwndFocused = $hwndHyperlinkG

; Set the font once here.Setting the font later slightly changes the kerning ('www' widens) so pre-widen it.
GUICtrlSetFont($idHyperlinkG,-1,-1,4) ; First tabstop'd control, has focus already, underline it
GUICtrlSetFont($idHyperlinkA,-1,-1,1)

; Set up a hotkey for the TAB key (duplicate all relevant for shift-tab)
HotKeySet("{TAB}","tab")
Func tab()
  ControlSetText($hwndWindow,"",$idLabelActivity,"{TAB} pressed")

  ; Act as if this wasn't a HotKey by re-sending it with the HotKey off
  HotKeySet("{TAB}")
  Send("{TAB}")
  HotKeySet("{TAB}","tab")

  ; Get the control that has focus and cache it
  local $nnFocused = ControlGetFocus($hwndWindow)
  $hwndFocused = ControlGetHandle($hwndWindow,"",$nnFocused)
  ControlSetText($hwndWindow,"",$idLabelFocus,"Control with focus: " & $nnFocused & " (" & $hwndFocused & ")")

  ; Set up a HotKey on {ENTER} if focus is on a hyperlink, otherwise remove it
  Switch $hwndFocused
    Case $hwndHyperlinkG
      GUICtrlSetFont($idHyperlinkA,-1,-1,1)
      GUICtrlSetFont($idHyperlinkG,-1,-1,4)
      HotKeySet("{ENTER}","enter")
    Case $hwndHyperlinkA
      GUICtrlSetFont($idHyperlinkG,-1,-1,1)
      GUICtrlSetFont($idHyperlinkA,-1,-1,4)
      HotKeySet("{ENTER}","enter")
    Case Else
      GUICtrlSetFont($idHyperlinkA,-1,-1,1)
      GUICtrlSetFont($idHyperlinkG,-1,-1,1)
      HotKeySet("{ENTER}")
  EndSwitch
EndFunc

; Open hyperlinks depending on the control that last had focus.
Func enter()
  ControlSetText($hwndWindow,"",$idLabelActivity,"{ENTER} pressed")
  Switch $hwndFocused
    Case $hwndHyperlinkG
      ControlSetText($hwndWindow,"",$idLabelActivity,"Google link {ENTER}'d")
;      ShellExecute("https://www.google.com/")
    Case $hwndHyperlinkA
      ControlSetText($hwndWindow,"",$idLabelActivity,"AutoIt link {ENTER}'d")
;      ShellExecute("http://www.autoitscript.com/")
  EndSwitch
EndFunc

; Window activation handling.  Disable the TAB and ENTER hotkeys if own window is not the active window,
; re-register ENTER only if hyperlink was in focus last
GUIRegisterMsg($WM_ACTIVATE,"WM_ACTIVATE")
Func WM_ACTIVATE($hWnd,$Msg,$wParam,$lParam)
  If ($hWnd == $hwndWindow) Then
    local $nnFocused = ControlGetFocus($hwndWindow)
    If ($nnFocused == "") Then
       $nnFocused = $hwndFocused & " (cached hwnd)"
    EndIf
    ControlSetText($hwndWindow,"",$idLabelFocus,"Control with focus: " & $nnFocused)
    If ($wParam) Then
      ControlSetText($hwndWindow,"",$idLabelActivity,"Window activated")
      HotKeySet("{TAB}","tab")
      Switch $hwndFocused
        Case $hwndHyperlinkG, $hwndHyperlinkA
          HotKeySet("{ENTER}","enter")
        Case Else
          HotKeySet("{ENTER}")
      EndSwitch
    Else
      ControlSetText($hwndWindow,"",$idLabelActivity,"Window deactivated")
      HotKeySet("{TAB}")
      HotKeySet("{ENTER}")
    EndIf
  EndIf
EndFunc

; Show the GUI
GUISetState(@SW_SHOW)

; Standard handlers (e.g. clicking on the label/static control)
; Set underline as appropriate, force focus to control (click on static doesn't set focus)
While 1
  Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
       Exit
    Case $idHyperlinkG
      ControlSetText($hwndWindow,"",$idLabelActivity,"Google link clicked")
      GUICtrlSetFont($idHyperlinkA,-1,-1,1)
      GUICtrlSetFont($idHyperlinkG,-1,-1,4)
      _WinAPI_SetFocus($hwndHyperlinkG)
;      ShellExecute("https://www.google.com/")
    Case $idHyperlinkA
      ControlSetText($hwndWindow,"",$idLabelActivity,"AutoIt link clicked")
      GUICtrlSetFont($idHyperlinkA,-1,-1,4)
      GUICtrlSetFont($idHyperlinkG,-1,-1,1)
      _WinAPI_SetFocus($hwndHyperlinkA)
;      ShellExecute("http://www.autoitscript.com/")
    Case $idButton1
      ControlSetText($hwndWindow,"",$idLabelActivity,"Button 1 mashed")
      GUICtrlSetFont($idHyperlinkA,-1,-1,1)
      GUICtrlSetFont($idHyperlinkG,-1,-1,1)
    Case $idButton2
      ControlSetText($hwndWindow,"",$idLabelActivity,"Button 2 mashed")
      GUICtrlSetFont($idHyperlinkA,-1,-1,1)
      GUICtrlSetFont($idHyperlinkG,-1,-1,1)
  EndSwitch
WEnd

Perhaps a better solution could be incorporated into GUIHyperLink :)

P.S. IDC_HAND didn't show a hand cursor for me either.  Is this a known bug, or...?

Edited by kamiquasi

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  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...