File "Highlighter.inc"
Path: /HotKeyMgr/inc/Highlighter.inc
File size: 5.85 KB
MIME-type:
Charset: utf-8
%HLTdelta = 40
'--------------------------------------------------------------------------------
GLOBAL OldHLTProc AS LONG
'--------------------------------------------------------------------------------
'--------------------------------------------------------------------------------
SUB HighlightCurrentLine(hD AS DWORD, hlcol AS STRING)
LOCAL e, r AS STRING
LOCAL i, j AS LONG
' Get html code
SendString "{HOME}{SHIFT_D}{END}{SHIFT_U}{CTRL_D}c{CTRL_U}"
SLEEP 50
e = ClipBoardHtmlGet(hD)
IF LEN(e) = 0 THEN BEEP : EXIT SUB
' Handle buffer overflow
i = INSTR(e, "</html>")
IF i > 0 THEN
i = INSTR(i, e, $CRLF) + LEN($CRLF)
e = LEFT$(e, i-1)
ELSE
BEEP
?e,,EXE.NAME$
END IF
' If already highlighted: change highlight color
IF INSTR(e, "background:") > 0 AND INSTR(e, "mso-highlight:") > 0 THEN
r = e
i = INSTR(r, "background:")
WHILE i > 0
i += LEN("background:")
j = INSTR(i, r, ";")
r = LEFT$(r, i-1) + hlcol + MID$(r, j)
i = INSTR(i, r, "mso-highlight:")
j = INSTR(i, r, "'")
r = LEFT$(r, i-1) + hlcol + MID$(r, j)
i = INSTR(i, r, "background:")
WEND
' Else if not highlighted, add single highlight around fragment zone
ELSE
i = INSTR(e, "<!--StartFragment-->") + LEN("<!--StartFragment-->")
j = INSTR(i, e, "<!--EndFragment-->")
r = LEFT$(e, i-1) _
+ "<span style='background:" + hlcol _
+ ";mso-highlight:" + hlcol + "'>" _
+ MID$(e, i, j-i) _
+ "</span>" _
+ MID$(e, j)
END IF
' Update HTML clipboard header
ClipBoardHtmlUpdateHeader(r)
' Put raw result in clipboard
ClipBoardHtmlSetRaw(hD, r)
SLEEP 50
END SUB
'--------------------------------------------------------------------------------
'------------------------------------------------------------------------------
FUNCTION HLTProc(BYVAL hWnd AS LONG, BYVAL Msg AS LONG, _
BYVAL wParam AS LONG, BYVAL lParam AS LONG) AS LONG
LOCAL hDlg AS DWORD
STATIC c AS STRING
IF Msg = %WM_KEYDOWN THEN ' Key press event
c = ""
SELECT CASE wParam
CASE 96 : c = "transparent" ' 0: transparent (keydown 96)
CASE 97 : c = "aqua" ' 1: aqua (keydown 97)
CASE 98 : c = "lime" ' 2: lime (keydown 98)
CASE 99 : c = "fuchsia" ' 3: fuchsia (keydown 99)
CASE 100 : c = "yellow" ' 4: yellow (keydown 100)
END SELECT
ELSEIF Msg = %WM_KEYUP THEN ' Key release event
IF c <> "" THEN
WINDOW GET PARENT hWnd TO hDlg : hDlg = GetParent(hDlg)
DIALOG END GetParent(hWnd), -1 ' Close highlighter dialog
HighlightCurrentLine hDlg, c ' Highlight current line in OneNote
c = ""
END IF
END IF
FUNCTION = CallWindowProc(OldHLTProc, hWnd, Msg, wParam, lParam)
END FUNCTION
'------------------------------------------------------------------------------
'--------------------------------------------------------------------------------
CALLBACK FUNCTION ProcHighlight()
LOCAL hEdit AS DWORD
LOCAL i, c AS DWORD
SELECT CASE CB.MSG
CASE %WM_INITDIALOG
' Initialization handler: draw graphic
GRAPHIC ATTACH CB.HNDL, 100, REDRAW
GRAPHIC COLOR %BLACK, -1
GRAPHIC CLEAR
FOR i = 0 TO %HLTdelta*5 STEP %HLTdelta
GRAPHIC SET POS (i+5, 5)
GRAPHIC PRINT FORMAT$(i/%HLTdelta, "0");":"
SELECT CASE i/%HLTdelta
CASE 0 : c = %WHITE
CASE 1 : c = %CYAN
CASE 2 : c = %GREEN
CASE 3 : c = %MAGENTA
CASE 4 : c = %YELLOW
END SELECT
GRAPHIC BOX (i+15, 0) - (i+35, 20),, RGB(201,201,201), c
IF i = 0 THEN
GRAPHIC COLOR RGB(200,0,0), -1
GRAPHIC WIDTH 3
GRAPHIC LINE (i+15, 20) - (i+35, 0)
GRAPHIC WIDTH 1
GRAPHIC COLOR %BLACK, -1
END IF
NEXT
GRAPHIC REDRAW
' Subclass edit control
CONTROL HANDLE CB.HNDL, 102 TO hEdit
OldHLTProc = SETWINDOWLONG(hEdit, %GWL_WNDPROC, CODEPTR(HLTProc))
CONTROL SET FOCUS CB.HNDL, 102
CASE %WM_COMMAND
' Process control notifications
IF CB.CTL = %IDCANCEL THEN DIALOG END CB.HNDL, 0
END SELECT
END FUNCTION
'--------------------------------------------------------------------------------
'--------------------------------------------------------------------------------
FUNCTION ShowHighlight(BYVAL hParent AS DWORD) AS LONG
LOCAL lRes AS LONG
LOCAL hDlg AS DWORD
LOCAL hEdit AS DWORD
LOCAL hIco AS DWORD
DIALOG NEW hParent, "Highlight line", , , %HLTdelta*5+4, 32, %WS_POPUP OR _
%WS_BORDER OR %WS_DLGFRAME OR %WS_SYSMENU OR _
%WS_CLIPSIBLINGS OR %WS_VISIBLE OR %DS_MODALFRAME OR _
%DS_3DLOOK OR %DS_NOFAILCREATE OR %DS_SETFONT, %WS_EX_WINDOWEDGE OR _
%WS_EX_CONTROLPARENT OR %WS_EX_LEFT OR %WS_EX_LTRREADING OR _
%WS_EX_RIGHTSCROLLBAR, TO hDlg
hIco = ExtractIcon(GetModuleHandle(""), "shell32.dll", 133)
SetClassLong(hDlg, %GCL_HICONSM, hIco)
SetClassLong(hDlg, %GCL_HICON, hIco)
ClipBoardHtmlSet hParent, ""
CONTROL ADD GRAPHIC, hDlg, 100, "", 2, 7, %HLTdelta*5, 20
CONTROL ADD TEXTBOX, hDlg, 102, "", -1, -1, 0, 0
DIALOG SHOW MODAL hDlg, CALL ProcHighlight TO lRes
FUNCTION = lRes
END FUNCTION
'--------------------------------------------------------------------------------