Что нового

[Элементы GUI] Упрощение и оптимизация функции

by_gangster

Новичок
Сообщения
22
Репутация
0
Извиняюсь за туповатый вопрос, но можно функцию WM_NOTIFY, как то уменьшить или оптимизировать ? Может можно как-то проще сделать ?

Код:
#include <GuiRichEdit.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global $hRichEdit

Main()

Func Main()

    Local $hGui
    $hGui = GUICreate(StringTrimRight(@ScriptName, 4), 420, 350, -1, -1)
    $hRichEdit = _GUICtrlRichEdit_Create($hGui, '', 10, 10, 400, 220, _
            BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
    GUISetState()

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    _GUICtrlRichEdit_SetEventMask($hRichEdit, $ENM_LINK)

    _GUICtrlRichEdit_AutoDetectURL($hRichEdit, true)
    ;_GUICtrlRichEdit_AppendText($hRichEdit, @CR & "http://www.autoitscript.com")
	_GUICtrlRichEdit_SetText ( $hRichEdit, "http://www.autoitscript.com")
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
        EndSwitch
    WEnd
EndFunc   ;==>Main

Func WM_NOTIFY($hWnd, $iMsg, $iWparam, $iLparam)
    #forceref $hWnd, $iMsg, $iWparam
    Local $hWndFrom, $iCode, $tNMHDR, $tEnLink, $cpMin, $cpMax, $tMsgFilter
    $tNMHDR = DllStructCreate($tagNMHDR, $iLparam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
        Case $hRichEdit
            Select
                Case $iCode = $EN_LINK
                    $tMsgFilter = DllStructCreate($tagMSGFILTER, $iLparam)
                    If DllStructGetData($tMsgFilter, "msg") = $WM_LBUTTONUP Then
                        $tEnLink = DllStructCreate($tagENLINK, $iLparam)
                        $cpMin = DllStructGetData($tEnLink, "cpMin")
                        $cpMax = DllStructGetData($tEnLink, "cpMax")
                        MsgBox(4096, "", "Здесь вызов вашего веб-браузера открывающего ссылку " & _
                                _GUICtrlRichEdit_GetTextInRange($hRichEdit, $cpMin, $cpMax))
                    EndIf
            EndSelect
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc
 
A

Alofa

Гость
Код:
#include <GuiRichEdit.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global $hRichEdit, $cpMin, $cpMax

Main()

Func Main()

	Local $hGui
	$hGui = GUICreate(StringTrimRight(@ScriptName, 4), 420, 350, -1, -1)
	$hRichEdit = _GUICtrlRichEdit_Create($hGui, '', 10, 10, 400, 220, _
			BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
	GUISetState()

	GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
	_GUICtrlRichEdit_SetEventMask($hRichEdit, $ENM_LINK)

	_GUICtrlRichEdit_AutoDetectURL($hRichEdit, True)
	;_GUICtrlRichEdit_AppendText($hRichEdit, @CR & "http://www.autoitscript.com")
	_GUICtrlRichEdit_SetText($hRichEdit, "http://www.autoitscript.com")
	Do
		If $cpMax Then
			MsgBox(4096, "", "Здесь вызов вашего веб-браузера открывающего ссылку " & _
					_GUICtrlRichEdit_GetTextInRange($hRichEdit, $cpMin, $cpMax))
			MsgBox(4096+16, 'Внимание!', 'Внимательно почитайте примечания в описании функции "GUIRegisterMsg()", что там сказано про "MsgBox()"')
			$cpMax = ''
		EndIf
	Until GUIGetMsg() = $GUI_EVENT_CLOSE
EndFunc   ;==>Main

Func WM_NOTIFY($hWnd, $iMsg, $iWparam, $iLparam)
	#forceref $hWnd, $iMsg, $iWparam
	Local $tNMHDR = DllStructCreate($tagNMHDR, $iLparam)
	If ($tNMHDR.hWndFrom) = $hRichEdit And ($tNMHDR.Code) = $EN_LINK Then
		If DllStructGetData(DllStructCreate($tagMSGFILTER, $iLparam), "msg") = $WM_LBUTTONUP Then
			Local $tEnLink = DllStructCreate($tagENLINK, $iLparam)
			$cpMin = $tEnLink.cpMin
			$cpMax = $tEnLink.cpMax
			Return
		EndIf
	EndIf
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY
 
Верх