Code: Select all
* Используемые константы */
SH_FINDSCRIPT = 3;
SH_CLOSESCRIPT = 33;
SH_GETMESSAGELOOP = 13;
WM_PAINT = 15;
WSC_EDITPROC = 2;
OBJID_HSCROLL = -5;
/* Объявление переменных */
var hEditWnd = AkelPad.GetEditWnd();
var hMainWnd = AkelPad.GetMainWnd();
var hScript = AkelPad.ScriptHandle(WScript.ScriptName, SH_FINDSCRIPT);
var oSys = AkelPad.SystemFunction();
if (hScript && AkelPad.ScriptHandle(hScript, SH_GETMESSAGELOOP))
{
AkelPad.ScriptHandle(hScript, SH_CLOSESCRIPT);
}
else
{
var sSubClass = AkelPad.WindowSubClass(WSC_EDITPROC, sCallback);
AkelPad.ScriptNoMutex();
AkelPad.WindowGetMessage();
AkelPad.WindowUnsubClass(WSC_EDITPROC);
}
function sCallback(hWnd, uMsg, wParam, lParam)
{
if ((uMsg == WM_PAINT))
{
var hDC = oSys.Call("User32::GetDC", hMainWnd);
var hpenOld = oSys.Call("Gdi32::SelectObject", hDC, oSys.Call("Gdi32::GetStockObject", 19 /*DC_PEN*/));
var hbrushOld = oSys.Call("Gdi32::SelectObject", hDC, oSys.Call("Gdi32::GetStockObject", 5 /*NULL_BRUSH*/));
var psbi = AkelPad.MemAlloc(60 /*sizeof(SCROLLBARINFO)*/);
AkelPad.MemCopy(psbi, 60, 3 /*DT_DWORD*/);
oSys.Call("User32::GetScrollBarInfo", hEditWnd, OBJID_HSCROLL, psbi);
var left = AkelPad.MemRead(psbi + 4, 3 /*DT_DWORD*/);
var top = AkelPad.MemRead(psbi + 8, 3 /*DT_DWORD*/);
var right = AkelPad.MemRead(psbi + 12, 3 /*DT_DWORD*/);
var bottom = AkelPad.MemRead(psbi + 16, 3 /*DT_DWORD*/);
AkelPad.MemFree(psbi);
oSys.Call("Gdi32::SetDCPenColor", hDC, HexToRGB("#CCAA00"));
oSys.Call("Gdi32::Rectangle", hDC, left, top + 100, right, top + 105);
oSys.Call("Gdi32::SelectObject", hDC, hpenOld);
oSys.Call("Gdi32::SelectObject", hDC, hbrushOld);
oSys.Call("User32::ReleaseDC", hMainWnd, hDC);
return 0;
}
}
function HexToRGB(sHex)
{
if (/^#[\da-f]{6}$/i.test(sHex))
return parseInt(sHex.substr(5, 2) + sHex.substr(3, 2) + sHex.substr(1, 2), 16);
return oSys.Call("User32::GetSysColor", 15 /*COLOR_BTNFACE*/);
}