Das Syslink-Control bietet die Möglichkeit, Links ins Internet in einen Text einzubetten, wie das bei HTML-Seiten (mit: <a href="...">link</a>) möglich ist.
Man muss also nicht mehr einzelne Label-Controls zusammensetzen, um das zu erreichen.
Zu dem Thema gibt es schon ein paar UDFs, aber da fehlte mir immer die Möglichkeit die Schriftart und -größe anzupassen.
Bei meinem Beispiel benutze ich auch die WindowProc um die Nachrichten ($WM_NOTIFY und $WM_CTLCOLORSTATIC) auszuwerten.
AutoIt
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseX64=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <FontConstants.au3>
#include <GUIConstantsEx.au3>
#include <SendMessage.au3>
#include <StructureConstants.au3>
#include <WinAPIGdiDC.au3>
#include <WinAPIGdiInternals.au3>
#include <WinAPIHObj.au3>
#include <WinAPISysInternals.au3>
#include <WinAPISysWin.au3>
#include <WindowsConstants.au3>
Opt('GUIOnEventMode', 1)
Global Const $g_iBkColor = 0xD0D0D0
Global $g_hBkBrush = _WinAPI_CreateSolidBrush($g_iBkColor)
Global $g_hMainGui = GUICreate('Syslink example', 640, 240)
GUISetBkColor($g_iBkColor, $g_hMainGui)
GUISetOnEvent($GUI_EVENT_CLOSE, '_Exit')
Global $g_sText = 'AutoIt' & @CRLF & _
'© 1999-2022 Jonathan Bennett' & @CRLF & _
'Homepage: <a href="https://www.autoitscript.com/site/autoit/">www.autoitscript.com</a>' & @CRLF & _
'Homepage deutsch: <a href="https://autoit.de/wcf/">autoit.de</a>' & @CRLF & _
'Onlinehilfe deutsch: <a href="https://autoit.de/onlinehilfe/online/html/index.htm">autoit.de/onlinehilfe</a>'
Global $g_hSyslink = _WinAPI_CreateWindowEx(0, $WC_LINK, $g_sText, BitOR($WS_VISIBLE, $WS_CHILD, $WS_TABSTOP), 10, 10, 620, 200, $g_hMainGui)
Global $g_hFont = _WinAPI_CreateFont(32, 0, 0, 0, 400, True, False, False, $DEFAULT_CHARSET, _
$OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $PROOF_QUALITY, 0, 'Verdana')
_SendMessage($g_hSyslink, $WM_SETFONT, $g_hFont, True)
Global $g_hSyslinkProc = DllCallbackRegister('_SyslinkProc', 'ptr', 'hwnd;uint;long;ptr')
Global $g_hProcOld = _WinAPI_SetWindowLong($g_hMainGui, $GWL_WNDPROC, DllCallbackGetPtr($g_hSyslinkProc))
GUISetState(@SW_SHOW, $g_hMainGui)
WinWaitClose($g_hMainGui)
Exit
Func _Exit()
_WinAPI_SetWindowLong($g_hMainGui, $GWL_WNDPROC, $g_hProcOld)
_WinAPI_DeleteObject($g_hFont)
_WinAPI_DeleteObject($g_hBkBrush)
_WinAPI_DestroyWindow($g_hSyslink)
GUIDelete($g_hMainGui)
EndFunc ;==>_Exit
Func _SyslinkProc($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd
Local Const $tagLITEM = 'uint mask;int iLink;uint state;uint stateMask;wchar szID[48];wchar szURL[2083]'
Local Const $tagNMLINK = $tagNMHDR & ';' & $tagLITEM
Local $tNMHDR, $tNMLINK
Switch $iMsg
Case $WM_CTLCOLORSTATIC ; um die Farben beim Syslink festzulegen
Switch $lParam ; $lParam = Static-hWnd, $wParam = Static-hDC
Case $g_hSyslink
_WinAPI_SetTextColor($wParam, 0x0000FF) ; die Textfarbe fuer die Schrift (BGR-Format)
;~ _WinAPI_SetBkColor($wParam, 0x222222) ; die Hintergrundfarbe fuer die Schrift (BGR-Format)
_WinAPI_SetBkMode($wParam, $TRANSPARENT) ; der Hintergrundmodus
Return $g_hBkBrush ; der Return-Brush bestimmt die Hintergrundfarbe (ausserhalb der Schrift)
EndSwitch
Case $WM_NOTIFY ; um auf einen Mausklick oder <RETURN> auf einen Link zu reagieren
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
Switch $tNMHDR.Code
Case $NM_CLICK, $NM_RETURN
$tNMLINK = DllStructCreate($tagNMLINK, $lParam)
ShellExecute($tNMLINK.szURL)
EndSwitch
EndSwitch
Return _WinAPI_CallWindowProc($g_hProcOld, $hWnd, $iMsg, $wParam, $lParam)
EndFunc
Alles anzeigen