AkelPad Forum Index AkelPad
Support forum
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Scripts collection
Goto page Previous  1, 2, 3, 4, 5 ... 16, 17, 18  Next
 
Post new topic   Reply to topic    AkelPad Forum Index -> Plugins
View previous topic :: View next topic  
Author Message
VladSh



Joined: 29 Nov 2006
Posts: 2610
Location: Киев, Русь

PostPosted: Mon Sep 21, 2009 8:27 am    Post subject: Reply with quote

DelInsideSpaces.js

Code:
///Delete repeated spaces inside the text
///Убирает пустые символы внутри текста
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=5577#5577
// Version: 3.5 (2011.03.22)

if (! AkelPad.Include("selCompleteLine.js")) WScript.Quit();
oCh.runWithRedraw();


function process()
{
   oCh.Text = oCh.getSelTextAll();
   oCh.Text = oCh.Text.replace(/\ {2,}/g, ' ');      //Убираем повторяющиеся пробелы
   oCh.Text = oCh.Text.replace(/\t{2,}/g, '\t');      //Убираем повторяющиеся табуляции
}


This script used selCompleteLine.js.


Last edited by VladSh on Wed Jul 20, 2011 11:09 am; edited 11 times in total
Back to top
View user's profile Send private message Visit poster's website
VladSh



Joined: 29 Nov 2006
Posts: 2610
Location: Киев, Русь

PostPosted: Wed Sep 23, 2009 3:27 pm    Post subject: Reply with quote

OpenByLSC.js

Code:
///Open by Linked, Selected or Clipboard text: file (supported the opening of scripts from AkalPad directory), folder; url, ets...
///Предназначен для открытия автовыбором:
//    • ссылок в браузере (из контекстного меню ссылок)
//    • файлов (чаще всего скриптов) в AkelPad'е (работает при выделении текста либо по содержимому буфера; поддерживается открытие скриптов из ..\Scripts\Include\
//    • папок (в Windoes Explorer'е), в т.ч. сетевых
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=5598#5598
// Version: 2.2 (2011.07.21)
//
// в меню ссылок: -"Открыть (автовыбор)" Call("Scripts::Main", 1, "OpenByLSC.js", `"%u"`)
// в диалоге скриптов для выделенного текста или того, что в буфере обмена, предлагается комбинация клавиш Alt+O

var slash = "\\";

//1. - проверяем в аргументах (L- Link); 2 - берём выделенный текст (S- Selected); 3 - берём содержимое буфера обмена (C - Clipboard)
var tObject = AkelPad.GetArgLine() || AkelPad.GetSelText() || AkelPad.GetClipboardText();

if (!tObject) WScript.Quit();

//Определяем: URL, Файл или Папка

if (tObject.indexOf("//") != -1)
{
   openbyDefault(tObject);      //URL
   WScript.Quit();
}

var nPos = tObject.indexOf("AkelFiles");
if (nPos != -1 && nPos <= 4)
   tObject = AkelPad.GetAkelDir() + correctSlashes(tObject);      //кусок (не полный путь) сущности из дирректории AkelPad'а

nPos = tObject.lastIndexOf(".");
if (nPos != -1)
{
   var nPosSlash = tObject.lastIndexOf(slash);
   if (nPosSlash < nPos)
   {   //Файл
      if (nPosSlash <= 1)      //имя скрипта из окна редактирования (и дирректории) AkelPad'а (со слэшами впереди)
         tObject = tObject.replace(/\\/gm, "");
      
      if (tObject.indexOf(slash) == -1)
         tObject = AkelPad.GetAkelDir(6) /*ADTYPE_INCLUDE*/ + slash + tObject;      //имя скрипта, например просто скопированное в буфер обмена (из ContextMenu-плагина или др.)
      
      if (!openFile(tObject, false))
      {
         tObject = tObject.substr(tObject.lastIndexOf(slash) + 1);      //выкусываем чисто имя скрипта
         tObject = AkelPad.GetAkelDir(5) /*ADTYPE_SCRIPTS*/ + slash + tObject;      //сначала искали в папке ..\Scripts\Include\, а теперь смотрим в ..\Scripts\
         openFile(tObject, true);
      }
      WScript.Quit();
   }
}

//Папка
openbyDefault(tObject);


function openbyDefault(tObject)
{
   var WshShell = new ActiveXObject("WScript.Shell");
   WshShell.Exec('rundll32.exe shell32, ShellExec_RunDLL "' + tObject + '"');
}

function openFile(tObject, bErrMsg)
{
   tObject = correctSlashes(tObject);
   
   var fso = new ActiveXObject("Scripting.FileSystemObject");
   if (fso.FileExists(tObject) == true)
   {
      AkelPad.OpenFile(tObject);
      return true;
   }
   else
   {
      if (bErrMsg) openbyDefault(tObject);
      return false;
   }
}

function correctSlashes(pPath)
{
   return pPath.replace(/\\\\/g, slash);
}
Старое наименование скрипта OpenBySelected.js.


Т.к. из такого пути
Code:
D:\Docs\LN\ConnectToRDB\Notes and Domino Connectivity_(redp0115).pdf
ссылку сделать невозможно, то быстренько "наскриптил" Laughing


История изменений:

• 2009.10.31
Добавлено (подарок для програмеров): возможность из текущего скрипта быстро открывать подгружаемые скрипты!
Делаю так: на "ссылке", к примеру в строке:
Code:
eval(AkelPad.ReadFile(AkelPad.GetAkelDir() + "\\AkelFiles\\Plugs\\Scripts\\CommonFunctions.js"));
вызываю контекстное меню, жму "Select" - выделяется "ссылка" на скрипт, - потом жму комбинацию клавиш, вызывающую данный скрипт (у меня это Alt+O)! Wink

• 2009.11.19
Изменено: теперь скрипт можно запускать из контекстного меню ссылок.

• 2011.07.19
Добавлено: поддержка поиска и открытия скриптов из папки ..\Scripts\Include\.


Last edited by VladSh on Thu Jul 21, 2011 2:36 pm; edited 13 times in total
Back to top
View user's profile Send private message Visit poster's website
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5311

PostPosted: Wed Oct 14, 2009 4:33 pm    Post subject: Reply with quote

ActiveColumnSwitch.js

Code:
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=5727#5727
// Version v1.2
//
//
//// Active column show/hide.
//
// How to use:
// Add item to Toolbar/ContextMenu plugin:
//
// -"Active column" Call("Scripts::Main", 1, "ActiveColumnSwitch.js", `"%m" "%i"`) Icon(0)
// -"Local active column" Call("Scripts::Main", 1, "ActiveColumnSwitch.js", `"%m" "%i" -Local=true`)
//
/// Включить/выключить активный столбец.
//
// Как использовать:
// Добавляем пункт в Toolbar/ContextMenu плагин:
//
// -"Активный столбец" Call("Scripts::Main", 1, "ActiveColumnSwitch.js", `"%m" "%i"`) Icon(0)
// -"Активный столбец локально" Call("Scripts::Main", 1, "ActiveColumnSwitch.js", `"%m" "%i" -Local=true`)


//Arguments
var nHandle=0;
var nItemID=0;
if (WScript.Arguments.length >= 2)
{
  nHandle=parseInt(WScript.Arguments(0));
  nItemID=parseInt(WScript.Arguments(1));
}
var bLocal=AkelPad.GetArgValue("Local", false);

//Variables
var hMainWnd=AkelPad.GetMainWnd();
var hWndEdit=AkelPad.GetEditWnd();
var oSys=AkelPad.SystemFunction();
var dwOptions;
var bCheckButton=true;

if (hWndEdit)
{
  if (bLocal)
  {
    dwOptions=AkelPad.SendMessage(hWndEdit, 3227 /*AEM_GETOPTIONS*/, 0, 0);
    if (dwOptions & 0x400 /*AECO_ACTIVECOLUMN*/)
    {
      AkelPad.SendMessage(hWndEdit, 3228 /*AEM_SETOPTIONS*/, 4 /*AECOOP_XOR*/, 0x400 /*AECO_ACTIVECOLUMN*/);
      bCheckButton=false;
    }
    else AkelPad.SendMessage(hWndEdit, 3228 /*AEM_SETOPTIONS*/, 2 /*AECOOP_OR*/, 0x400 /*AECO_ACTIVECOLUMN*/);
  }
  else
  {
    dwOptions=AkelPad.SendMessage(hMainWnd, 1223 /*AKD_GETFRAMEINFO*/, 69 /*FI_CARETOPTIONS*/, 0);
    if (dwOptions & 0x2 /*CO_CARETVERTLINE*/)
    {
      dwOptions&=~0x2 /*CO_CARETVERTLINE*/;
      bCheckButton=false;
    }
    else dwOptions|=0x2 /*CO_CARETVERTLINE*/;

    AkelPad.SetFrameInfo(0, 17 /*FIS_CARETOPTIONS*/, dwOptions);
  }

  if (nHandle && nItemID)
  {
    if (oSys.Call("User32::IsMenu", nHandle))
      oSys.Call("User32::CheckMenuItem", nHandle, nItemID, bCheckButton?0x8 /*MF_BYCOMMAND|MF_CHECKED*/:0x0 /*MF_BYCOMMAND|MF_UNCHECKED*/);
    else
      AkelPad.SendMessage(nHandle, 1026 /*TB_CHECKBUTTON*/, nItemID, bCheckButton);
  }
}



Last edited by Instructor on Sat May 24, 2014 2:50 pm; edited 5 times in total
Back to top
View user's profile Send private message Send e-mail
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5311

PostPosted: Sat Oct 24, 2009 5:29 am    Post subject: Reply with quote

SelectRange.js

Code:
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=5808#5808
// Version v1.0
//
//
//// Select range of lines.

var hMainWnd=AkelPad.GetMainWnd();
var hWndEdit=AkelPad.GetEditWnd();
var pInputText;
var lpRangeArray;
var nMinLine;
var nMaxLine;
var nMinLineIndex;
var nMaxLineIndex;

if (hMainWnd)
{
  nMinLine=AkelPad.SendMessage(hWndEdit, 1078 /*EM_EXLINEFROMCHAR*/, 0, AkelPad.GetSelStart());
  nMaxLine=AkelPad.SendMessage(hWndEdit, 1078 /*EM_EXLINEFROMCHAR*/, 0, AkelPad.GetSelEnd());

  if (pInputText=AkelPad.InputBox(hMainWnd, WScript.ScriptName, "LineStart-LineEnd", nMinLine + "-" + nMaxLine))
  {
    if (lpRangeArray=pInputText.split("-"))
    {
      if (lpRangeArray.length == 1)
      {
        nMinLineIndex=AkelPad.SendMessage(hWndEdit, 187 /*EM_LINEINDEX*/, lpRangeArray[0], 0);
        AkelPad.SetSel(nMinLineIndex, nMinLineIndex);
      }
      else if (lpRangeArray.length == 2)
      {
        nMinLineIndex=AkelPad.SendMessage(hWndEdit, 187 /*EM_LINEINDEX*/, lpRangeArray[0], 0);
        nMaxLineIndex=AkelPad.SendMessage(hWndEdit, 187 /*EM_LINEINDEX*/, lpRangeArray[1], 0);
        AkelPad.SetSel(nMinLineIndex, nMaxLineIndex);
      }
    }
  }
}



Last edited by Instructor on Fri Mar 25, 2011 5:29 pm; edited 3 times in total
Back to top
View user's profile Send private message Send e-mail
VladSh



Joined: 29 Nov 2006
Posts: 2610
Location: Киев, Русь

PostPosted: Mon Oct 26, 2009 2:54 pm    Post subject: Reply with quote

SaveAs.js

Code:
///"Save as ..."
///"Сохранить как..."
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=5837#5837
// Version: 2.19 (2014.07.25)
//
// -"Сохранить как..." Call("Scripts::Main", 1, "SaveAs.js")
// -"Сохранить в js..." Call("Scripts::Main", 1, "SaveAs.js", `-ext="js"`)
//      Аргументы:
//         ext - расширение, если мы хотим его задать жёстко для сохраняемых файлов
//         selUse:
//            0 - использовать выделение для определения из него имени файла, по аналогии с тем, как это делает MS Word;
//            [1] - для сохранения выделения в отдельный файл;
//         srcClose - закрывать исходный файл или нет; [true] - будет закрываться только если файл не был изменён в окне AkelPad'а

var pAllText = AkelPad.GetTextRange(0, -1);      //берём весь текст

if (! AkelPad.Include("CommonFunctions.js")) WScript.Quit();

var pSelText = AkelPad.GetSelText();      //если есть выделенный текст, то значит из него, а не из первой строки, будем брать наименование будущего файла

var hWndEdit = AkelPad.GetEditWnd();
var pCurrentFile = AkelPad.GetEditFile(hWndEdit);

//если нет выделения, то инициировать сохранение выделения в отдельный файл не имеет смысла
var selUse = (pSelText ? AkelPad.GetArgValue("selUse", 1) : 0);

var pInitialFile = (selUse == 0 ? pSelText : (pCurrentFile || pAllText));      //начальный текст для возможного имени файла

//Определяем расширение будущего файла; значение в аргументах приоритетнее
var fileExt = AkelPad.GetArgValue("ext", "") || GetFileExt(pCurrentFile);
if (!fileExt) {
   if (AkelPad.Include("CoderFunctions.js"))
      fileExt = GetSyntaxAliasExtension(hWndEdit);
}
if (fileExt == "bbc") fileExt = "";      //bbc важно только для подсветки, а для сохранения то, что указано в настроках проги; если нужно bbc, то его можно выбрать в диалоге

if (pInitialFile && (pInitialFile != pCurrentFile))
   pInitialFile = getFileNameByFirstRow(pInitialFile);      //получение возможного имени файла по его первой строке

pInitialFile = FileDialogDefault(false, pInitialFile, fileExt);      //выдаём в диалоге - можно поменять
if (pInitialFile) {
   pInitialFile = CorrectFileNameFull(pInitialFile);
   if (pInitialFile) {
      //Проверка, возможно новое расширение было добавлено к уже существующему
      var dFile = SeparateFile(pInitialFile);
      var tmpFileName = GetFileNameOnly(pInitialFile);
      
      if (dFile.name.length != tmpFileName.length)
         pInitialFile = dFile.path + tmpFileName + "." + dFile.ext;      //то, что было введено в диалоге, приоритетнее!
      
      //если выбрали для сохранения не текущий файл
      if (pInitialFile != pCurrentFile ) {
         //Проверка на существование файла с таким именем
         var newFileFormat;
         fso = new ActiveXObject("Scripting.FileSystemObject");
         if (fso.FileExists(pInitialFile) == true) {
            if (AkelPad.MessageBox(AkelPad.GetMainWnd(), "File '" + pInitialFile + "' already exist! Replace it?!", "AkelPad message...", 48+4) != 6)
               WScript.Quit();
         }
         else {
            //если у текущего файла нет имени и установлено "не сохранять выделение", - сохраняем текущий
            if (!pCurrentFile && !selUse) {
               AkelPad.SaveFile(0, pInitialFile);
               WScript.Quit();
            }
            newFileFormat = getFileFormat(0);
         }
         
         if (AkelPad.GetArgValue("srcClose", true)) {
            if (!AkelPad.GetEditModified(0) && pCurrentFile) {
               //Закрытие текущего файла и его вкладки, т.к. будем сохранять точно не текущий файл
               AkelPad.Command(4324 /*IDM_WINDOW_FILECLOSE*/);
               AkelPad.Command(4318 /*IDM_WINDOW_FRAMECLOSE*/);
            }
         }
         
         if (newFileFormat) {
            //файл не существует - создаём
            createFile(newFileFormat, dFile.ext);
         }
         else {
            //файл существует - открываем
            AkelPad.OpenFile(pInitialFile);
            AkelPad.SetSel(0, -1);
         }
         AkelPad.ReplaceSel(selUse == 1 ? pSelText : pAllText);
         AkelPad.SetSel(0, 0);
      }
      
      //сохранение файла
      AkelPad.SaveFile(0, pInitialFile);
   }
}


//Берём первую строку, как это делает MS Word
function getFileNameByFirstRow(pInitialFile) {
   var pTmpFile = pInitialFile.replace(new RegExp("^[" + " \t\r" + "]+", "gm"), "");
   pTmpFile = pTmpFile.split(/\r/)[0]
   
   return CorrectFileName(pTmpFile);
}
Старое (ну очень старое) наименование скрипта SaveFileDialog.js.

This script used CommonFunctions.js.


Примеры использования:
Code:
Call("Scripts::Main", 1, "SaveAs.js", `-ext="js"`)
если расширение задано в диалоге, то оно будет самым приоритетным при определении расширения сохраняемого файла, т.е. в данном случае js.

Code:
Call("Scripts::Main", 1, "SaveAs.js")
если расширение не задано в аргументах, то будет производиться определение и подстановка в таком порядке:
• по расширению текущего файла;
если файл новый (расширения у него нет):
• по синтаксической теме, применённой к данному файлу;
• из настроек программы;
• если ничего не определено, то подставится расширение "по умолчанию" для файлов, указанное в скрипте (txt).

Расширение можно изменить в диалоге.

Посадил этот скрипт на пиктограмму "Save As..." тулбара, а по Ctrl+S и контекстных меню оставил стандартную команду Wink


Last edited by VladSh on Fri Jul 25, 2014 8:47 pm; edited 37 times in total
Back to top
View user's profile Send private message Visit poster's website
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5311

PostPosted: Mon Nov 02, 2009 1:11 pm    Post subject: Reply with quote

ReplaceNoUndo.js

Code:
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=5891#5891
// Version v1.0
//
//
//// Turn off undo while replace dialog is open.

var hMainWnd=AkelPad.GetMainWnd();
var hWndEdit=AkelPad.GetEditWnd();
var nUndoLimit;
var lpType;

if (hMainWnd)
{
  if (lpType=AkelPad.MemAlloc(4 /*sizeof(int)*/))
  {
    nUndoLimit=AkelPad.SendMessage(hWndEdit, 3084 /*AEM_GETUNDOLIMIT*/, 0, 0);
    AkelPad.SendMessage(hWndEdit, 3079 /*AEM_EMPTYUNDOBUFFER*/, 0, 0);
    AkelPad.SendMessage(hWndEdit, 3085 /*AEM_SETUNDOLIMIT*/, 0, 0);
    AkelPad.Command(4161 /*IDM_EDIT_REPLACE*/);

    for (;;)
    {
      //Wait for closing replace dialog
      AkelPad.SendMessage(hMainWnd, 1275 /*AKD_GETMODELESS*/, 0, lpType);
      if (AkelPad.MemRead(lpType, 3 /*DT_DWORD*/) == 4 /*MLT_REPLACE*/)
        WScript.Sleep(100);
      else
        break;
    }

    AkelPad.SendMessage(hWndEdit, 3085 /*AEM_SETUNDOLIMIT*/, nUndoLimit, 0);
    AkelPad.MemFree(lpType);
  }
}



Last edited by Instructor on Fri Mar 25, 2011 5:42 pm; edited 3 times in total
Back to top
View user's profile Send private message Send e-mail
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5311

PostPosted: Thu Nov 19, 2009 1:07 pm    Post subject: Reply with quote

SelPoint.js

Code:
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=6064#6064
// Version v1.0
//
//
//// Selection point. First call sets selection start point, second call make selection.

var oSet=AkelPad.ScriptSettings();
var nRegSelStart=-1;
var nCurSelStart=AkelPad.GetSelStart();

if (oSet.Begin(WScript.ScriptBaseName, 0x1 /*POB_READ*/))
{
  nRegSelStart=oSet.Read("StartPos", 1 /*PO_DWORD*/);
  oSet.End();
}

if (oSet.Begin(WScript.ScriptBaseName, 0x2 /*POB_SAVE*/))
{
  if (nRegSelStart != -1)
  {
    if (nRegSelStart != nCurSelStart)
    {
      AkelPad.SetSel(nRegSelStart, nCurSelStart);
      oSet.Write("StartPos", 1 /*PO_DWORD*/, -1);
    }
  }
  else oSet.Write("StartPos", 1 /*PO_DWORD*/, nCurSelStart);

  oSet.End();
}



Last edited by Instructor on Fri Mar 25, 2011 5:49 pm; edited 4 times in total
Back to top
View user's profile Send private message Send e-mail
oyaebu



Joined: 11 Oct 2009
Posts: 15

PostPosted: Mon Jan 18, 2010 3:28 pm    Post subject: Reply with quote

Дошли-таки руки до старой задумки.

PassGen.js
Code:
// description = Password Generator
// copypizded from http://javascript.internet.com/passwords/password-generator.html

//var AkelPad=new ActiveXObject("AkelPad.document");
//AkelPad.ReplaceSel('Test');

function getRandomNum(lbound, ubound) {
return (Math.floor(Math.random() * (ubound - lbound)) + lbound);
}

function getRandomChar(number, lower, upper, other, extra) {
var numberChars = "0123456789";
var lowerChars = "abcdefghijklmnopqrstuvwxyz";
var upperChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var otherChars = "`~!@#$%^&*()-_=+[{]}\\|;:'\",<.>/? ";
var charSet = extra;
if (number == true)
charSet += numberChars;
if (lower == true)
charSet += lowerChars;
if (upper == true)
charSet += upperChars;
if (other == true)
charSet += otherChars;
return charSet.charAt(getRandomNum(0, charSet.length));
}

function getPassword(length, extraChars, firstNumber, firstLower, firstUpper, firstOther,
latterNumber, latterLower, latterUpper, latterOther) {
   var rc = "";
   if (length > 0)
   rc = rc + getRandomChar(firstNumber, firstLower, firstUpper, firstOther, extraChars);
   for (var idx = 1; idx < length; ++idx) {
   rc = rc + getRandomChar(latterNumber, latterLower, latterUpper, latterOther, extraChars);
   }
   return rc;
}

function getRandomInt(min, max)
{
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

var pLength = getRandomInt(12,19);
var extraChars = '';

var firstNumber = true;
var firstLower = true;
var firstUpper = true;
var firstOther = false;

var latterNumber = true;
var latterLower = true;
var latterUpper = true;
var latterOther = false;

AkelPad.ReplaceSel(getPassword(pLength, extraChars, firstNumber, firstLower,
firstUpper, firstOther, latterNumber, latterLower,
latterUpper, latterOther));


Осталось узнать, как добавить кнопку, вызывающую это дело, на тулбар.
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5311

PostPosted: Fri Feb 12, 2010 5:17 pm    Post subject: Reply with quote

DuplicateLines.js

Code:
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=6504#6504
// Version v1.1
//
//
//// Duplicate selected lines.

var hWndEdit=AkelPad.GetEditWnd();
var pSelText;
var pLinesArray;
var pResultArray=new Array();
var nLinesIndex;
var nResultIndex=0;

if (hWndEdit)
{
  if (AkelPad.GetSelStart() == AkelPad.GetSelEnd())
    SelectCaretLine(hWndEdit);

  if (pSelText=AkelPad.GetSelText())
  {
    if (pLinesArray=pSelText.split("\r"))
    {
      for (nLinesIndex=0; nLinesIndex < pLinesArray.length; ++nLinesIndex)
      {
        pResultArray[nResultIndex++]=pLinesArray[nLinesIndex];
        pResultArray[nResultIndex++]=pLinesArray[nLinesIndex];
      }
      pSelText=pResultArray.join("\r");
    }
    AkelPad.ReplaceSel(pSelText, true);
  }
}

function SelectCaretLine(hWnd)
{
  var nCaretOffset=AkelPad.GetSelStart();
  var nCaretLine;
  var nLineStart;
  var nLineEnd;

  nCaretLine=AkelPad.SendMessage(hWnd, 1078 /*EM_EXLINEFROMCHAR*/, 0, nCaretOffset);
  nLineStart=AkelPad.SendMessage(hWnd, 187 /*EM_LINEINDEX*/, nCaretLine, 0);
  nLineEnd=nLineStart + AkelPad.SendMessage(hWnd, 193 /*EM_LINELENGTH*/, nCaretOffset, 0);

  AkelPad.SetSel(nLineStart, nLineEnd);
}



Last edited by Instructor on Mon Oct 01, 2012 11:56 am; edited 4 times in total
Back to top
View user's profile Send private message Send e-mail
levilevi



Joined: 16 Nov 2009
Posts: 5

PostPosted: Wed Mar 31, 2010 4:12 pm    Post subject: Create a new text file in current editing file directory Reply with quote

My first script, base on some other scripts:D
createfile.js
Code:
/// Create a new text file in current editing file directory

var AkelPad=new ActiveXObject("AkelPad.document");
var fso = new ActiveXObject("Scripting.FileSystemObject");

var hMainWnd=AkelPad.GetMainWnd();
var szFile=AkelPad.GetEditFile(0);
var szDir=GetParent(szFile);
var pName="";


if (hMainWnd)
{
  pName=AkelPad.InputBox(hMainWnd, "Create a New Text", "Give it a name", ".txt");
  if (pName!=".txt" && pName!=0)
  {
    var pNewFileFullName = szDir + '\\' + pName
    if (!fso.FileExists(pNewFileFullName))
      var NewFile = fso.CreateTextFile(pNewFileFullName)
    AkelPad.SendMessage(hMainWnd, 273 /*WM_COMMAND*/, 4422 /*IDM_NONMENU_FILECLOSE*/, 0);
    AkelPad.OpenFile(pNewFileFullName, 0, 0, 0);
    AkelPad.Call("Explorer::Main", 2); //Refresh Explorer plugin's directory
  }
}

//Functions
function GetParent(file)
{
  var i;

  for (i=file.length - 1; i >= 0; --i)
  {
    if (file.charAt(i) == '\\')
      return file.substr(0, i);
  }
}
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5311

PostPosted: Sat Apr 03, 2010 4:20 am    Post subject: Reply with quote

TabsToSpaces.js

Code:
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=7081#7081
// Version v1.3
//
//
//// Convert tabulation to space.

var hMainWnd=AkelPad.GetMainWnd();
var hWndEdit=AkelPad.GetEditWnd();
var bColumnSel;
var nTabStop;
var nInitColumn=0;
var nColumn;
var nSpaceCount;
var pSelText;
var pResult;
var pSpaces;
var lpSel;
var a;
var b;

if (hWndEdit)
{
  if (lpSel=AkelPad.MemAlloc(_X64?56:32 /*sizeof(AESELECTION)*/))
  {
    if (AkelPad.SendMessage(hWndEdit, 3125 /*AEM_GETSEL*/, 0, lpSel))
      nInitColumn=AkelPad.SendMessage(hWndEdit, 3147 /*AEM_INDEXTOCOLUMN*/, 0, lpSel /*AESELECTION.crSel.ciMin*/);
    else
      AkelPad.SetSel(0, -1);
    bColumnSel=AkelPad.SendMessage(hWndEdit, 3127 /*AEM_GETCOLUMNSEL*/, 0, 0);
    nTabStop=AkelPad.SendMessage(hWndEdit, 3239 /*AEM_GETTABSTOP*/, 0, 0);
    AkelPad.MemFree(lpSel);
  }
  else WScript.Quit();

  //Scan selection
  pSelText=AkelPad.GetSelText();
  pResult="";

  for (a=0, b=0, nColumn=nInitColumn; b < pSelText.length; ++b)
  {
    if (pSelText.charAt(b) == '\t')
    {
      nSpaceCount=nTabStop - nColumn % nTabStop;
      nColumn+=nSpaceCount;
      for (pSpaces=""; nSpaceCount; --nSpaceCount)
        pSpaces=pSpaces + " ";
      pResult+=pSelText.substr(a, b - a) + pSpaces;
      a=b + 1;
    }
    else if (pSelText.charAt(b) == '\r')
      nColumn=bColumnSel?nInitColumn:0;
    else
      ++nColumn;
  }
  pResult+=pSelText.substr(a, b - a);

  //Replace selection
  AkelPad.ReplaceSel(pResult, true);
}



Last edited by Instructor on Sat Apr 12, 2014 5:33 pm; edited 6 times in total
Back to top
View user's profile Send private message Send e-mail
cnnnc



Joined: 12 Jan 2008
Posts: 116
Location: Shantou, China

PostPosted: Sat Apr 17, 2010 1:18 am    Post subject: NumberCount.js by cnnnc Reply with quote

NumberCount.js

Code:
/// NumberCount.js (2012-12-15) by cnnnc.
// Insert text or/and a sequence of Num/RandomNum to Begin or/and End of every line.
// EscSeq is allowed in "String":
//       \\ - backslash
//       \r - line feed
//       \n - new line
//       \t - tabulation
//       \N - Decimal number sequence
//       \H - Hexadecimal number sequence
//       $1 - original line
//
// If Num is not checked, \N be treated as is.
// If there is more \N, more Step will be done in one line. When "Lazy mode" CheckBox is checked, all \N in one line will be same.
// Float Number is allowed in "First" and "Step/End".
// Negative number is allowed in "First","Step/End" and "WIDTH".
//
// Num can be from "First" to END(According to the lines of Selection) Up/Down by "Step".
// RandomNum is between "First" and "End".
// Num/RandomNum can be formatted in fixed WIDTH, and PaddingChar default is at Begin of Num/RandomNum.
// if WIDTH<0, PaddingChar be Added to the end of Num/RandomNum.
//
// Support the localization language files.
//
// 2 way of run this script:
// 1.) GUI without arguments, arguments saved to ini after executed.
//     This script show a messagebox to tell you how long be spent on your large text when more than 1.4 s.
// 2.) No GUI but with arguments, and never read and write the Arguments from/to ini.
//     Example:
//     -"LineNumber" Call("Scripts::Main", 1, "NumberCount.js", `-Str="\N|$1" -Num=1 -Rand=0 -Lazy=0 -First=1 -Step=1 -Width=4 -Pad=" "`)

try
{
  var hMainWnd=AkelPad.GetMainWnd();
}
catch (oError)
{
  WScript.Quit();
}

var oSys        =AkelPad.SystemFunction();
var pScriptName =WScript.ScriptName;

var sStr  =AkelPad.GetArgValue("Str"  , "$1");
var bNum  =AkelPad.GetArgValue("Num"  ,    0);
var bRand =AkelPad.GetArgValue("Rand" ,    0);
var bLazy =AkelPad.GetArgValue("Lazy" ,    0);
var nFirst=AkelPad.GetArgValue("First",    1);
var nStep =AkelPad.GetArgValue("Step" ,    1);
var nWidth=AkelPad.GetArgValue("Width",    1);
var sPad  =AkelPad.GetArgValue("Pad"  ,  "0");

var bHex=false;

// Without GUI
if (AkelPad.GetArgLine(0))
{
  if (isNaN(nFirst)){nFirst=1;}
  if (isNaN(nStep)){nStep=1;}
  if (isNaN(nWidth)){nWidth=1;}

  if (bRand)
  {
    bNum=true;
  }

  NumberCount();
  WScript.Quit();
}

// With GUI
var hInstanceDLL=AkelPad.GetInstanceDll();
var pClassName  ="AkelPad::Scripts::"+pScriptName+"::"+oSys.Call("kernel32::GetCurrentProcessId");

var hWndDialog;
var lpBuffer;
var nStrings=10;
var lpStrings=[];
var oSet=AkelPad.ScriptSettings();

var nBegSelIn = 0;
var nEndSelIn = 0;
var nMaxLen   = 1024;

if (oSet.Begin(WScript.ScriptBaseName, 0x1 /*POB_READ*/))
{
  //Read settings
  bNum  =oSet.Read("Num"  , 1 /*PO_DWORD*/ );
  bRand =oSet.Read("Rand" , 1 /*PO_DWORD*/ );
  bLazy =oSet.Read("Lazy" , 1 /*PO_DWORD*/ );
  nFirst=oSet.Read("First", 3 /*PO_STRING*/, 1);
  nStep =oSet.Read("Step" , 3 /*PO_STRING*/, 1);
  nWidth=oSet.Read("Width", 1 /*PO_DWORD*/ , 1);
  sPad  =oSet.Read("Pad"  , 3 /*PO_STRING*/);

  //String
  for (i=0; i<nStrings; i+=1)
  {
    lpStrings[i]=oSet.Read("String"+i, 3 /*PO_STRING*/);
    if (typeof lpStrings[i]=="undefined"){break;}
  }

  if (typeof lpStrings[0]!="undefined"){sStr=lpStrings[0];}

  oSet.End();
}

if (typeof lpStrings[0]=="undefined"){lpStrings[0]=sStr;}

var sTxtStr           ="String";
var sTxtNum           ="Number";
var sTxtRand          ="Random";
var sTxtLazy          ="Lazy mode";
var sTxtFirst         ="First";
var sTxtStep          ="Step";
var sTxtEnd           ="End";
var sTxtWidth         ="Width";
var sTxtPad           ="Padding char";
var sTxtSeconds       ="Seconds";
var sTxtOK            ="OK";
var sTxtCancel        ="Cancel";
var sTxtBackSlace     ="backslash";
var sTxtReturn        ="return";
var sTxtLineFeed      ="line feed";
var sTxtTabulation    ="tabulation";
var sTxtNumberSequence="number sequence";
var sTxtHexNumSequence="Hex number sequence";
var sTxtOriginalLine  ="original line";
var sTxtEmpty         ="Empty";

var fso      =new ActiveXObject("Scripting.FileSystemObject");
var pLangFile=AkelPad.GetAkelDir(5)+ "\\Langs\\" + pScriptName.substring(0, pScriptName.lastIndexOf("."))+"_"+AkelPad.GetLangId().toString()+".lng";
var nError;

if (fso.FileExists(pLangFile))
{
  try
  {
    AkelPad.Include("..\\Langs\\"+pScriptName.substring(0, pScriptName.lastIndexOf("."))+"_"+AkelPad.GetLangId().toString()+".lng");
  }
  catch (nError)
  {
  }
}

var aWnd            =[];
var IDC_CBB_STR     =1000;
var IDC_STATIC_STR  =1001;
var IDC_SYNTEX      =1002;
var IDC_NUM         =1003;
var IDC_RAND        =1004;
var IDC_LAZY        =1005;
var IDC_STATIC_FIRST=1006;
var IDC_EDT_FIRST   =1007;
var IDC_STATIC_STEP =1008;
var IDC_EDT_STEP    =1009;
var IDC_STATIC_WIDTH=1010;
var IDC_EDT_WIDTH   =1011;
var IDC_STATIC_PAD  =1012;
var IDC_EDT_PAD     =1013;
var IDC_OK          =1014;
var IDC_CANCEL      =1015;

var WNDTYPE =0;
var WND     =1;
var WNDEXSTY=2;
var WNDSTY  =3;
var WNDX    =4;
var WNDY    =5;
var WNDW    =6;
var WNDH    =7;
var WNDTXT  =8;
//0x50000000 - WS_VISIBLE|WS_CHILD
//0x50010000 - WS_VISIBLE|WS_CHILD|WS_TABSTOP
//0x50010003 - WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_AUTOCHECKBOX
//0x50210042 - WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_VSCROLL|CBS_DROPDOWN|CBS_AUTOHSCROLL
//0x58010000 - WS_VISIBLE|WS_CHILD|WS_DISABLED|WS_TABSTOP|BS_PUSHBUTTON
//0x58010003 - WS_VISIBLE|WS_CHILD|WS_DISABLED|WS_TABSTOP|BS_AUTOCHECKBOX
//0x58010080 - WS_VISIBLE|WS_CHILD|WS_DISABLED|WS_TABSTOP|ES_AUTOHSCROLL
//Windows                WNDTYPE, WND, WNDEXSTY,     WNDSTY,WNDX,WNDY,WNDW,WNDH,           WNDTXT
aWnd[IDC_CBB_STR     ]=["COMBOBOX", 0,        0, 0x50210042,  95,   5, 228, 160,             sStr];
aWnd[IDC_STATIC_STR  ]=["STATIC",   0,        0, 0x50000000,   5,   8,  85,  20,          sTxtStr];
aWnd[IDC_SYNTEX      ]=["BUTTON",   0,        0, 0x50010000, 303,  30,  20,  20,            " > "];
aWnd[IDC_NUM         ]=["BUTTON",   0,        0, 0x50010003,   5,  33,  85,  20,          sTxtNum];
aWnd[IDC_RAND        ]=["BUTTON",   0,        0, 0x58010003,  95,  33,  85,  20,         sTxtRand];
aWnd[IDC_LAZY        ]=["BUTTON",   0,        0, 0x58010003, 185,  33,  85,  20,         sTxtLazy];
aWnd[IDC_STATIC_FIRST]=["STATIC",   0,        0, 0x50000000,   5,  58,  85,  20,        sTxtFirst];
aWnd[IDC_EDT_FIRST   ]=[  "EDIT",   0,    0x200, 0x58010080,  95,  55, 100,  20,           nFirst];
aWnd[IDC_STATIC_STEP ]=["STATIC",   0,        0, 0x50000000,   5,  83,  85,  20,         sTxtStep];
aWnd[IDC_EDT_STEP    ]=[  "EDIT",   0,    0x200, 0x58010080,  95,  80, 100,  20,            nStep];
aWnd[IDC_STATIC_WIDTH]=["STATIC",   0,        0, 0x50000000,   5, 108,  85,  20,        sTxtWidth];
aWnd[IDC_EDT_WIDTH   ]=[  "EDIT",   0,    0x200, 0x58010080,  95, 105, 100,  20,nWidth.toString()];
aWnd[IDC_STATIC_PAD  ]=["STATIC",   0,        0, 0x50000000,   5, 133,  85,  20,          sTxtPad];
aWnd[IDC_EDT_PAD     ]=[  "EDIT",   0,    0x200, 0x58010080,  95, 130,  50,  20,             sPad];
aWnd[IDC_OK          ]=["BUTTON",   0,        0, 0x58010000, 263, 105,  60,  20,           sTxtOK];
aWnd[IDC_CANCEL      ]=["BUTTON",   0,        0, 0x50010000, 263, 130,  60,  20,       sTxtCancel];

if (AkelPad.WindowRegisterClass(pClassName))
{
  lpBuffer=AkelPad.MemAlloc(nMaxLen * _TSIZE);
  if (lpBuffer)
  {
    //Create dialog
    hWndDialog=oSys.Call("user32::CreateWindowEx"+_TCHAR,
      0,               //dwExStyle
      pClassName,      //lpClassName
      0,               //lpWindowName
      0x90CA0000,      //WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX
      0,               //x
      0,               //y
      333,             //nWidth
      180,             //nHeight
      hMainWnd,        //hWndParent
      0,               //ID
      hInstanceDLL,    //hInstance
      DialogCallback); //Script function callback. To use it class must be registered by WindowRegisterClass.
 
    if (hWndDialog)
    {
      //Allow other scripts running
      AkelPad.ScriptNoMutex();
      //Message loop
      AkelPad.WindowGetMessage();
    }
    AkelPad.MemFree(lpBuffer);
  }

  AkelPad.WindowUnregisterClass(pClassName);
}
else
{
  hWndDialog=oSys.Call("user32::FindWindowEx"+_TCHAR, 0, 0, pClassName, 0);
  if (hWndDialog)
  {
    if (oSys.Call("user32::IsIconic", hWndDialog)){oSys.Call("user32::ShowWindow", hWndDialog, 9 /*SW_RESTORE*/);}
    AkelPad.SendMessage(hWndDialog, 7 /*WM_SETFOCUS*/, 0, 0);
  }
}


function DialogCallback(hWnd, uMsg, wParam)
{
  if (uMsg==1)  //WM_CREATE
  {
    var hGuiFont=oSys.Call("gdi32::GetStockObject", 17 /*DEFAULT_GUI_FONT*/);

    //Dialog caption
    oSys.Call("user32::SetWindowText"+_TCHAR, hWnd, pScriptName);

    //Create window
    for (i=1000; i<aWnd.length; i+=1)
    {
      aWnd[i][WND]=oSys.Call("user32::CreateWindowEx"+_TCHAR,
        aWnd[i][WNDEXSTY], //dwExStyle
        aWnd[i][WNDTYPE],  //lpClassName
        0,                 //lpWindowName
        aWnd[i][WNDSTY],   //dwStyle
        aWnd[i][WNDX],     //x
        aWnd[i][WNDY],     //y
        aWnd[i][WNDW],     //nWidth
        aWnd[i][WNDH],     //nHeight
        hWnd,              //hWndParent
        i,                 //ID
        hInstanceDLL,      //hInstance
        0);                //lpParam
      //Set font and text
      SetWindowFontAndText(aWnd[i][WND], hGuiFont, aWnd[i][WNDTXT]);
    }

    //Fill combobox
    for (i=0; i<nStrings && typeof lpStrings[i]!="undefined"; i+=1)
    {
      AkelPad.MemCopy(lpBuffer, lpStrings[i], _TSTR);
      AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x143 /*CB_ADDSTRING*/, 0, lpBuffer);
    }
    AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x14E /*CB_SETCURSEL*/, 0, 0);

    //Checks
    if (bNum)
    {
      AkelPad.SendMessage(aWnd[IDC_NUM][WND], 241 /*BM_SETCHECK*/, 1 /*BST_CHECKED*/, 0);
      EnableNumWin(bNum);
    }

    if (bRand)
    {
      AkelPad.SendMessage(aWnd[IDC_RAND][WND], 241 /*BM_SETCHECK*/, 1 /*BST_CHECKED*/, 0);
      oSys.Call("user32::SetWindowText"+_TCHAR, aWnd[IDC_STATIC_STEP][WND], sTxtEnd);
    }

    if (bLazy)
    {
      AkelPad.SendMessage(aWnd[IDC_LAZY][WND], 241 /*BM_SETCHECK*/, 1 /*BST_CHECKED*/, 0);
    }

    //Center dialog
    CenterWindow(hMainWnd, hWnd);
  }
  else if (uMsg==7)  //WM_SETFOCUS
  {
    oSys.Call("user32::SetFocus", aWnd[IDC_CBB_STR][WND]);
  }
  else if (uMsg==256)  //WM_KEYDOWN
  {
    if (wParam==27)    //VK_ESCAPE
    {
      //Escape key pushes Cancel button
      oSys.Call("user32::PostMessage"+_TCHAR, hWnd, 273 /*WM_COMMAND*/, IDC_CANCEL, 0);
    }
    else if (wParam==13)  //VK_RETURN
    {
      if (oSys.Call("user32::IsWindowEnabled", aWnd[IDC_OK][WND]))
      {
        //Return key pushes OK button
        oSys.Call("user32::PostMessage"+_TCHAR, hWnd, 273 /*WM_COMMAND*/, IDC_OK, 0);
      }
    }
  }
  else if (uMsg==273)  //WM_COMMAND
  {
    nLowParam = LoWord(wParam);
    nHiwParam = HiWord(wParam);
    bCloseCB1 = 1;

    if (nLowParam==IDC_NUM       ||
             nLowParam==IDC_CBB_STR   ||
             nLowParam==IDC_EDT_FIRST ||
             nLowParam==IDC_EDT_STEP  ||
             nLowParam==IDC_EDT_WIDTH)
    {
      if (nLowParam==IDC_NUM)
      {
        bNum=AkelPad.SendMessage(aWnd[IDC_NUM][WND], 240 /*BM_GETCHECK*/, 0, 0);
        EnableNumWin(bNum);
      }
      else if (nLowParam == IDC_CBB_STR)
      {
        if (nHiwParam == 3 /*CBN_SETFOCUS*/)
        {
          SetWindowFontAndText(aWnd[IDC_CBB_STR][WND], hGuiFont, sStr);
          AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x0142 /*CB_SETEDITSEL*/, 0, MkLong(nBegSelIn, nEndSelIn));
        }
        else if (nHiwParam == 10 /*CBN_SELENDCANCEL*/)
        {
          nBegSelIn = LoWord(AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x140 /*CB_GETEDITSEL*/, 0, 0));
          nEndSelIn = HiWord(AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x140 /*CB_GETEDITSEL*/, 0, 0));
        }
        else if (nHiwParam == 5 /*CBN_EDITCHANGE*/)
        {
          nBegSelIn = LoWord(AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x140 /*CB_GETEDITSEL*/, 0, 0));
          nEndSelIn = HiWord(AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x140 /*CB_GETEDITSEL*/, 0, 0));
          oSys.Call("user32::GetWindowText" + _TCHAR, aWnd[IDC_CBB_STR][WND], lpBuffer, nMaxLen);
          sStr = AkelPad.MemRead(lpBuffer, _TSTR);
        }
        else if (nHiwParam == 1 /*CBN_SELCHANGE*/)
        {
          nNumStrIn = AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x147 /*CB_GETCURSEL*/, 0, 0);
          AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x148 /*CB_GETLBTEXT*/, nNumStrIn, lpBuffer);
          pStrIn = AkelPad.MemRead(lpBuffer, _TSTR);
        }
        else if (nHiwParam == 7 /*CBN_DROPDOWN*/)
        {
          bCloseCB2 = 0;
        }
        else if (nHiwParam == 8 /*CBN_CLOSEUP*/)
        {
          bCloseCB2 = 1;
        }
      }

      if (bNum)
      {
        if (DisableBtnOK(aWnd[IDC_EDT_FIRST][WND])){return;}
        if (DisableBtnOK(aWnd[IDC_EDT_STEP][WND])){return;}
        if (DisableBtnOK(aWnd[IDC_EDT_WIDTH][WND])){return;}
        sStr=GetWindowText(aWnd[IDC_CBB_STR][WND]);
        if (sStr.search(/\\N/g) == -1 && sStr.search(/\\H/g) == -1){return;}
      }
      oSys.Call("user32::EnableWindow", aWnd[IDC_OK][WND], (oSys.Call("user32::GetWindowTextLength"+_TCHAR, aWnd[IDC_CBB_STR][WND])) ? true : false);
    }
    else if (nLowParam==IDC_RAND)
    {
      bRand=AkelPad.SendMessage(aWnd[IDC_RAND][WND], 240 /*BM_GETCHECK*/, 0, 0);
      oSys.Call("user32::SetWindowText"+_TCHAR, aWnd[IDC_STATIC_STEP][WND], (bRand) ? sTxtEnd : sTxtStep);
    }
    else if (nLowParam==IDC_LAZY)
    {
      bLazy=AkelPad.SendMessage(aWnd[IDC_LAZY][WND], 240 /*BM_GETCHECK*/, 0, 0);
    }
    else if (nLowParam==IDC_SYNTEX)
    {
      if (!AkelPad.Include("ShowMenu.js"))
      {
       AkelPad.MessageBox(hWnd, sTxtIncShowMenuJs, pScriptName, 0 /*MB_OK*/);
      }
      else
      {
        //Variables
        var lpItems;
        var nItem;
     
        lpItems=[["$1\t"+sTxtOriginalLine, MF_NORMAL, 101],
                 ["\\N\t"+sTxtNumberSequence, MF_NORMAL, 102],
                 ["\\H\t"+sTxtHexNumSequence, MF_NORMAL, 103],
                 ["", MF_SEPARATOR],
                 ["\\\\\t"+sTxtBackSlace, MF_NORMAL, 104],
                 ["\\r\t"+sTxtReturn, MF_NORMAL, 105],
                 ["\\n\t"+sTxtLineFeed, MF_NORMAL, 106],
                 ["\\t\t"+sTxtTabulation, MF_NORMAL, 107],
                 ["", MF_SEPARATOR],
                 [sTxtEmpty, (oSys.Call("user32::GetWindowTextLength"+_TCHAR, aWnd[IDC_CBB_STR][WND])) ? MF_NORMAL|MF_LAST : MF_NORMAL|MF_GRAYED|MF_LAST, 108]];

        nItem=ShowMenu(lpItems, POS_CURSOR, POS_CURSOR);
        if (nItem == -1)
        {
        }
        else
        {
          nItem=lpItems[nItem][2];
          switch (nItem)
          {
            case 101 : FunToIn("$1");
              break;
            case 102 : FunToIn("\\N");
              break;
            case 103 : FunToIn("\\H");
              break;
            case 104 : FunToIn("\\\\");
              break;
            case 105 : FunToIn("\\r");
              break;
            case 106 : FunToIn("\\n");
              break;
            case 107 : FunToIn("\\t");
              break;
            case 108 :
              sStr = "";
              oSys.Call("user32::SetFocus", aWnd[IDC_CBB_STR][WND]);
              break;
          }
        }
      }
    }
    else if (nLowParam==IDC_OK)
    {
      //String
      sStr=GetWindowText(aWnd[IDC_CBB_STR][WND]);

      if (nStrings)
      {
        for (i=0; i<nStrings && typeof lpStrings[i]!="undefined"; i+=1)
        {
          if (lpStrings[i]==sStr)
          {
            AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x144 /*CB_DELETESTRING*/, i, 0);
            DeleteFromArray(lpStrings, i, 1);
          }
        }

        InsertInArray(lpStrings, sStr, 0);

        if (lpStrings.length>nStrings){DeleteFromArray(lpStrings, -1, 1);}

        AkelPad.MemCopy(lpBuffer, sStr, _TSTR);
        AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x14A /*CB_INSERTSTRING*/, 0, lpBuffer);
        AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x14E /*CB_SETCURSEL*/, 0, 0);
      }

      if (bNum)
      {
        sPad  =GetWindowText(aWnd[IDC_EDT_PAD][WND]);
        nFirst=GetWindowText(aWnd[IDC_EDT_FIRST][WND]);
        nStep =GetWindowText(aWnd[IDC_EDT_STEP][WND]);

        nFirstCur=GetWindowText(aWnd[IDC_EDT_FIRST][WND],"n");
        nStepCur =GetWindowText(aWnd[IDC_EDT_STEP][WND] ,"n");

        nWidth=parseInt(GetWindowText(aWnd[IDC_EDT_WIDTH][WND],"n"),10);
      }

      var d=new Date();
      var t=d.getTime();

      NumberCount();

      var d=new Date();
      t=(d.getTime()-t)/1000;

      if (Math.round(t)>1){AkelPad.MessageBox(hWndDialog, "    "+t.toFixed(3)+" "+sTxtSeconds, pScriptName, 0 /*MB_OK*/);}
    }
    else if (nLowParam==IDC_CANCEL)
    {
      oSys.Call("user32::PostMessage"+_TCHAR, hWnd, 16 /*WM_CLOSE*/, 0, 0);
    }
  }
  else if (uMsg==16)  //WM_CLOSE
  {
    if (oSet.Begin(WScript.ScriptBaseName, 0x2 /*POB_SAVE*/))
    {
      //Save settings
      oSet.Write("Num"  , 1 /*PO_DWORD*/ ,             bNum);
      oSet.Write("Rand" , 1 /*PO_DWORD*/ ,            bRand);
      oSet.Write("Lazy" , 1 /*PO_DWORD*/ ,            bLazy);
      oSet.Write("First", 3 /*PO_STRING*/,           nFirst);
      oSet.Write("Step" , 3 /*PO_STRING*/,            nStep);
      oSet.Write("Width", 1 /*PO_DWORD*/ ,           nWidth);
      oSet.Write("Pad"  , 3 /*PO_STRING*/,             sPad);

      //Save string history
      for (i=0; i<nStrings && typeof lpStrings[i]!="undefined"; i+=1)
      {
        oSet.Write("String"+i, 3 /*PO_STRING*/, lpStrings[i]);
      }

      oSet.End();
    }

    //Destroy dialog
    oSys.Call("user32::DestroyWindow", hWnd);
  }
  else if (uMsg==2)  //WM_DESTROY
  {
    //Exit message loop
    oSys.Call("user32::PostQuitMessage", 0);
  }
}

function GetWindowText(hWnd,cType)
{
  oSys.Call("user32::GetWindowText"+_TCHAR, hWnd, lpBuffer, nMaxLen);
  var pStrExp=AkelPad.MemRead(lpBuffer, _TSTR);

  if (cType=="n")
  {
    if (pStrExp==""){pStrExp="1";}

    return Number(pStrExp);
  }
  else {return pStrExp;}
}

function Pad(nCurrentNum,m)
{
  var pNumText;
  var nLen;
  var cPadding="";

  if (bHex)
  {
    pNumText=nCurrentNum.toString(16);
  }
  else
  {
    pNumText=nCurrentNum.toFixed(m);
  }

  if (nCurrentNum<0){pNumText="-"+pNumText.substr(1);}

  nLen=Math.abs(nWidth)-pNumText.length+1;

  while ((nLen-=1)>0)
  {
    cPadding+=sPad;
  }

  if (nWidth<0){pNumText += cPadding;}
  else {pNumText=cPadding+pNumText;}

  return pNumText;
}

function EnableNumWin(bNum)
{
  oSys.Call("user32::EnableWindow", aWnd[IDC_RAND][WND]     , bNum);
  oSys.Call("user32::EnableWindow", aWnd[IDC_LAZY][WND]     , bNum);
  oSys.Call("user32::EnableWindow", aWnd[IDC_EDT_FIRST][WND], bNum);
  oSys.Call("user32::EnableWindow", aWnd[IDC_EDT_STEP][WND] , bNum);
  oSys.Call("user32::EnableWindow", aWnd[IDC_EDT_WIDTH][WND], bNum);
  oSys.Call("user32::EnableWindow", aWnd[IDC_EDT_PAD][WND]  , bNum);
}

function NumberCount()
{
  //Variables
  var hWndEdit=AkelPad.GetEditWnd();
  var nSelState=0;
  var SELECTALL=0;
  var NORMALSEL=1;
  var COLUMNSEL=2;
  var pSelText;

  //Esc-sequences
  var sEscStr=sStr.replace(/\\\\/g, "\0");
  sEscStr=sEscStr.replace(/\\r\\n|\\r|\\n/g, "\1");
  sEscStr=sEscStr.replace(/\\t/g, "\t");
  sEscStr=sEscStr.replace(/\0/g, "\\");

  if (bNum && sEscStr.indexOf("\\H") != -1)
  {
    sEscStr=sEscStr.replace(/\\H/g, "\0");
    bHex=true;
  }

  if (bNum){sEscStr=sEscStr.replace(/\\N/g, "\0");}

  if (AkelPad.IsAkelEdit()){AkelPad.SendMessage(hWndEdit, 3185 /*AEM_LOCKSCROLL*/, 3 /*SB_BOTH*/, true);}

  SetRedraw(hWndEdit, false);

  if (AkelPad.SendMessage(hWndEdit, 3125 /*AEM_GETSEL*/, 0, 0))
  {
    if (AkelPad.SendMessage(hWndEdit, 3127 /*AEM_GETCOLUMNSEL*/, 0, 0))
    {
      nSelState=COLUMNSEL;
      pSelText =AkelPad.GetSelText(2);
    }
    else
    {
      nSelState    =NORMALSEL;
      var nSelStart=AkelPad.GetSelStart();
      var nSelEnd  =AkelPad.GetSelEnd();

      SelCompleteLine(hWndEdit, nSelStart, nSelEnd);

      nSelStart=AkelPad.GetSelStart();
      pSelText =AkelPad.GetSelText(2);

      var pLastStr =pSelText.charAt(pSelText.length-1);

      if (pLastStr=="\n")
      {
        pSelText=pSelText.substr(0, pSelText.length-1);
        CollectGarbage();
      }
    }
  }
  else
  {
    pSelText =AkelPad.GetTextRange(0, -1, 2);
  }

  var oPattern=new RegExp("(^.*$)", "mg");
  pSelText=pSelText.replace(oPattern, sEscStr);
  CollectGarbage();

  if (bNum && sEscStr.indexOf("\0")!=-1)
  {
    pSelText=pSelText.split("\0");
    CollectGarbage();
    var m=0;

    if (nFirstCur==undefined) var nFirstCur=Number(nFirst);
    if (nStepCur==undefined) var nStepCur=Number(nStep);
    if (nFirstCur!=parseInt(nFirstCur,10) || nStepCur!=parseInt(nStepCur,10))
    {
      var r1,r2;
      try{r1=nFirstCur.toString().split(".")[1].length;}catch(e){r1=0;}
      try{r2=nStepCur.toString().split(".")[1].length;}catch(e){r2=0;}
      m=Math.max(r1,r2);
    }

    var nCurrentNum=(bRand) ? nFirstCur+(nStepCur-nFirstCur)*Math.random() : nFirstCur;

    var pNumText;

    if (!bHex && (nWidth==1 || nWidth==0 || nWidth ==-1))
    {
      for (i=0; i<pSelText.length-1; i+=1)
      {
        pNumText=nCurrentNum.toFixed(m);

        pSelText[i]=pSelText[i]+pNumText;
        if (!bLazy || bLazy && (pSelText[i+1].indexOf("\n")!=-1))
        {
          nCurrentNum=(bRand) ? nFirstCur+(nStepCur-nFirstCur)*Math.random() : nCurrentNum+nStepCur;
        }
      }
    }
    else
    {
      for (i=0; i<pSelText.length-1; i+=1)
      {
        pNumText=Pad(nCurrentNum,m);

        pSelText[i]=pSelText[i]+pNumText;
        if (!bLazy || bLazy && (pSelText[i+1].indexOf("\n")!=-1))
        {
          nCurrentNum=(bRand) ? nFirstCur+(nStepCur-nFirstCur)*Math.random() : nCurrentNum+nStepCur;
        }
      }
    }
    pSelText=pSelText.join("");
    CollectGarbage();
  }
  pSelText=pSelText.replace(/\1/g, "\n");
  CollectGarbage();

  if (nSelState==COLUMNSEL)
  {
    dwOptions=AkelPad.SendMessage(hWndEdit, 3227 /*AEM_GETOPTIONS*/, 0, 0);
    if (!(dwOptions & 0x40 /*AECO_PASTESELECTCOLUMN*/)){AkelPad.SendMessage(hWndEdit, 3228 /*AEM_SETOPTIONS*/, 2 /*AECOOP_OR*/, 0x40 /*AECO_PASTESELECTCOLUMN*/);}
    AkelPad.ReplaceSel(pSelText);
    if (!(dwOptions & 0x40 /*AECO_PASTESELECTCOLUMN*/)){AkelPad.SendMessage(hWndEdit, 3228 /*AEM_SETOPTIONS*/, 4 /*AECOOP_XOR*/, 0x40 /*AECO_PASTESELECTCOLUMN*/);}
  }
  else if (nSelState==NORMALSEL)
  {
    if (pLastStr=="\n")
    {
      pSelText=pSelText+"\n";
      CollectGarbage();
    }
    AkelPad.ReplaceSel(pSelText);
    nSelEnd=AkelPad.GetSelEnd();
    AkelPad.SetSel(nSelStart,nSelEnd);
  }
  else if (nSelState==SELECTALL)
  {
    AkelPad.SetSel(0, -1);
    AkelPad.ReplaceSel(pSelText);
  }

  if (AkelPad.IsAkelEdit()){AkelPad.SendMessage(hWndEdit, 3185 /*AEM_LOCKSCROLL*/, 3 /*SB_BOTH*/, false);}

  SetRedraw(hWndEdit, true);

  pSelText=null;
  CollectGarbage();
}

function DisableBtnOK(hWnd)
{
  oSys.Call("user32::GetWindowText"+_TCHAR, hWnd, lpBuffer, nMaxLen);
  var pStrExp=AkelPad.MemRead(lpBuffer, _TSTR);

  if (pStrExp==""){pStrExp="1";}

  if (isNaN(Number(pStrExp)))
  {
    oSys.Call("user32::EnableWindow", aWnd[IDC_OK][WND], false);
    oSys.Call("user32::SetFocus", hWnd);
    return true;
  }
}

function InsertInArray(lpArray, lpItem, nPos)
{
  //For MS JScript backward compatibility
  var i;

  if (nPos<0){nPos=lpArray.length+nPos+1;}
  if (nPos<0){nPos=0;}
  if (nPos>lpArray.length){nPos=lpArray.length;}

  for (i=lpArray.length; i >= 0; i-=1)
  {
    if (i==nPos)
    {
      lpArray[i]=lpItem;
      break;
    }
    lpArray[i]=lpArray[i-1];
  }
}

function DeleteFromArray(lpArray, nPos, nCount)
{
  //For MS JScript backward compatibility
  var i;

  if (nPos<0){nPos=lpArray.length+nPos;}
  if (nPos<0 || nPos >= lpArray.length){return;}
  if (nPos+nCount >= lpArray.length){nCount=lpArray.length-nPos;}

  for (i=nPos; i+nCount<lpArray.length; i+=1)
  {
    lpArray[i]=lpArray[i+nCount];
  }
  lpArray.length-=nCount;
}

function SetWindowFontAndText(hWnd, hFont, pText)
{
  if (hFont){AkelPad.SendMessage(hWnd, 48 /*WM_SETFONT*/, hFont, 1);}

  AkelPad.MemCopy(lpBuffer, pText.toString().substr(0, 255).replace(/\r$/, ""), _TSTR);
  oSys.Call("user32::SetWindowText"+_TCHAR, hWnd, lpBuffer);
}

function SetRedraw(hWnd, bRedraw)
{
  AkelPad.SendMessage(hWnd, 11 /*WM_SETREDRAW*/, bRedraw, 0);
  if (bRedraw){oSys.Call("user32::InvalidateRect", hWnd, 0, true);}
}

function RectToArray(lpRect, rcRect)
{
  rcRect.left  =AkelPad.MemRead(lpRect   , 3 /*DT_DWORD*/);
  rcRect.top   =AkelPad.MemRead(lpRect+4 , 3 /*DT_DWORD*/);
  rcRect.right =AkelPad.MemRead(lpRect+8 , 3 /*DT_DWORD*/);
  rcRect.bottom=AkelPad.MemRead(lpRect+12, 3 /*DT_DWORD*/);
  return rcRect;
}

function CenterWindow(hWndParent, hWnd)
{
  var lpRect;
  var rcWndParent=[];
  var rcWnd=[];
  var X;
  var Y;

  lpRect=AkelPad.MemAlloc(16);
  if (lpRect)  //sizeof(RECT)
  {
    if (!hWndParent){hWndParent=oSys.Call("user32::GetDesktopWindow");}

    oSys.Call("user32::GetWindowRect", hWndParent, lpRect);
    RectToArray(lpRect, rcWndParent);

    oSys.Call("user32::GetWindowRect", hWnd, lpRect);
    RectToArray(lpRect, rcWnd);

    //Center window
    X=rcWndParent.left+((rcWndParent.right-rcWndParent.left)/2-(rcWnd.right-rcWnd.left)/2);
    Y=rcWndParent.top +((rcWndParent.bottom-rcWndParent.top)/2-(rcWnd.bottom-rcWnd.top)/2);

    oSys.Call("user32::SetWindowPos", hWnd, 0, X, Y, 0, 0, 0x15 /*SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE*/);

    AkelPad.MemFree(lpRect);
  }
}

function SelCompleteLine(hWnd, nMinSel, nMaxSel)
{
  if (nMinSel<nMaxSel)
  {
    var nMinLine      =AkelPad.SendMessage(hWnd, 1078 /*EM_EXLINEFROMCHAR*/,        0, nMinSel);
    var nMaxLine      =AkelPad.SendMessage(hWnd, 1078 /*EM_EXLINEFROMCHAR*/,        0, nMaxSel);
    var nMinLineIndex =AkelPad.SendMessage(hWnd, 187       /*EM_LINEINDEX*/, nMinLine,       0);
    var nMaxLineIndex =AkelPad.SendMessage(hWnd, 187       /*EM_LINEINDEX*/, nMaxLine,       0);
    var nMaxLineLength=AkelPad.SendMessage(hWnd, 193      /*EM_LINELENGTH*/,  nMaxSel,       0);
    if (nMaxLineIndex==nMaxSel){nMaxLine-=1;}
    else if (nMaxLineLength){nMaxSel=nMaxLineIndex+nMaxLineLength+1;}
    nMinSel=nMinLineIndex;
    AkelPad.SetSel(nMinSel, nMaxSel);
    return nMaxLine-nMinLine+1;
  }
  return 0;
}

function FunToIn(pTxt)
{
  if (pTxt.indexOf("(...)") > -1)
  {
    pTxt   = pTxt.replace("...", sStr.substring(nBegSelIn, nEndSelIn));
    sStr = sStr.substr(0, nBegSelIn) + pTxt + sStr.substr(nEndSelIn);
    if (nBegSelIn == nEndSelIn)
    {
      nBegSelIn = nBegSelIn + pTxt.length - 1;
      nEndSelIn = nBegSelIn;
    }
    else
    {
      nBegSelIn = nBegSelIn + pTxt.indexOf("(") + 1;
      nEndSelIn = nEndSelIn + pTxt.indexOf("(") + 1;
    }
  }
  else if (pTxt.indexOf("(") > -1)
  {
    sStr = sStr.substr(0, nBegSelIn) + pTxt + sStr.substr(nEndSelIn);
    nBegSelIn = nBegSelIn + pTxt.indexOf("(") + 1;
    nEndSelIn = nBegSelIn;
  }
  else
  {
    sStr = sStr.substr(0, nBegSelIn) + pTxt + sStr.substr(nEndSelIn);
    nBegSelIn = nBegSelIn + pTxt.length;
    nEndSelIn = nBegSelIn;
  }

  oSys.Call("user32::SetFocus", aWnd[IDC_CBB_STR][WND]);
}

function LoWord(nParam)
{
  return (nParam & 0xffff);
}

function HiWord(nParam)
{
  return ((nParam >> 16) & 0xffff);
}

function MkLong(nLoWord, nHiWord)
{
  return (nHiWord << 16) | (nLoWord & 0xffff);
}
- Insert text or/and a sequence of Num/RandomNum to Begin or/and End of every line. May be need ShowMenu.js
This is my first release JS. Base on some other scripts. Smile
NumberCount_1033.lng

Code:
sTxtStr               ="String";
sTxtNum               ="Number";
sTxtRand              ="Random";
sTxtLazy              ="Lazy mode";
sTxtFirst             ="First";
sTxtStep              ="Step";
sTxtEnd               ="End";
sTxtWidth             ="Width";
sTxtPad               ="Padding char";
sTxtSeconds           ="Seconds";
sTxtOK                ="OK";
sTxtCancel            ="Cancel";
var sTxtBackSlace     ="backslash";
var sTxtReturn        ="return";
var sTxtLineFeed      ="line feed";
var sTxtTabulation    ="tabulation";
var sTxtNumberSequence="number sequence";
var sTxtHexNumSequence="Hex number sequence";
var sTxtOriginalLine  ="original line";
var sTxtEmpty         ="Empty";


Last edited by cnnnc on Mon Dec 17, 2012 1:06 am; edited 8 times in total
Back to top
View user's profile Send private message Send e-mail
bluestone



Joined: 19 Apr 2010
Posts: 4

PostPosted: Tue Apr 20, 2010 6:34 am    Post subject: Jion lines together Reply with quote

Jion lines together

Code:

var AkelPad=new ActiveXObject("AkelPad.document");
var WshShell=new ActiveXObject("WScript.shell");

var IDC_INPUT_PREPEND          =1001
var IDC_INPUT_APPEND           =1002
var IDC_INPUT_SEPARATOR        =1003
var IDC_OK                     =1004
var IDC_CANCEL                 =1005
var IDC_STATIC                 =-1

var hMainWnd=AkelPad.GetMainWnd();
var oSys=AkelPad.SystemFunction();
var pScriptName=WScript.ScriptName;
var hInstanceDLL=AkelPad.GetInstanceDll();
var bAkelEdit=AkelPad.IsAkelEdit();

var hWndDialog;
var hWndStatic3;
var hWndSeparator;
var hWndStatic1;
var hWndPrepend;
var hWndStatic2;
var hWndAppend;
var hWndOK;
var hWndCancel;
var hGuiFont;
var lpBuffer;
var pStrPrepend = "";
var pStrAppend = "";
var pStrSeparator = "";
var nStrSeparatorLen;
var _TCHAR;
var _TSTR;
var _TSIZE;

if (hMainWnd)
{
  if (ScriptEngineMajorVersion() <= 5 && ScriptEngineMinorVersion() < 5)
  {
    AkelPad.MessageBox(hMainWnd, "JScript version is less than 5.5.", pScriptName, 48 /*MB_ICONEXCLAMATION*/);
    WScript.Quit();
  }

  if (AkelPad.IsOldWindows())
  {
    _TCHAR="A";
    _TSTR=0 /*DT_ANSI*/;
    _TSIZE=1 /*sizeof(char)*/;
  }
  else
  {
    _TCHAR="W";
    _TSTR=1 /*DT_UNICODE*/;
    _TSIZE=2 /*sizeof(wchar_t)*/;
  }

  if (AkelPad.WindowRegisterClass(pScriptName))
  {
    if (lpBuffer=AkelPad.MemAlloc(256 * _TSIZE))
    {
      //Create dialog
      AkelPad.MemCopy(lpBuffer, pScriptName, _TSTR);
      hWndDialog=oSys.Call("user32::CreateWindowEx" + _TCHAR,
                           0,               //dwExStyle
                           lpBuffer,        //lpClassName
                           0,               //lpWindowName
                           0x90CA0000,
                           0,               //x
                           0,               //y
                           360,             //nWidth
                           110,             //nHeight
                           hMainWnd,        //hWndParent
                           0,               //ID
                           hInstanceDLL,    //hInstance
                           DialogCallback);
      if (hWndDialog)
      {
        //Disable main window, to make dialog modal
        oSys.Call("user32::EnableWindow", hMainWnd, false);
        //Message loop
        AkelPad.WindowGetMessage();
      }
      AkelPad.MemFree(lpBuffer);
    }
    AkelPad.WindowUnregisterClass(pScriptName);
  }
}

function DialogCallback(hWnd, uMsg, wParam, lParam)
{
  if (uMsg == 1)  //WM_CREATE
  {
    try
    {
      pStrPrepend=WshShell.RegRead("HKCU\\Software\\Akelsoft\\AkelPad\\Plugs\\Scripts\\LinesJoin\\Prepend");   
      pStrAppend=WshShell.RegRead("HKCU\\Software\\Akelsoft\\AkelPad\\Plugs\\Scripts\\LinesJoin\\Append"); 

pStrSeparator=WshShell.RegRead("HKCU\\Software\\Akelsoft\\AkelPad\\Plugs\\Scripts\\LinesJoin\\Separator");   
    }
    catch (nError)
    {
    }

    hGuiFont=oSys.Call("gdi32::GetStockObject", 17 /*DEFAULT_GUI_FONT*/);

    //Dialog caption
    AkelPad.MemCopy(lpBuffer, pScriptName, _TSTR);
    oSys.Call("user32::SetWindowText" + _TCHAR, hWnd, lpBuffer);


    ////Static window

    //Create window
    AkelPad.MemCopy(lpBuffer, "STATIC", _TSTR);
    hWndStatic1=oSys.Call("user32::CreateWindowEx" + _TCHAR,
                         0,            //dwExStyle
                         lpBuffer,     //lpClassName
                         0,            //lpWindowName
                         0x50000000,   //WS_VISIBLE|WS_CHILD
                         10,           //x
                         10,           //y
                         60,          //nWidth
                         23,           //nHeight
                         hWnd,         //hWndParent
                         IDC_STATIC,   //ID
                         hInstanceDLL, //hInstance
                         0);           //lpParam
    //Set font and text
    SetWindowFontAndText(hWndStatic1, hGuiFont, "Prepend:");


    ////Edit window

    //Create window
    AkelPad.MemCopy(lpBuffer, "EDIT", _TSTR);
    hWndPrepend=oSys.Call("user32::CreateWindowEx" + _TCHAR,
                         0x200,        //WS_EX_CLIENTEDGE
                         lpBuffer,     //lpClassName
                         0,            //lpWindowName
                         0x50010080,   //WS_VISIBLE|WS_CHILD|WS_TABSTOP|ES_AUTOHSCROLL
                         60,           //x
                         10,           //y
                         45,          //nWidth
                         23,           //nHeight
                         hWnd,         //hWndParent
                         IDC_INPUT_PREPEND,    //ID
                         hInstanceDLL, //hInstance
                         0);           //lpParam
    //Set font and text
    SetWindowFontAndText(hWndPrepend, hGuiFont, pStrPrepend);

     ////Static window

    //Create window
    AkelPad.MemCopy(lpBuffer, "STATIC", _TSTR);
    hWndStatic2=oSys.Call("user32::CreateWindowEx" + _TCHAR,
                         0,            //dwExStyle
                         lpBuffer,     //lpClassName
                         0,            //lpWindowName
                         0x50000000,   //WS_VISIBLE|WS_CHILD
                         110,           //x
                         10,           //y
                         60,          //nWidth
                         23,           //nHeight
                         hWnd,         //hWndParent
                         IDC_STATIC,   //ID
                         hInstanceDLL, //hInstance
                         0);           //lpParam
    //Set font and text
    SetWindowFontAndText(hWndStatic2, hGuiFont, "Append:");


    ////Edit window

    //Create window
    AkelPad.MemCopy(lpBuffer, "EDIT", _TSTR);
    hWndAppend=oSys.Call("user32::CreateWindowEx" + _TCHAR,
                         0x200,        //WS_EX_CLIENTEDGE
                         lpBuffer,     //lpClassName
                         0,            //lpWindowName
                         0x50010080,   //WS_VISIBLE|WS_CHILD|WS_TABSTOP|ES_AUTOHSCROLL
                         152,           //x
                         10,           //y
                         45,          //nWidth
                         23,           //nHeight
                         hWnd,         //hWndParent
                         IDC_INPUT_APPEND,    //ID
                         hInstanceDLL, //hInstance
                         0);           //lpParam
    //Set font and text
    SetWindowFontAndText(hWndAppend, hGuiFont, pStrAppend);

    ////Static window

    //Create window
    AkelPad.MemCopy(lpBuffer, "STATIC", _TSTR);
    hWndStatic3=oSys.Call("user32::CreateWindowEx" + _TCHAR,
                         0,            //dwExStyle
                         lpBuffer,     //lpClassName
                         0,            //lpWindowName
                         0x50000000,   //WS_VISIBLE|WS_CHILD
                         203,           //x
                         10,           //y
                         60,          //nWidth
                         23,           //nHeight
                         hWnd,         //hWndParent
                         IDC_STATIC,   //ID
                         hInstanceDLL, //hInstance
                         0);           //lpParam
    //Set font and text
    SetWindowFontAndText(hWndStatic3, hGuiFont, "Separator:");


    ////Edit window

    //Create window
    AkelPad.MemCopy(lpBuffer, "EDIT", _TSTR);
    hWndSeparator=oSys.Call("user32::CreateWindowEx" + _TCHAR,
                         0x200,        //WS_EX_CLIENTEDGE
                         lpBuffer,     //lpClassName
                         0,            //lpWindowName
                         0x50010080,   //WS_VISIBLE|WS_CHILD|WS_TABSTOP|ES_AUTOHSCROLL
                         265,           //x
                         10,           //y
                         80,          //nWidth
                         23,           //nHeight
                         hWnd,         //hWndParent
                         IDC_INPUT_SEPARATOR,    //ID
                         hInstanceDLL, //hInstance
                         0);           //lpParam
    //Set font and text
    SetWindowFontAndText(hWndSeparator, hGuiFont, pStrSeparator);

   

    ////OK button window

    //Create window
    AkelPad.MemCopy(lpBuffer, "BUTTON", _TSTR);
    hWndOK=oSys.Call("user32::CreateWindowEx" + _TCHAR,
                     0,            //dwExStyle
                     lpBuffer,     //lpClassName
                     0,            //lpWindowName
                     0x50010000,   //WS_VISIBLE|WS_CHILD|WS_TABSTOP
                     179,          //x
                     50,          //y
                     75,           //nWidth
                     23,           //nHeight
                     hWnd,         //hWndParent
                     IDC_OK,       //ID
                     hInstanceDLL, //hInstance
                     0);           //lpParam
    //Set font and text
    SetWindowFontAndText(hWndOK, hGuiFont, "OK");


    ////Cancel button window

    //Create window
    AkelPad.MemCopy(lpBuffer, "BUTTON", _TSTR);
    hWndCancel=oSys.Call("user32::CreateWindowEx" + _TCHAR,
                         0,            //dwExStyle
                         lpBuffer,     //lpClassName
                         0,            //lpWindowName
                         0x50010000,   //WS_VISIBLE|WS_CHILD|WS_TABSTOP
                         260,          //x
                         50,          //y
                         75,           //nWidth
                         23,           //nHeight
                         hWnd,         //hWndParent
                         IDC_CANCEL,   //ID
                         hInstanceDLL, //hInstance
                         0);           //lpParam
    //Set font and text
    SetWindowFontAndText(hWndCancel, hGuiFont, "Cancel");

    //Center dialog
    CenterWindow(hMainWnd, hWnd);
  }
  else if (uMsg == 7)  //WM_SETFOCUS
  {
    oSys.Call("user32::SetFocus", hWndSeparator);
  }
  else if (uMsg == 256)  //WM_KEYDOWN
  {
    if (wParam == 27)  //VK_ESCAPE
    {
      //Escape key pushes Cancel button
      oSys.Call("user32::PostMessage" + _TCHAR, hWndDialog, 273 /*WM_COMMAND*/, IDC_CANCEL, 0);
    }
    else if (wParam == 13)  //VK_RETURN
    {
      //Return key pushes OK button
      oSys.Call("user32::PostMessage" + _TCHAR, hWndDialog, 273 /*WM_COMMAND*/, IDC_OK, 0);
    }
  }
  else if (uMsg == 273)  //WM_COMMAND
  {
    if ((wParam & 0xffff) == IDC_INPUT_SEPARATOR)
    {
      nStrSeparatorLen=oSys.Call("user32::GetWindowTextLength" + _TCHAR, hWndSeparator);

      if (nStrSeparatorLen)
      {
        oSys.Call("user32::EnableWindow", hWndOK, true);
      }
      else
      {
        oSys.Call("user32::EnableWindow", hWndOK, false);
      }
    }
    else if ((wParam & 0xffff) == IDC_OK)
    {
      oSys.Call("user32::GetWindowText" + _TCHAR, hWndSeparator, lpBuffer, 256);
      pStrSeparator=AkelPad.MemRead(lpBuffer, _TSTR);
     oSys.Call("user32::GetWindowText" + _TCHAR, hWndAppend, lpBuffer, 256);
      pStrAppend=AkelPad.MemRead(lpBuffer, _TSTR);
      oSys.Call("user32::GetWindowText" + _TCHAR, hWndPrepend, lpBuffer, 256);
      pStrPrepend=AkelPad.MemRead(lpBuffer, _TSTR);
      oSys.Call("user32::EnableWindow", hWndOK, false);

      LinesJoin();
      oSys.Call("user32::PostMessage" + _TCHAR, hWndDialog, 16 /*WM_CLOSE*/, 0, 0);
    }
    else if ((wParam & 0xffff) == IDC_CANCEL)
    {
      oSys.Call("user32::PostMessage" + _TCHAR, hWndDialog, 16 /*WM_CLOSE*/, 0, 0);
    }
  }
  else if (uMsg == 16)  //WM_CLOSE
  {
    //Enable main window
    oSys.Call("user32::EnableWindow", hMainWnd, true);

    WshShell.RegWrite("HKCU\\Software\\Akelsoft\\AkelPad\\Plugs\\Scripts\\LinesJoin\\Prepend", pStrPrepend, "REG_SZ");
    WshShell.RegWrite("HKCU\\Software\\Akelsoft\\AkelPad\\Plugs\\Scripts\\LinesJoin\\Append", pStrAppend, "REG_SZ");
    WshShell.RegWrite("HKCU\\Software\\Akelsoft\\AkelPad\\Plugs\\Scripts\\LinesJoin\\Separator", pStrSeparator
, "REG_SZ");
    //Destroy dialog
    oSys.Call("user32::DestroyWindow", hWnd);
  }
  else if (uMsg == 2)  //WM_DESTROY
  {
    //Exit message loop
    oSys.Call("user32::PostQuitMessage", 0);
  }
  return 0;
}

function LinesJoin() {
  var hWndEdit=AkelPad.GetEditWnd();
  var pSelText;
  var pArray;
  var pResult;
  var nSelStart;
  var nSelEnd;

    nSelStart=AkelPad.GetSelStart();
    nSelEnd=AkelPad.GetSelEnd();
    if (nSelStart == nSelEnd)
      AkelPad.SetSel(0, -1);
    else
      SelCompliteLine(hWndEdit, nSelStart, nSelEnd);
    nSelStart=AkelPad.GetSelStart();
    nSelEnd=AkelPad.GetSelEnd();
    pSelText=AkelPad.GetSelText(2 /*\n*/);
    if (!bAkelEdit)
      pSelText=pSelText.replace(/\r/g, "\n");
    pResult="";
   pArray = pSelText.split("\n");
   i = pArray.length-1;
   if(pArray[i].length > 0) {
      i = i + 1;
   }
    if (pStrPrepend.length > 0)
    {
      for (var j=0; j<i;j++) {
      pArray[j] = pStrPrepend + pArray[j];
     }
    }
    if (pStrAppend.length > 0)
    {
      for (var j=0; j<i;j++) {
      pArray[j] = pArray[j] + pStrAppend;
     }
    }
    pResult = pArray.join(pStrSeparator);
    AkelPad.ReplaceSel(pResult);
    AkelPad.SetSel(nSelStart, nSelStart);
    AkelPad.SetSel(nSelStart, nSelStart + pResult.length);
}

//************************************************//
//Common Functions
//************************************************//

function SetWindowFontAndText(hWnd, hFont, pText)
{
  var lpWindowText;

  AkelPad.SendMessage(hWnd, 48 /*WM_SETFONT*/, hFont, true);

  if (lpWindowText=AkelPad.MemAlloc(256 * _TSIZE))
  {
    AkelPad.MemCopy(lpWindowText, pText.substr(0, 255), _TSTR);
    oSys.Call("user32::SetWindowText" + _TCHAR, hWnd, lpWindowText);

    AkelPad.MemFree(lpWindowText);
  }
}

function RectToArray(lpRect, rcRect)
{
  rcRect.left=AkelPad.MemRead(lpRect, 3 /*DT_DWORD*/);
  rcRect.top=AkelPad.MemRead(lpRect + 4, 3 /*DT_DWORD*/);
  rcRect.right=AkelPad.MemRead(lpRect + 8, 3 /*DT_DWORD*/);
  rcRect.bottom=AkelPad.MemRead(lpRect + 12, 3 /*DT_DWORD*/);
  return rcRect;
}

function CenterWindow(hWndParent, hWnd)
{
  var lpRect;
  var rcWndParent=[];
  var rcWnd=[];
  var X;
  var Y;

  if (lpRect=AkelPad.MemAlloc(16))  //sizeof(RECT)
  {
    if (!hWndParent)
      hWndParent=oSys.Call("user32::GetDesktopWindow");

    oSys.Call("user32::GetWindowRect", hWndParent, lpRect);
    RectToArray(lpRect, rcWndParent);

    oSys.Call("user32::GetWindowRect", hWnd, lpRect);
    RectToArray(lpRect, rcWnd);

    //Center window
    X=rcWndParent.left + ((rcWndParent.right - rcWndParent.left) / 2 - (rcWnd.right - rcWnd.left) / 2);
    Y=rcWndParent.top + ((rcWndParent.bottom - rcWndParent.top) / 2 - (rcWnd.bottom - rcWnd.top) / 2);

    oSys.Call("user32::SetWindowPos", hWnd, 0, X, Y, 0, 0, 0x15 /*SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE*/);

    AkelPad.MemFree(lpRect);
  }
}

function SelCompliteLine(hWnd, nMinSel, nMaxSel)
{
  var nMinLine;
  var nMaxLine;
  var nMinLineIndex;
  var nMaxLineIndex;
  var nMaxLineLength;

  if (nMinSel < nMaxSel)
  {
    nMinLine=AkelPad.SendMessage(hWnd, 1078 /*EM_EXLINEFROMCHAR*/, 0, nMinSel);
    nMaxLine=AkelPad.SendMessage(hWnd, 1078 /*EM_EXLINEFROMCHAR*/, 0, nMaxSel);
    nMinLineIndex=AkelPad.SendMessage(hWnd, 187 /*EM_LINEINDEX*/, nMinLine, 0);
    nMaxLineIndex=AkelPad.SendMessage(hWnd, 187 /*EM_LINEINDEX*/, nMaxLine, 0);
    nMaxLineLength=AkelPad.SendMessage(hWnd, 193 /*EM_LINELENGTH*/, nMaxSel, 0);

    if (nMaxLineIndex == nMaxSel) --nMaxLine;
    else if (nMaxLineLength) nMaxSel=nMaxLineIndex + nMaxLineLength + 1;
    nMinSel=nMinLineIndex;

    AkelPad.SetSel(nMinSel, nMaxSel);
    return nMaxLine - nMinLine + 1;
  }
  return 0;
}

Back to top
View user's profile Send private message
KDJ



Joined: 06 Mar 2010
Posts: 1338
Location: Poland

PostPosted: Thu Apr 29, 2010 7:09 pm    Post subject: Reply with quote

I modified SplitSwitch.js, the script written by Instructor.
Now, menu options can be given in any order.

SplitSwitch_alternative.js

Code:

/// Split window switch for AkelPad 4.4.4
//
// How to use:
// Add menu to ContextMenu plugin:
//
//  "Split window"
//  {
//    -"Four panes" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4212" "1" "4"`)
//    -"Two vertical panes" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4213" "2" "4"`)
//    -"Two horizontal panes" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4214" "3" "4"`)
//    SEPARATOR
//    -"Remove split" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4215" "4" "4"`)
//  }
//
// or in a different order:
//
//  {
//    -"Two vertical panes" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4213" "1" "4"`)
//    -"Two horizontal panes" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4214" "2" "4"`)
//    -"Four panes" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4212" "3" "4"`)
//    SEPARATOR
//    -"Remove split" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4215" "4" "4"`)
//  }
//
/// Переключение между режимами разделения окна.
//
// Как использовать:
// Добавляем меню в ContextMenu плагин:
//
//  "Разделить окно"
//  {
//    -"Четыре части" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4212" "1" "4"`)
//    -"Две вертикальные части" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4213" "2" "4"`)
//    -"Две горизонтальные части" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4214" "3" "4"`)
//    SEPARATOR
//    -"Убрать разделение" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4215" "4" "4"`)
//  }
//
// или в другом порядке:
//
//  {
//    -"Две вертикальные части" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4213" "1" "4"`)
//    -"Две горизонтальные части" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4214" "2" "4"`)
//    -"Четыре части" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4212" "3" "4"`)
//    SEPARATOR
//    -"Убрать разделение" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4215" "4" "4"`)
//  }


//Arguments
var nMenuHandle=0;
var nItemID=0;
var nAction=0;
var nOpt=0;
var nLastOpt=0;
if (WScript.Arguments.length >= 5)
{
  nMenuHandle=parseInt(WScript.Arguments(0));
  nItemID=parseInt(WScript.Arguments(1));
  nAction=parseInt(WScript.Arguments(2));
  nOpt=parseInt(WScript.Arguments(3));
  nLastOpt=parseInt(WScript.Arguments(4));
}

var hMainWnd=AkelPad.GetMainWnd();
var hWndEdit=AkelPad.GetEditWnd();
var oFunction=AkelPad.SystemFunction();
var nFirstIdInGroup;
var nLastIdInGroup;

if (hMainWnd)
{
  if (nMenuHandle && nItemID && nAction && nOpt && nLastOpt)
  {
    nFirstIdInGroup=nItemID - nOpt + 1;
    nLastIdInGroup=nItemID - nOpt + nLastOpt;
    if (nAction == 4215 /*IDM_VIEW_SPLIT_WINDOW_OFF*/)
      nItemID=-1;

    //Turn off
    if (AkelPad.SendMessage(hWndEdit, 3447 /*AEM_GETMASTER*/, 0, 0))
      AkelPad.SendMessage(hMainWnd, 273 /*WM_COMMAND*/, 4212 /*IDM_VIEW_SPLIT_WINDOW_ALL*/, 0);

    //Turn on
    if (nAction != 4215 /*IDM_VIEW_SPLIT_WINDOW_OFF*/)
      AkelPad.SendMessage(hMainWnd, 273 /*WM_COMMAND*/, nAction, 0);

    //Set radio button
    oFunction.AddParameter(nMenuHandle);
    oFunction.AddParameter(nFirstIdInGroup);
    oFunction.AddParameter(nLastIdInGroup);
    oFunction.AddParameter(nItemID);
    oFunction.AddParameter(0x0 /*MF_BYCOMMAND*/);
    oFunction.Call("user32::CheckMenuRadioItem");
  }
}



PS: Since version 4.7.0 the function performed by the script is built into AkelPad.


Last edited by KDJ on Sun Dec 04, 2011 9:25 pm; edited 3 times in total
Back to top
View user's profile Send private message
VladSh



Joined: 29 Nov 2006
Posts: 2610
Location: Киев, Русь

PostPosted: Wed May 26, 2010 10:42 am    Post subject: онлайн-перевод выделенного текста с помощью Google Reply with quote

InternetRequest.js
Code:
///Internet request for formed url in the arguments
///Интернет-запрос по сформированному в аргументах URL
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=7303#7303
// Version: 2.1 (24.06.2010)

if (WScript.Arguments.length == 1)
{
   var pSelText = AkelPad.GetSelText();
   if (pSelText)
   {
      var pLink = WScript.Arguments(0).replace("\\s", pSelText);
      
      var WshShell = new ActiveXObject("WScript.Shell");
      WshShell.Run('\"' + pLink + '\"');
   }
}


Использование (из контекстного меню окна редактирования):
Code:
"Интернет" Icon("%a\AkelFiles\Plugs\Toolbar\alink.ico")
{
  -"Перевести: Auto -> Ru (Google)" Call("Scripts::Main", 1, "InternetRequest.js", `"http://translate.google.com/#auto|ru|\s"`)
}
подробнее см. контекстные меню.


Last edited by VladSh on Thu Jul 21, 2011 2:15 pm; edited 3 times in total
Back to top
View user's profile Send private message Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic    AkelPad Forum Index -> Plugins All times are GMT
Goto page Previous  1, 2, 3, 4, 5 ... 16, 17, 18  Next
Page 4 of 18

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


SourceForge.net Logo Powered by phpBB © 2001, 2005 phpBB Group