Advertisement
AZJIO

AkelPad скрипт сложения чисел

Jul 24th, 2019
579
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  // я тут внёс изменения (AZJIO) http://akelpad.sourceforge.net/forum/viewtopic.php?p=34216&sid=bb535212a0501b1c1f55a0d84b782830#34216
  2. // Сложение всех целых чисел в выделенном тексте. Имя файла Calculator2.js. Смотрите изменённый Calculator.js, который вызывает Calculator2.js если строка не является правильным выражением
  3.  
  4.  
  5. // Переменные
  6. var hMainWnd=AkelPad.GetMainWnd();
  7. var nSelEnd = AkelPad.GetSelEnd();
  8. var pSelText=AkelPad.GetSelText();
  9. var nResult=0;
  10. var nError;
  11. var WM_USER=1024; // ??? кто её запрашивает
  12.  
  13. var hEditWnd = AkelPad.GetEditWnd();
  14. if (!AkelPad.Include("ShowMenu.js")) WScript.Quit();
  15.  
  16. var lpItems; // массив пунктов меню
  17. var nItem; // число пунктов меню
  18.  
  19. // Получение координат меню
  20. var nX, nY;
  21. var lpRECT = AkelPad.MemAlloc(16 /*sizeof(RECT)*/);
  22.  
  23. AkelPad.SystemFunction().Call("User32::GetWindowRect", AkelPad.GetEditWnd(), lpRECT);
  24.  
  25. nX = AkelPad.MemRead(_PtrAdd(lpRECT, 0), 3 /*DT_DWORD*/);
  26. nY = AkelPad.MemRead(_PtrAdd(lpRECT, 4), 3 /*DT_DWORD*/);
  27. nX += (AkelPad.MemRead(_PtrAdd(lpRECT,  8), 3 /*DT_DWORD*/) - nX) / 2;
  28. nY += (AkelPad.MemRead(_PtrAdd(lpRECT, 12), 3 /*DT_DWORD*/) - nY) / 2;
  29.  
  30. AkelPad.MemFree(lpRECT);
  31. // Конец: Получение координат меню
  32.  
  33. if (pSelText) // если выделенно
  34. {
  35.  
  36.   var regexp = /\d+/g;
  37.   var sItem;
  38.   var sStrNum = "";
  39.   var nCount = 0;
  40.   while ((sItem = regexp.exec(pSelText)) != null)
  41.   {
  42.     sStrNum += sItem + "+";
  43.     nCount += 1;
  44.   }
  45.   sStrNum = sStrNum.slice(0,-1);
  46.  
  47.   if (nCount == 0) // если нет чисел
  48.   {
  49.     AkelPad.MessageBox(hMainWnd, "Нет чисел", "Ошибка", 16 /*MB_ICONERROR*/);
  50.     WScript.Quit(); // выход, ошибка же
  51.   }
  52.  
  53.   var sep = "+"
  54.     // Название пункта учитывать что при появлении меню можно нажать первую букву пункта, чтобы вызвать пункт (текущая раскладка клавиатуры учитывается)
  55.     lpItems=[["+ Сложить числа", MF_NORMAL, 101],
  56.              ["* Умножить", MF_NORMAL, 102],
  57.              ["- Минусовать", MF_NORMAL, 103],
  58.              ["/ Разделить", MF_NORMAL, 104]];
  59.     nItem=ShowMenu(lpItems, POS_CURSOR, POS_CURSOR);
  60.     // nItem=ShowMenu(lpItems, nX-250, nY-100);
  61.     if (nItem == -1)
  62.       WScript.Quit();
  63.     else
  64.       switch (lpItems[nItem][2])
  65.       {
  66.         /*
  67.         case 101:
  68.           sep = "+";
  69.           break;
  70.         */
  71.         case 102:
  72.           sep = "*";
  73.           break;
  74.         case 103:
  75.           sep = "-";
  76.           break;
  77.         case 104:
  78.           sep = "/";
  79.           break;
  80.       };
  81.   sStrNum = sStrNum.replace(/\+/g, sep)
  82.     // AkelPad.MessageBox(hMainWnd, sStrNum, "Ошибка", 16 /*MB_ICONERROR*/);
  83.  
  84.  
  85.  
  86.   try // конструкция чтобы исключить сбой кода, просто отправив обработку ошибок в блок catch
  87.   {
  88.     with (Math) // Выполнить с видимостью объекта Math
  89.     {
  90.       nResult=eval(sStrNum); // Выполнить код, то есть вычислить выражение
  91.     }
  92.   }
  93.   catch (nError)
  94.   {
  95.     AkelPad.MessageBox(hMainWnd, nError.description, WScript.ScriptName, 16 /*MB_ICONERROR*/);
  96.     WScript.Quit(); // выход, ошибка же
  97.   }
  98.   Trace(nResult, GetLangString(1));
  99. }
  100. else
  101. {
  102.   // мессага типа "выдели текст"
  103.   AkelPad.MessageBox(hMainWnd, GetLangString(0), WScript.ScriptName, 48 /*MB_ICONEXCLAMATION*/);
  104. }
  105.  
  106.  
  107. // Функции
  108. function Trace(nResult, pLabel)
  109. {
  110.   var nValue;
  111.  
  112.   if (nValue=AkelPad.InputBox(hMainWnd, WScript.ScriptName, "n=" + nCount + ", " + pLabel, nResult)) // если жмём "ОК"
  113.   {
  114.     AkelPad.SetSel(nSelEnd, nSelEnd);
  115.     AkelPad.ReplaceSel(" = " + nResult);
  116.     return parseInt(nValue); // Возвращает целое число
  117.   }
  118.   AkelPad.SetclipboardText(nResult);
  119.   return nResult;
  120. }
  121.  
  122. function GetLangString(nStringID)
  123. {
  124.   var nLangID=AkelPad.GetLangId(1 /*LANGID_PRIMARY*/);
  125.  
  126.   if (nLangID == 0x19) //LANG_RUSSIAN
  127.   {
  128.     if (nStringID == 0)
  129.       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";
  130.     if (nStringID == 1)
  131.       return "\u0418\u0442\u043E\u0433\u043E\u0432\u044B\u0439\u0020\u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u003A";
  132.   }
  133.   else
  134.   {
  135.     if (nStringID == 0)
  136.       return "No text selected.";
  137.     if (nStringID == 1)
  138.       return "Final result:";
  139.   }
  140.   return "";
  141. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement