Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // я тут внёс изменения (AZJIO) http://akelpad.sourceforge.net/forum/viewtopic.php?p=34216&sid=bb535212a0501b1c1f55a0d84b782830#34216
- // Сложение всех целых чисел в выделенном тексте. Имя файла Calculator2.js. Смотрите изменённый Calculator.js, который вызывает Calculator2.js если строка не является правильным выражением
- // Переменные
- var hMainWnd=AkelPad.GetMainWnd();
- var nSelEnd = AkelPad.GetSelEnd();
- var pSelText=AkelPad.GetSelText();
- var nResult=0;
- var nError;
- var WM_USER=1024; // ??? кто её запрашивает
- var hEditWnd = AkelPad.GetEditWnd();
- if (!AkelPad.Include("ShowMenu.js")) WScript.Quit();
- var lpItems; // массив пунктов меню
- var nItem; // число пунктов меню
- // Получение координат меню
- var nX, nY;
- var lpRECT = AkelPad.MemAlloc(16 /*sizeof(RECT)*/);
- AkelPad.SystemFunction().Call("User32::GetWindowRect", AkelPad.GetEditWnd(), lpRECT);
- nX = AkelPad.MemRead(_PtrAdd(lpRECT, 0), 3 /*DT_DWORD*/);
- nY = AkelPad.MemRead(_PtrAdd(lpRECT, 4), 3 /*DT_DWORD*/);
- nX += (AkelPad.MemRead(_PtrAdd(lpRECT, 8), 3 /*DT_DWORD*/) - nX) / 2;
- nY += (AkelPad.MemRead(_PtrAdd(lpRECT, 12), 3 /*DT_DWORD*/) - nY) / 2;
- AkelPad.MemFree(lpRECT);
- // Конец: Получение координат меню
- if (pSelText) // если выделенно
- {
- var regexp = /\d+/g;
- var sItem;
- var sStrNum = "";
- var nCount = 0;
- while ((sItem = regexp.exec(pSelText)) != null)
- {
- sStrNum += sItem + "+";
- nCount += 1;
- }
- sStrNum = sStrNum.slice(0,-1);
- if (nCount == 0) // если нет чисел
- {
- AkelPad.MessageBox(hMainWnd, "Нет чисел", "Ошибка", 16 /*MB_ICONERROR*/);
- WScript.Quit(); // выход, ошибка же
- }
- var sep = "+"
- // Название пункта учитывать что при появлении меню можно нажать первую букву пункта, чтобы вызвать пункт (текущая раскладка клавиатуры учитывается)
- lpItems=[["+ Сложить числа", MF_NORMAL, 101],
- ["* Умножить", MF_NORMAL, 102],
- ["- Минусовать", MF_NORMAL, 103],
- ["/ Разделить", MF_NORMAL, 104]];
- nItem=ShowMenu(lpItems, POS_CURSOR, POS_CURSOR);
- // nItem=ShowMenu(lpItems, nX-250, nY-100);
- if (nItem == -1)
- WScript.Quit();
- else
- switch (lpItems[nItem][2])
- {
- /*
- case 101:
- sep = "+";
- break;
- */
- case 102:
- sep = "*";
- break;
- case 103:
- sep = "-";
- break;
- case 104:
- sep = "/";
- break;
- };
- sStrNum = sStrNum.replace(/\+/g, sep)
- // AkelPad.MessageBox(hMainWnd, sStrNum, "Ошибка", 16 /*MB_ICONERROR*/);
- try // конструкция чтобы исключить сбой кода, просто отправив обработку ошибок в блок catch
- {
- with (Math) // Выполнить с видимостью объекта Math
- {
- nResult=eval(sStrNum); // Выполнить код, то есть вычислить выражение
- }
- }
- catch (nError)
- {
- AkelPad.MessageBox(hMainWnd, nError.description, WScript.ScriptName, 16 /*MB_ICONERROR*/);
- WScript.Quit(); // выход, ошибка же
- }
- Trace(nResult, GetLangString(1));
- }
- else
- {
- // мессага типа "выдели текст"
- AkelPad.MessageBox(hMainWnd, GetLangString(0), WScript.ScriptName, 48 /*MB_ICONEXCLAMATION*/);
- }
- // Функции
- function Trace(nResult, pLabel)
- {
- var nValue;
- if (nValue=AkelPad.InputBox(hMainWnd, WScript.ScriptName, "n=" + nCount + ", " + pLabel, nResult)) // если жмём "ОК"
- {
- AkelPad.SetSel(nSelEnd, nSelEnd);
- AkelPad.ReplaceSel(" = " + nResult);
- return parseInt(nValue); // Возвращает целое число
- }
- AkelPad.SetclipboardText(nResult);
- return nResult;
- }
- function GetLangString(nStringID)
- {
- var nLangID=AkelPad.GetLangId(1 /*LANGID_PRIMARY*/);
- if (nLangID == 0x19) //LANG_RUSSIAN
- {
- if (nStringID == 0)
- return "\u041E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442\u0020\u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0439\u0020\u0442\u0435\u043A\u0441\u0442\u002E";
- if (nStringID == 1)
- return "\u0418\u0442\u043E\u0433\u043E\u0432\u044B\u0439\u0020\u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u003A";
- }
- else
- {
- if (nStringID == 0)
- return "No text selected.";
- if (nStringID == 1)
- return "Final result:";
- }
- return "";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement