Code: Select all
function MenuAE(hWnd, nID, nX, nY)
{
var MF_STRING = 0x0000;
var MF_GRAYED = 0x0001;
var MF_CHECKED = 0x0008;
var MF_SEPARATOR = 0x0800;
var hMenu = oSys.Call("User32::CreatePopupMenu");
var bSel = SendMessage(hWnd, 3125 /*AEM_GETSEL*/, 0, 0);
var sHelpFile = GetAkelHelpFile();
var bFont;
var bWrap;
var lpPOINT;
var nCmd;
if (nID == IDWHATE)
{
bFont = bFont1;
bWrap = bWrap1;
}
else
{
bFont = bFont2;
bWrap = bWrap2;
}
//menu from keyboard
if (nX == 0xFFFF)
{
lpPOINT = AkelPad.MemAlloc(8);
oSys.Call("User32::GetCaretPos", lpPOINT);
oSys.Call("User32::ClientToScreen", hWnd, lpPOINT);
nX = AkelPad.MemRead(_PtrAdd(lpPOINT, 0), 3 /*DT_DWORD*/);
nY = AkelPad.MemRead(_PtrAdd(lpPOINT, 4), 3 /*DT_DWORD*/) + SendMessage(hWnd, 3188 /*AEM_GETCHARSIZE*/, 0 /*AECS_HEIGHT*/, 0);
AkelPad.MemFree(lpPOINT);
}
oSys.Call("User32::AppendMenuW", hMenu, SendMessage(hWnd, 3075 /*AEM_CANUNDO*/, 0, 0) ? MF_STRING : MF_GRAYED, 1, sTxtUndo + "\tCtrl+Z");
oSys.Call("User32::AppendMenuW", hMenu, SendMessage(hWnd, 3076 /*AEM_CANREDO*/, 0, 0) ? MF_STRING : MF_GRAYED, 2, sTxtRedo + "\tCtrl+Shift+Z");
oSys.Call("User32::AppendMenuW", hMenu, MF_SEPARATOR);
oSys.Call("User32::AppendMenuW", hMenu, bSel ? MF_STRING : MF_GRAYED, 3, sTxtCut + "\tCtrl+X");
oSys.Call("User32::AppendMenuW", hMenu, bSel ? MF_STRING : MF_GRAYED, 4, sTxtCopy + "\tCtrl+C");
oSys.Call("User32::AppendMenuW", hMenu, SendMessage(hWnd, 3035 /*AEM_CANPASTE*/, 0, 0) ? MF_STRING : MF_GRAYED, 5, sTxtPaste + "\tCtrl+V");
oSys.Call("User32::AppendMenuW", hMenu, bSel ? MF_STRING : MF_GRAYED, 6, sTxtDelete + "\tDel");
oSys.Call("User32::AppendMenuW", hMenu, MF_SEPARATOR);
oSys.Call("User32::AppendMenuW", hMenu, oSys.Call("User32::GetWindowTextLengthW", hWnd) ? MF_STRING : MF_GRAYED, 7, sTxtSelAll + "\tCtrl+A");
oSys.Call("User32::AppendMenuW", hMenu, MF_SEPARATOR);
oSys.Call("User32::AppendMenuW", hMenu, bFont ? MF_CHECKED : MF_STRING, 8, sTxtAPFont + "\tCtrl+F");
oSys.Call("User32::AppendMenuW", hMenu, bWrap ? MF_CHECKED : MF_STRING, 9, sTxtWrap + "\tCtrl+U");
if (sHelpFile)
{
oSys.Call("User32::AppendMenuW", hMenu, MF_SEPARATOR);
oSys.Call("User32::AppendMenuW", hMenu, oFSO.FileExists(AkelPad.GetAkelDir(5 /*ADTYPE_SCRIPTS*/) + "\\HtmlView.js") ? MF_STRING : MF_GRAYED, 10, sHelpFile + "\tF1");
}
nCmd = oSys.Call("User32::TrackPopupMenu", hMenu, 0x180 /*TPM_NONOTIFY|TPM_RETURNCMD*/, nX, nY, 0, hWnd, 0);
oSys.Call("User32::DestroyMenu", hMenu);
if (nCmd == 1)
SendMessage(hWnd, 3077 /*AEM_UNDO*/, 0, 0);
else if (nCmd == 2)
SendMessage(hWnd, 3078 /*AEM_REDO*/, 0, 0);
else if (nCmd == 3)
SendMessage(hWnd, 3037 /*AEM_CUT*/, 0, 0);
else if (nCmd == 4)
SendMessage(hWnd, 3038 /*AEM_COPY*/, 0, 0);
else if (nCmd == 5)
SendMessage(hWnd, 3036 /*AEM_PASTE*/, 0, 0);
else if (nCmd == 6)
SendMessage(hWnd, 771 /*WM_CLEAR*/, 0, 0);
else if (nCmd == 7)
SendMessage(hWnd, 177 /*EM_SETSEL*/, 0, -1);
else if (nCmd == 8)
{
if (nID == IDWHATE)
bFont1 = ! bFont1;
else
bFont2 = ! bFont2;
SetFontAE(nID);
}
else if (nCmd == 9)
{
if (nID == IDWHATE)
bWrap1 = ! bWrap1;
else
bWrap2 = ! bWrap2;
SetWrapAE(nID);
}
else if (nCmd == 10)
AkelHelp(sHelpFile);
}
function GetAkelHelpFile()
{
var sDir = AkelPad.GetAkelDir(2 /*ADTYPE_DOCS*/) + "\";
var sFile = "";
if (AkelPad.GetLangId() == 1049 /*Russian*/)
{
if (oFSO.FileExists(sDir + "AkelHelp-Rus.htm"))
sFile = "AkelHelp-Rus.htm";
else if (oFSO.FileExists(sDir + "AkelHelp-Eng.htm"))
sFile = "AkelHelp-Eng.htm";
}
else
{
if (oFSO.FileExists(sDir + "AkelHelp-Eng.htm"))
sFile = "AkelHelp-Eng.htm";
else if (oFSO.FileExists(sDir + "AkelHelp-Rus.htm"))
sFile = "AkelHelp-Rus.htm";
}
return sFile;
}
function AkelHelp(sFile)
{
if (sFile)
{
sFile = AkelPad.GetAkelDir(2 /*ADTYPE_DOCS*/) + "\" + sFile;
if (oFSO.FileExists(AkelPad.GetAkelDir(5 /*ADTYPE_SCRIPTS*/) + "\\HtmlView.js"))
AkelPad.Call("Scripts::Main", 1, "HtmlView.js", sFile + "#ch7");
}
}
function MenuFind()
{
var MF_STRING = 0x0000;
var MF_CHECKED = 0x0008;
var MF_POPUP = 0x0010;
var MF_SEPARATOR = 0x0800;
var lpRECT = AkelPad.MemAlloc(16);
var hMenu = oSys.Call("User32::CreatePopupMenu");
var hMenu1 = oSys.Call("User32::CreatePopupMenu");
var nCmd;
oSys.Call("User32::GetWindowRect", GetDlgItem(hDlg, IDFINDB), lpRECT);
nX = AkelPad.MemRead(_PtrAdd(lpRECT, 8), 3 /*DT_DWORD*/);
nY = AkelPad.MemRead(_PtrAdd(lpRECT, 4), 3 /*DT_DWORD*/);
AkelPad.MemFree(lpRECT);
oSys.Call("User32::AppendMenuW", hMenu1, (nFindDef == 1) ? MF_CHECKED : MF_STRING, 101, sTxtNext);
oSys.Call("User32::AppendMenuW", hMenu1, (nFindDef == 2) ? MF_CHECKED : MF_STRING, 102, sTxtPrev);
oSys.Call("User32::AppendMenuW", hMenu1, (nFindDef == 3) ? MF_CHECKED : MF_STRING, 103, sTxtLast);
oSys.Call("User32::AppendMenuW", hMenu1, (nFindDef == 4) ? MF_CHECKED : MF_STRING, 104, sTxtFirst);
oSys.Call("User32::AppendMenuW", hMenu1, MF_SEPARATOR);
oSys.Call("User32::AppendMenuW", hMenu1, (nFindDef == 0) ? MF_CHECKED : MF_STRING, 100, sTxtNone);
oSys.Call("User32::AppendMenuW", hMenu, MF_STRING, 1, sTxtNext + "\tF3");
oSys.Call("User32::AppendMenuW", hMenu, MF_STRING, 2, sTxtPrev + "\tShift+F3");
oSys.Call("User32::AppendMenuW", hMenu, MF_STRING, 3, sTxtLast + "\tCtrl+F3");
oSys.Call("User32::AppendMenuW", hMenu, MF_STRING, 4, sTxtFirst + "\tCtrl+Shift+F3");
oSys.Call("User32::AppendMenuW", hMenu, MF_SEPARATOR);
oSys.Call("User32::AppendMenuW", hMenu, MF_POPUP, hMenu1, sTxtFindDef);
nCmd = oSys.Call("User32::TrackPopupMenu", hMenu, 0x1A8 /*TPM_RETURNCMD|TPM_NONOTIFY|TPM_BOTTOMALIGN|TPM_RIGHTALIGN*/, nX, nY, 0, hDlg, 0);
oSys.Call("User32::DestroyMenu", hMenu1);
oSys.Call("User32::DestroyMenu", hMenu);
if ((nCmd > 0) && (nCmd < 100))
Find(nCmd);
else if (nCmd > 99)
{
nFindDef = nCmd - 100;
SendDlgItemMessage(hDlg, IDFINDB, 12 /*WM_SETTEXT*/, 0, sTxtFind + (nFindDef ? "" : " >"));
}
}
function ReadIni()
{
try
{
eval(AkelPad.ReadFile(WScript.ScriptFullName.replace(/\.js$/i, ".ini"), 0x10 /*ADT_NOMESSAGES*/, 1200 /*UTF-16LE*/, 1));
}
catch (oError)
{}
if ((typeof nWhatH != "number") || (nWhatH < nEditMinH)) nWhatH = nEditMinH;
nDlgMinH += nWhatH - nEditMinH;
if (typeof nDlgX != "number") nDlgX = 200;
if (typeof nDlgY != "number") nDlgY = 200;
if ((typeof nDlgW != "number") || (nDlgW < nDlgMinW)) nDlgW = nDlgMinW;
if ((typeof nDlgH != "number") || (nDlgH < nDlgMinH)) nDlgH = nDlgMinH;
if (typeof bMatch != "boolean") bMatch = false;
if (typeof bWord != "boolean") bWord = false;
if (typeof bRegExp != "boolean") bRegExp = false;
if (typeof bDotNL != "boolean") bDotNL = true;
if (typeof bFunc != "boolean") bFunc = false;
if ((typeof nRange != "number") || (nRange < 0) || (nRange > 4)) nRange = 3;
if (typeof bFont1 != "boolean") bFont1 = false;
if (typeof bFont2 != "boolean") bFont2 = false;
if (typeof bWrap1 != "boolean") bWrap1 = false;
if (typeof bWrap2 != "boolean") bWrap2 = false;
if (typeof sWhat != "string") sWhat = "";
if (typeof sWith != "string") sWith = "";
if ((typeof nFindDef != "number") || (nFindDef < 1) || (nFindDef > 4)) nFindDef = 0;
if (typeof nHistLen != "number") nHistLen = 10;
if (nHistLen < 0)
nHistLen = 0;
else if (nHistLen > 99)
nHistLen = 99;
if (! (aHist instanceof Array)) aHist = [];
}
function WriteIni()
{
var lpRECT = AkelPad.MemAlloc(16);
var sText;
var i;
oSys.Call("User32::GetWindowRect", hDlg, lpRECT);
oSys.Call("User32::ScreenToClient", hMainWnd, lpRECT);
nDlgX = AkelPad.MemRead(_PtrAdd(lpRECT, 0), 3 /*DT_DWORD*/);
nDlgY = AkelPad.MemRead(_PtrAdd(lpRECT, 4), 3 /*DT_DWORD*/);
oSys.Call("User32::GetClientRect", hDlg, lpRECT);
nDlgW = AkelPad.MemRead(_PtrAdd(lpRECT, 8), 3 /*DT_DWORD*/);
nDlgH = AkelPad.MemRead(_PtrAdd(lpRECT, 12), 3 /*DT_DWORD*/);
AkelPad.MemFree(lpRECT);
sText =
'nDlgX=' + ScaleUX(nDlgX) + ';\r\n' +
'nDlgY=' + ScaleUY(nDlgY) + ';\r\n' +
'nDlgW=' + ScaleUX(nDlgW) + ';\r\n' +
'nDlgH=' + ScaleUY(nDlgH) + ';\r\n' +
'nWhatH=' + ScaleUY(nWhatH) + ';\r\n' +
'bMatch=' + bMatch + ';\r\n' +
'bWord=' + bWord + ';\r\n' +
'bRegExp=' + bRegExp + ';\r\n' +
'bDotNL=' + bDotNL + ';\r\n' +
'bFunc=' + bFunc + ';\r\n' +
'nRange=' + nRange + ';\r\n' +
'bFont1=' + bFont1 + ';\r\n' +
'bFont2=' + bFont2 + ';\r\n' +
'bWrap1=' + bWrap1 + ';\r\n' +
'bWrap2=' + bWrap2 + ';\r\n' +
'sWhat="' + EscapeStr(sWhat) + '";\r\n' +
'sWith="' + EscapeStr(sWith) + '";\r\n' +
'nFindDef=' + nFindDef + ';\r\n' +
'nHistLen=' + nHistLen + ';\r\n' +
'aHist=[';
for (i = 0; i < aHist.length; ++i)
sText += '["' + EscapeStr(aHist[i][0]) + '","' + EscapeStr(aHist[i][1]) + '","' + aHist[i][2] + '"]' + ((i == aHist.length - 1) ? '' : ',');
sText += '];\r\n';
AkelPad.WriteFile(WScript.ScriptFullName.replace(/\.js$/i, ".ini"), sText, sText.length, 1200 /*UTF-16LE*/, 1, 0x1 /*WFF_WRITEREADONLY*/);
}
function EscapeStr(sStr)
{
return sStr.replace(/[\"]/g, '\\$&').replace(/\0/g, '\\0').replace(/\t/g, '\\t').replace(/\n/g, '\\n');
}
function UnEscapeStr(sStr)
{
return sStr.replace(/(\\+)(.?)/g,
function(s0, s1, s2)
{
if (s1.length % 2)
{
if (s2 == "0") s2 = "\0";
else if (s2 == "t") s2 = "\t";
else if (s2 == "n") s2 = "\n";
return s1.substr(0, (s1.length - 1) / 2) + s2;
}
return s1.substr(0, s1.length / 2) + s2;
});
}
function GetLangStrings()
{
if (AkelPad.GetLangId(0 /*LANGID_FULL*/) == 1045) //Polish
{
sTxtDlgTitle = 'Zamień Tekst';
sTxtWhat = '&Co:';
sTxtWith = 'Czy&m:';
sTxtMatchCase = 'Uwzględnij wielkość &liter';
sTxtWholeWord = 'Całe &wyrazy';
sTxtRegExp = 'Wyrażenia ®ularne';
sTxtDotMatchesNL = '&. dopasowuje \\n';
sTxtWithFunc = 'Zamień przez f&unkcję';
sTxtRange = 'Zakres do zamiany';
sTxtBegToCaret = '&1 - Początek - Kursor';
sTxtCaretToEnd = '&2 - Kursor - Koniec';
sTxtSelection = '&3 - Zaznaczenie';
sTxtEntireDoc = '&4 - Cały dokument';
sTxtAllDocs = '&5 - Wszystkie dokum.';
sTxtReplace1 = '&Zamień jedno';
sTxtReplaceAll = 'Z&amień wszystko';
sTxtHistory = '&Historia';
sTxtTemplates = '&Szablony';
sTxtFind = 'Z&najdź';
sTxtClose = 'Zamknij';
sTxtMenu = '&Menu';
sTxtOK = 'OK';
sTxtCancel = 'Anuluj';
sTxtUndo = '&Cofnij';
sTxtRedo = '&Powtórz';
sTxtCut = '&Wytnij';
sTxtCopy = '&Kopiuj';
sTxtPaste = 'Wkl&ej';
sTxtDelete = '&Usuń';
sTxtSelAll = 'Zaznacz w&szystko';
sTxtAPFont = 'Czcionka AkelPad';
sTxtWrap = 'Zawijaj wiersze';
sTxtRemove = 'Usuń';
sTxtClear = 'Wyczyść';
sTxtHistLen = 'Długość historii';
sTxtAdd = 'Dodaj';
sTxtRename = 'Zmień nazwę';
sTxtMoveUp = 'W górę';
sTxtMoveDown = 'W dół';
sTxtName = 'Nazwa:';
sTxtNext = '&Następny';
sTxtPrev = '&Poprzedni';
sTxtLast = '&Ostatni';
sTxtFirst = 'Pier&wszy';
sTxtNone = 'Brak';
sTxtFindDef = 'Domyślne działanie "Znajdź"';
sTxtAreYouSure = 'Czy jesteś pewien ?';
sTxtNotFound = 'Nie znaleziono!';
sTxtChangedDocs = 'Zmienione dokumenty: ';
sTxtCountChanges = 'Łączna liczba zmian: ';
sTxtRegExpErr = 'Błąd składni w wyrażeniu regularnym!';
sTxtNoFuncErr = 'Nie można utworzyć funkcji Zamiany!';
sTxtNoTextErr = 'Funkcja Zamiany nie zwraca tekstu!';
sTxtRunTimeErr = 'Błąd w czasie wykonywania funkcji Zamiany:';
}
else if (AkelPad.GetLangId(0 /*LANGID_FULL*/) == 1049) //Russian
{
//translated by YuS
sTxtDlgTitle = 'Замена текста';
sTxtWhat = 'Ч&то:';
sTxtWith = 'Ч&ем:';
sTxtMatchCase = 'Учитывать &регистр';
sTxtWholeWord = 'Слово &целиком';
sTxtRegExp = 'Регулярные в&ыражения';
sTxtDotMatchesNL = '&. захватывает \\n';
sTxtWithFunc = 'Заменять на &функцию';
sTxtRange = 'Диапазон для замены';
sTxtBegToCaret = '&1 - До курсора';
sTxtCaretToEnd = '&2 - От курсора';
sTxtSelection = '&3 - В выделении';
sTxtEntireDoc = '&4 - Весь файл';
sTxtAllDocs = '&5 - Все файлы';
sTxtReplace1 = '&Заменить';
sTxtReplaceAll = 'Заменить &всё';
sTxtHistory = '&История';
sTxtTemplates = '&Шаблоны';
sTxtFind = '&Найти';
sTxtClose = 'Закрыть';
sTxtMenu = '&Меню';
sTxtOK = 'OK';
sTxtCancel = 'Отмена';
sTxtUndo = 'От&менить';
sTxtRedo = '&Повторить';
sTxtCut = '&Вырезать';
sTxtCopy = '&Копировать';
sTxtPaste = 'В&ставить';
sTxtDelete = '&Удалить';
sTxtSelAll = 'Вы&делить всё';
sTxtAPFont = 'Шрифт AkelPad';
sTxtWrap = 'Перенос строк';
sTxtRemove = 'Удалить';
sTxtClear = 'Удалить всё';
sTxtHistLen = 'Количество строк';
sTxtAdd = 'Добавить';
sTxtRename = 'Переименовать';
sTxtMoveUp = 'Вверх';
sTxtMoveDown = 'Вниз';
sTxtName = 'Имя:';
sTxtNext = 'Следующее';
sTxtPrev = 'Предыдущее';
sTxtLast = 'Последнее';
sTxtFirst = 'Первое';
sTxtNone = 'Нет';
sTxtFindDef = 'По умолчанию: "Найти ..."';
sTxtAreYouSure = 'Вы уверены ?';
sTxtNotFound = 'Не найдено!';
sTxtChangedDocs = 'Изменённые документы: ';
sTxtCountChanges = 'Количество замен: ';
sTxtRegExpErr = 'Синтаксическая ошибка в регулярном выражении!';
sTxtNoFuncErr = 'Невозможно создать функцию замены!';
sTxtNoTextErr = 'Функция замены текст не вернула!';
sTxtRunTimeErr = 'Ошибка выполнения функции замены:';
}
else
{
sTxtDlgTitle = 'Text Replace';
sTxtWhat = '&What:';
sTxtWith = 'W&ith:';
sTxtMatchCase = 'Match &case';
sTxtWholeWord = '&Whole word';
sTxtRegExp = 'Regular e&xpressions';
sTxtDotMatchesNL = '&. matches \\n';
sTxtWithFunc = 'Replace with f&unction';
sTxtRange = 'Range for Replace';
sTxtBegToCaret = '&1 - Beginning - Caret';
sTxtCaretToEnd = '&2 - Caret - End';
sTxtSelection = '&3 - Selection';
sTxtEntireDoc = '&4 - Entire document';
sTxtAllDocs = '&5 - All documents';
sTxtReplace1 = '&Replace single';
sTxtReplaceAll = 'Replace &all';
sTxtHistory = '&History';
sTxtTemplates = '&Templates';
sTxtFind = '&Find';
sTxtClose = 'Close';
sTxtMenu = '&Menu';
sTxtOK = 'OK';
sTxtCancel = 'Cancel';
sTxtUndo = '&Undo';
sTxtRedo = '&Redo';
sTxtCut = 'C&ut';
sTxtCopy = '&Copy';
sTxtPaste = '&Paste';
sTxtDelete = '&Delete';
sTxtSelAll = 'Select &all';
sTxtAPFont = 'AkelPad font';
sTxtWrap = 'Wrap lines';
sTxtRemove = 'Remove';
sTxtClear = 'Clear';
sTxtHistLen = 'History length';
sTxtAdd = 'Add';
sTxtRename = 'Rename';
sTxtMoveUp = 'Move up';
sTxtMoveDown = 'Move down';
sTxtName = 'Name:';
sTxtNext = '&Next';
sTxtPrev = '&Previous';
sTxtLast = '&Last';
sTxtFirst = '&First';
sTxtNone = 'None';
sTxtFindDef = 'Default action "Find"';
sTxtAreYouSure = 'Are you sure ?';
sTxtNotFound = 'Not found!';
sTxtChangedDocs = 'Changed documents: ';
sTxtCountChanges = 'Count of changes: ';
sTxtRegExpErr = 'Syntax error in regular expression!';
sTxtNoFuncErr = 'Can not create Replace function!';
sTxtNoTextErr = 'Replace function does not return a text!';
sTxtRunTimeErr = 'Run time error Replace function:';
}
}