Что нового

GuiSysLink UDF - Создание текста с гиперссылками средствами API

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
AutoIt: 3.3.6.1
Версия: 1.0

Категория: Система, Элементы GUI

Описание: Я не знаю, почему в AutoIt не включили поддержку элементов SysLink, но я решил это дело поправить. Данная библиотека написана по аналогии с другими GUI библиотеками от Gary Frost'а и др. Для более подробной информации см. описания ко всем функциям внутри GuiSysLink.au3. Я рекомендую сразу скопировать файлы GuiSysLink.au3 и SysLinkConstants.au3 в папку ...\AutoIt3\Include, для простоты их подключения в ваши скрипты.

Список функций:
_GUICtrlSysLink_Create
_GUICtrlSysLink_Destroy
_GUICtrlSysLink_GetIdealHeight
_GUICtrlSysLink_GetIdealSize
_GUICtrlSysLink_GetItemEnabled
_GUICtrlSysLink_GetItemFocused
_GUICtrlSysLink_GetItemHighlighted
_GUICtrlSysLink_GetItemID
_GUICtrlSysLink_GetItemState
_GUICtrlSysLink_GetItemUrl
_GUICtrlSysLink_GetItemVisited
_GUICtrlSysLink_GetText
_GUICtrlSysLink_HitTest
_GUICtrlSysLink_HitTestEx
_GUICtrlSysLink_SetItemEnabled
_GUICtrlSysLink_SetItemFocused
_GUICtrlSysLink_SetItemHighlighted
_GUICtrlSysLink_SetItemID
_GUICtrlSysLink_SetItemState
_GUICtrlSysLink_SetItemUrl
_GUICtrlSysLink_SetItemVisited
_GUICtrlSysLink_SetText

Файл(ы): SysLink.zip

Пример:
Код:
#include <GUIConstantsEx.au3>
#include <GUISysLink.au3>
#include <GUIStatusBar.au3>
#include <WindowsConstants.au3>

$Text = 'The SysLink controls provides a convenient way to embed hypertext links in a window. For more information, click <A HREF="http://msdn.microsoft.com/en-us/library/bb760706(VS.85).aspx">here</A>.' & @CRLF & @CRLF & _
		'To learn how to use the SysLink controls in AutoIt, click <A HREF="http://www.autoitscript.com/forum/">here</A>.'

$hForm = GUICreate("MyGUI", 428, 160)
$hStatusBar = _GUICtrlStatusBar_Create($hForm)
$hSysLink = _GUICtrlSysLink_Create($hForm, $Text, 10, 10, 408, 54)
$Dummy = GUICtrlCreateDummy()
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUISetState()

While 1
	_SysLink_Over()
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Dummy
			ShellExecute(_GUICtrlSysLink_GetItemUrl($hSysLink, GUICtrlRead($Dummy)))
	EndSwitch
WEnd

Func _SysLink_Over()

	Local $Link = _GUICtrlSysLink_HitTest($hSysLink)

	For $i = 0 To 1
		If $i = $Link Then
			If Not _GUICtrlSysLink_GetItemHighlighted($hSysLink, $i) Then
				_GUICtrlSysLink_SetItemHighlighted($hSysLink, $i, 1)
				_GUICtrlStatusBar_SetText($hStatusBar, _GUICtrlSysLink_GetItemUrl($hSysLink, $i))
			EndIf
		Else
			If _GUICtrlSysLink_GetItemHighlighted($hSysLink, $i) Then
				_GUICtrlSysLink_SetItemHighlighted($hSysLink, $i, 0)
				_GUICtrlStatusBar_SetText($hStatusBar, "")
			EndIf
		EndIf
	Next
EndFunc   ;==>_SysLink_Over

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)

	Local $tNMLINK = DllStructCreate($tagNMLINK, $lParam)
	Local $hFrom = DllStructGetData($tNMLINK, "hWndFrom")
	Local $ID = DllStructGetData($tNMLINK, "Code")

	Switch $hFrom
		Case $hSysLink
			Switch $ID
				Case $NM_CLICK, $NM_RETURN
					GUICtrlSendToDummy($Dummy, DllStructGetData($tNMLINK, "Link"))
			EndSwitch
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

Скриншот:

SysLink.png

Источник: GuiSysLink UDF (оффициальный форум)
Автор: Yashied
 
Верх