Что нового

Вызов ToolTip на определенных кусках текста в Edit

Latoid

Знающий
Сообщения
95
Репутация
11
Помогите пожалуйста.
Вот такой пример:

Код:
#include <GuiRichEdit.au3> ; http://autoit-script.ru/index.php/topic,339.0.html
#include <GUIConstants.au3>
#Include <GuiEdit.au3>

Global $hRichEdit

Main()

Func Main()
    Local $hGui, $iMsg
    $hGui = GUICreate("Rich Edit Example", 500, 550, -1, -1)
    $hRichEdit = _GUICtrlRichEdit_Create($hGui, "This is a test." & @CRLF, 10, 10, 480, 420, _
            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, "something" & @CRLF )
    _GuiCtrlRichEdit_AppendText($hRichEdit, "Письмо имеет вложения: file://alwin.xls (256 Kb)" & @CRLF )
    While True
        $iMsg = GUIGetMsg()
        Select
            Case $iMsg = $GUI_EVENT_CLOSE
                Exit
        EndSelect
    WEnd
EndFunc   ;==>Main

Func WM_NOTIFY($hWnd, $iMsg, $iWparam, $iLparam)
    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 = $NM_HOVER
;~ 					ConsoleWrite ("howered" & @CRLF)
                Case $iCode = $EN_LINK
                    $tMsgFilter = DllStructCreate($tagEN_MSGFILTER, $iLparam)
                    If DllStructGetData($tMsgFilter, "msg") = $WM_LBUTTONUP Then
                        $tEnLink = DllStructCreate($tagENLINK, $iLparam)
                        $cpMin = DllStructGetData($tEnLink, "cpMin")
                        $cpMax = DllStructGetData($tEnLink, "cpMax")
						ConsoleWrite (StringRegExpReplace (_GuiCtrlRichEdit_GetTextInRange($hRichEdit, $cpMin, $cpMax), ".*\/", "") & @CRLF)
                    EndIf
            EndSelect
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY


При наведении мыши на кусок текста с тэгом file:// курсор меняется - значит это событие обрабатывается каким-то образом. И это хорошо, только непонятно мне где и каким образом это делается.

Моя прога хранит письма с аттачами на ftp, чтоб их можно было читать с любого компа. На компьютере может существовать локальная копия аттача (если раньше он открывался уже); может и не существовать (тогда качаем c ftp).

Итак, нужно чтоб при наведении мыши проверялось существование локальной копии файла и при ее отсутствии всплывал ToolTip с информацией, что дескать, придется качать, трафика потребим столько-то. При уводе мыши с текста с тэгом file:// ToolTip должен пропадать.
Возможно сиё сделать? Спасибо
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 381
Репутация
2 381
Re: Вызов ToolTip на определенных кусках текта в Edit

Latoid [?]
нужно чтоб при наведении мыши проверялось существование локальной копии файла и при ее отсутствии всплывал ToolTip
Код:
#include <GUIConstantsEx.au3>
#include <GUIEdit.au3>
#include <GUIRichEdit.au3> ; http://autoit-script.ru/index.php/topic,339.0.html

Global $hRichEdit
Global $iToolTipShown = 0

Main()

Func Main()
	Local $hGui, $iMsg
	$hGui = GUICreate("Rich Edit Example", 500, 550, -1, -1)
	$hRichEdit = _GUICtrlRichEdit_Create($hGui, "This is a test." & @CRLF, 10, 10, 480, 420, _
		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, "something" & @CRLF)
	_GuiCtrlRichEdit_AppendText($hRichEdit, "Письмо имеет вложения: file://alwin.xls (256 Kb)" & @CRLF)
	
	While 1
		Switch GUIGetMsg()
			Case $GUI_EVENT_CLOSE
				Exit
		EndSwitch
		
		If $iToolTipShown > 0 And TimerDiff($iToolTipShown) >= 5000 Then
			$iToolTipShown = 0
			ToolTip("")
		EndIf
	WEnd
EndFunc   ;==>Main

Func WM_NOTIFY($hWnd, $iMsg, $iWparam, $iLparam)
	Local $hWndFrom, $iCode, $tNMHDR, $tEnLink, $cpMin, $cpMax, $tMsgFilter
	Local $sFtp_File, $sLocal_File

	$tNMHDR = DllStructCreate($tagNMHDR, $iLparam)
	$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
	$iCode = DllStructGetData($tNMHDR, "Code")
	
	Switch $hWndFrom
		Case $hRichEdit
			Switch $iCode
				Case $EN_LINK
					$tMsgFilter = DllStructCreate($tagEN_MSGFILTER, $iLparam)
					$nMsg = DllStructGetData($tMsgFilter, "msg")
					
					Switch $nMsg
						Case $WM_LBUTTONUP, $WM_MOUSEMOVE
							$tEnLink = DllStructCreate($tagENLINK, $iLparam)
							$cpMin = DllStructGetData($tEnLink, "cpMin")
							$cpMax = DllStructGetData($tEnLink, "cpMax")
							
							$sFtp_File = _GuiCtrlRichEdit_GetTextInRange($hRichEdit, $cpMin, $cpMax)
							$sLocal_File = StringRegExpReplace($sFtp_File, "\A(ftp://)+", "")
							
							If $nMsg = $WM_MOUSEMOVE Then
								If Not FileExists($sLocal_File) Then
									ToolTip("Local file does not exists, you need to download this file: " & $sFtp_File, _
											0, 0, "WM_MOUSEMOVE Message", 1, 0)
									$iToolTipShown = TimerInit()
								EndIf
							Else
								ConsoleWrite("Link clicked: " & $sFtp_File & @CRLF)
							EndIf
					EndSwitch
			EndSwitch
	EndSwitch
	
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY
 
Автор
L

Latoid

Знающий
Сообщения
95
Репутация
11
Re: Вызов ToolTip на определенных кусках текта в Edit

Великолепно как всегда. Спасибо
 
Верх