_GuiCtrlHyperLinkCreate

  • Hallo,

    die funktion läuft leider nicht mehr, kennt die wer ?

    fehler ist:

    [autoit]

    C:\Program Files\AutoIt3\Include\GuiHyperLink.au3 (154) : ==> Subscript used with non-Array variable.:
    If $hl[0] Then
    If $hl^ ERROR

    [/autoit]

    hier mal das komplette script:

    Spoiler anzeigen
    [autoit]

    #include <FontConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #cs
    Global Const $DebugIt = 1

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $WM_SETFONT = 0x30
    Global Const $LOGPIXELSX = 88

    [/autoit] [autoit][/autoit] [autoit]

    ; font weight
    Global Const $FW_DONTCARE = 0
    Global Const $FW_THIN = 100
    Global Const $FW_EXTRALIGHT = 200
    Global Const $FW_ULTRALIGHT = 200
    Global Const $FW_LIGHT = 300
    Global Const $FW_NORMAL = 400
    Global Const $FW_REGULAR = 400
    Global Const $FW_MEDIUM = 500
    Global Const $FW_SEMIBOLD = 600
    Global Const $FW_DEMIBOLD = 600
    Global Const $FW_BOLD = 700
    Global Const $FW_EXTRABOLD = 800
    Global Const $FW_ULTRABOLD = 800
    Global Const $FW_HEAVY = 900
    Global Const $FW_BLACK = 900

    [/autoit] [autoit][/autoit] [autoit]

    ;~ lfItalic
    ;~ Specifies an italic font if set to TRUE.
    ;~ lfUnderline
    ;~ Specifies an underlined font if set to TRUE.
    ;~ lfStrikeOut
    ;~ Specifies a strikeout font if set to TRUE.

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $PROOF_QUALITY = 2
    #ce
    ;~ typedef struct tagLITEM {
    ;~ UINT mask;
    ;~ int iLink;
    ;~ UINT state;
    ;~ UINT stateMask;
    ;~ WCHAR szID[MAX_LINKID_TEXT];
    ;~ WCHAR szUrl[L_MAX_URL_LENGTH];
    ;~ } LITEM, *PLITEM;

    [/autoit] [autoit][/autoit] [autoit]

    ;~ Members

    [/autoit] [autoit][/autoit] [autoit]

    ;~ mask
    ;~ Combination of one or more of the following flags, describing the information to set or retrieve.
    ;~ LIF_ITEMINDEX
    ;~ Retrieve the numeric item index. Items are always accessed by index, therefore you must always set this flag and assign a value to iLink. To obtain the item ID you must set both LIF_ITEMINDEX and LIF_ITEMID.
    ;~ LIF_STATE
    ;~ Use stateMask to get or set the state of the link.
    ;~ LIF_ITEMID
    ;~ Specify the item by the ID value given in szID.
    ;~ LIF_URL
    ;~ Set or get the URL for this item.
    ;~ iLink
    ;~ Value of type int that contains the item index. This numeric index is used to access a SysLink control link.
    ;~ state
    ;~ Combination of one or more of the following flags, describing the state of the item.
    ;~ LIS_ENABLED
    ;~ The link can respond to user input. This is the default unless the entire control was created with WS_DISABLED. In this case, all links are disabled.
    ;~ LIS_FOCUSED
    ;~ The link has the keyboard focus. Pressing ENTER sends a NM_CLICK notification.
    ;~ LIS_VISITED
    ;~ The link has been visited by the user. Changing the URL to one that has not been visited causes this flag to be cleared.
    ;~ stateMask
    ;~ Combination of flags describing which state item to get or set. Allowable items are identical to those allowed in state.
    ;~ szID
    ;~ WCHAR string that contains the ID name. The maximum number of characters in the array is MAX_LINKID_TEXT. The ID name cannot be used to access a SysLink control link. You use the item index to access the item.
    ;~ szUrl
    ;~ WCHAR string that contains the URL represented by the link. The maximum number of characters in the array is L_MAX_URL_LENGTH.

    [/autoit] [autoit][/autoit] [autoit]

    Global $hl_hwnd[1][1]
    Global Const $ICC_LINK_CLASS = 0x8000
    Global Const $LIF_ITEMINDEX = 0x1
    Global Const $LIF_STATE = 0x2
    Global Const $LIF_URL = 0x8
    Global Const $LIF_ITEMID = 0x4
    Global Const $LIS_ENABLED = 0x2
    Global Const $LIS_FOCUSED = 0x1
    Global Const $LIS_VISITED = 0x4
    Global Const $MAX_LINKID_TEXT = 48
    Global Const $L_MAX_URL_LENGTH = (2048 + 32 + StringLen("://"))
    Global Const $WC_LINK = "SysLink"

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $COINIT_MULTITHREADED = 0x0
    Global Const $COINIT_APARTMENTTHREADED = 0x2
    Global Const $COINIT_DISABLE_OLE1DDE = 0x4
    Global Const $COINIT_SPEED_OVER_MEMORY = 0x8

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $S_OK = 0x0
    Global Const $S_FALSE = 0x1
    Global Const $OLE_E_WRONGCOMPOBJ = 0x8004000E
    Global Const $RPC_E_CHANGED_MODE = 0x80010106

    [/autoit] [autoit][/autoit] [autoit]

    ;~ Global Const $WM_USER = 0x400
    Global Const $LM_SETITEM = ($WM_USER + 0x302)
    Global Const $LM_GETIDEALHEIGHT = ($WM_USER + 0x301)
    Global Const $LM_GETITEM = ($WM_USER + 0x303)
    Global Const $LM_HITTEST = ($WM_USER + 0x300)

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $NMHDR = "int;int;int"
    Global $LITEM = "int;int;int;int;char[" & $MAX_LINKID_TEXT & "];char[" & $L_MAX_URL_LENGTH & "]"
    Global $NMLINK = $NMHDR & ";" & $LITEM

    [/autoit] [autoit][/autoit] [autoit]

    Global Enum $mask = 1, $iLink, $state, $stateMask, $szID, $szUrl

    [/autoit] [autoit][/autoit] [autoit]

    Func _GuiCtrlHyperLinkCreate($h_Gui, $s_text, $s_link, $s_LinkOn, $x = 10, $y = 10, $width = 120, $height = 20, $v_styles = -1, $v_exstyles = -1, _
    $FontName = "Arial", $FontSize = 10, $FontWeight = 400, $FontItalic = 0, $FontUnderline = 0, $FontStrikeThru = 0)
    Local $hyper_link, $hl, $l_hwnd, $style, $num_links = 0, $l
    Local $UDF_link_num = 0
    If Not IsHWnd($h_Gui) Then $h_Gui = HWnd($h_Gui)
    $style = BitOR($WS_CHILD, $WS_VISIBLE)
    If $v_styles <> - 1 Then $style = BitOR($style, $v_styles)
    If $v_exstyles = -1 Then $v_exstyles = 0
    Local $stICCE = DllStructCreate('dword;dword')
    DllStructSetData($stICCE, 1, DllStructGetSize($stICCE))
    DllStructSetData($stICCE, 2, $ICC_LINK_CLASS)
    DllCall('comctl32.dll', 'int', 'InitCommonControlsEx', 'ptr', DllStructGetPtr($stICCE))

    DllCall('ole32.dll', 'long', 'CoInitializeEx', 'int', 0, 'long', $COINIT_DISABLE_OLE1DDE)
    If IsArray($s_LinkOn) And IsArray($s_link) Then
    For $l = 0 To UBound($s_LinkOn) - 1
    $s_text = StringReplace($s_text, $s_LinkOn[$l], '<A HREF="' & $s_link[$l] & '">' & $s_LinkOn[$l] & '</A>')
    $num_links += @extended
    Next
    $hyper_link = $s_text
    ElseIf Not IsArray($s_LinkOn) And Not IsArray($s_link) Then
    $hyper_link = StringReplace($s_text, $s_LinkOn, '<A HREF="' & $s_link & '">' & $s_LinkOn & '</A>')
    $num_links = @extended
    Else
    Return SetError(4, 4, -1)
    EndIf

    $l_hwnd = DllCall("user32.dll", "long", "CreateWindowEx", "long", $v_exstyles, _
    "str", $WC_LINK, "str", $hyper_link, _
    "long", $style, "long", $x, "long", $y, "long", $width, "long", $height, _
    "hwnd", $h_Gui, "long", 0, "hwnd", 0, "long", 0)
    If Not @error Then
    If IsArray($s_LinkOn) Then
    For $y = 0 To UBound($s_link) - 1
    $hl = _GuiCtrlHyperLinkSetLink($l_hwnd[0], $s_link[$y], Default, $UDF_link_num)
    $UDF_link_num += 1
    Next
    Else

    For $x = 0 To $num_links - 1
    $hl = _GuiCtrlHyperLinkSetLink($l_hwnd[0], $s_link, Default, $UDF_link_num)
    $UDF_link_num += 1
    Next
    EndIf

    If $hl[0] Then
    _GuiCtrlHyperLinkSetFont($l_hwnd[0], $FontName, $FontSize, $FontWeight, $FontItalic, $FontUnderline, $FontStrikeThru)
    ReDim $hl_hwnd[UBound($hl_hwnd) + 1][1]
    $hl_hwnd[0][0] += 1
    $hl_hwnd[$hl_hwnd[0][0]][0] = $l_hwnd[0]
    Return $l_hwnd[0]
    Else
    ReDim $hl_hwnd[UBound($hl_hwnd) + 1][1]
    $hl_hwnd[0][0] += 1
    $hl_hwnd[$hl_hwnd[0][0]][0] = $l_hwnd[0]
    Return SetError(2, 2, $l_hwnd[0])
    EndIf
    Else
    Return SetError(1, 1, -1)
    EndIf

    Return 0
    EndFunc ;==>_GuiCtrlHyperLinkCreate

    [/autoit] [autoit][/autoit] [autoit]

    Func _GuiCtrlHyperLinkSetFont($h_hwnd, $FontName = "Arial", $FontSize = 10, $FontWeight = 400, $FontItalic = 0, $FontUnderline = 0, $FontStrikeThru = 0)
    Local $ret = DllCall("gdi32.dll", "long", "GetDeviceCaps", "long", 0, "long", $LOGPIXELSX)
    If ($ret[0] == -1) Then Return SetError(3, 3, 5)
    GUISetState(@SW_LOCK)
    Local $lfHeight = Round(($FontSize * $ret[2]) / 72, 0)
    Local $font = DllStructCreate("int;int;int;int;int;byte;byte;byte;byte;byte;byte;byte;byte;char[32]")
    DllStructSetData($font, 1, $lfHeight + 1)
    DllStructSetData($font, 5, $FontWeight)
    DllStructSetData($font, 6, $FontItalic)
    DllStructSetData($font, 7, $FontUnderline)
    DllStructSetData($font, 8, $FontStrikeThru)
    DllStructSetData($font, 12, $PROOF_QUALITY)
    DllStructSetData($font, 14, $FontName)
    $ret = DllCall("gdi32.dll", "long", "CreateFontIndirect", "long", DllStructGetPtr($font))

    DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_hwnd, "int", $WM_SETFONT, "long", $ret[0], "int", True)
    GUISetState(@SW_UNLOCK)
    EndFunc ;==>_GuiCtrlHyperLinkSetFont

    [/autoit] [autoit][/autoit] [autoit]

    Func _GuiCtrlHyperLinkSetLink($l_hwnd, $s_link, $v_state = -1, $UDF_link_num = 0)
    Local $hl, $s_szID, $link, $v_mask
    If $v_state = -1 Then
    $v_mask = BitOR($LIF_URL, $LIF_ITEMINDEX, $LIF_ITEMID)
    Else
    $v_mask = BitOR($LIF_URL, $LIF_ITEMINDEX, $LIF_STATE, $LIF_ITEMID)
    EndIf
    $s_szID = StringFormat("%-" & $MAX_LINKID_TEXT & "s", "UDF Maniac HyperLink " & $UDF_link_num + 1)
    $link = DllStructCreate($LITEM)
    DllStructSetData($link, $mask, $v_mask)
    DllStructSetData($link, $iLink, $UDF_link_num)
    If $v_state <> - 1 Then
    DllStructSetData($link, $state, $v_state)
    DllStructSetData($link, $stateMask, $v_state)
    EndIf
    DllStructSetData($link, $szID, $s_szID)
    DllStructSetData($link, $szUrl, $s_link)
    $hl = DllCall("user32.dll", "int", "SendMessage", "hwnd", $l_hwnd, "int", $LM_SETITEM, "int", 0, "ptr", DllStructGetPtr($link))
    Return $hl
    EndFunc ;==>_GuiCtrlHyperLinkSetLink

    [/autoit] [autoit][/autoit] [autoit]

    Func _GuiCtrlHyperLinkGetLinkInfo($l_hwnd, $UDF_link_num = 0)
    Local $hl, $s_szID, $link
    $s_szID = StringFormat("%-" & $MAX_LINKID_TEXT & "s", "UDF Maniac HyperLink " & $UDF_link_num + 1)
    $link = DllStructCreate($LITEM)
    DllStructSetData($link, $mask, BitOR($LIF_URL, $LIF_ITEMINDEX, $LIF_STATE, $LIF_ITEMID))
    DllStructSetData($link, $iLink, $UDF_link_num)
    DllStructSetData($link, $stateMask, BitOR($LIS_ENABLED, $LIS_FOCUSED, $LIS_VISITED))
    $hl = DllCall("user32.dll", "int", "SendMessage", "hwnd", $l_hwnd, "int", $LM_GETITEM, "int", 0, "ptr", DllStructGetPtr($link))
    If Not $hl[0] Then Return SetError(1, 1, 0)
    Return StringSplit(DllStructGetData($link, $state) & "|" & DllStructGetData($link, $szID) & "|" & DllStructGetData($link, $szUrl), "|")
    EndFunc ;==>_GuiCtrlHyperLinkGetLinkInfo

    [/autoit]