View previous topic :: View next topic |
Author |
Message |
KDJ
Joined: 06 Mar 2010 Posts: 1929 Location: Poland
|
Posted: Sun Dec 23, 2012 7:41 pm Post subject: |
|
|
"Go to" dialog with argument.
GoToEx.js
Code: | // http://akelpad.sourceforge.net/forum/viewtopic.php?p=20829#20829
// Version: 2013-08-23
// Author: KDJ
//
// *** "Go to" dialog with argument ***
//
// Usage:
// Call("Scripts::Main", 1, "GoToEx.js") - standard procedure call
// Call("Scripts::Main", 1, "GoToEx.js", "L") - go to Line:Column
// Call("Scripts::Main", 1, "GoToEx.js", "O") - go to Offset
if (! AkelPad.GetEditWnd())
WScript.Quit();
var IDC_GOTO_LINE = 3102;
var IDC_GOTO_OFFSET = 3103;
var oSys = AkelPad.SystemFunction();
var nLineArg = -1;
var hWndGoTo;
var hWndLine;
var hWndOffset;
if (WScript.Arguments.length)
{
if (WScript.Arguments(0).toUpperCase() == "L")
nLineArg = 1;
else if (WScript.Arguments(0).toUpperCase() == "O")
nLineArg = 0;
}
AkelPad.Command(4162 /*IDM_EDIT_GOTO*/);
if (nLineArg >= 0)
{
if (hWndGoTo = GetGoToDialog())
{
hWndLine = oSys.Call("User32::GetDlgItem", hWndGoTo, IDC_GOTO_LINE);
hWndOffset = oSys.Call("User32::GetDlgItem", hWndGoTo, IDC_GOTO_OFFSET);
if (hWndLine && hWndOffset)
{
SendMessage(hWndLine, 241 /*BM_SETCHECK*/, nLineArg, 0);
SendMessage(hWndOffset, 241 /*BM_SETCHECK*/, ! nLineArg, 0);
if (nLineArg)
SendMessage(hWndGoTo, 273 /*WM_COMMAND*/, IDC_GOTO_LINE, hWndLine);
else
SendMessage(hWndGoTo, 273 /*WM_COMMAND*/, IDC_GOTO_OFFSET, hWndOffset);
}
}
}
function GetGoToDialog()
{
var lpMLT = AkelPad.MemAlloc(4);
var hWnd = SendMessage(AkelPad.GetMainWnd(), 1275 /*AKD_GETMODELESS*/, 0, lpMLT);
var hDlg = 0;
if (AkelPad.MemRead(lpMLT, 3 /*DT_DWORD*/) == 5 /*MLT_GOTO*/)
hDlg = hWnd;
AkelPad.MemFree(lpMLT);
return hDlg;
}
function SendMessage(hWnd, uMsg, wParam, lParam)
{
return oSys.Call("User32::SendMessageW", hWnd, uMsg, wParam, lParam);
}
|
Last edited by KDJ on Sat Dec 20, 2014 6:53 pm; edited 2 times in total |
|
Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1929 Location: Poland
|
Posted: Wed Dec 26, 2012 8:31 pm Post subject: |
|
|
Extended version of "Find/Replace" dialog - part 1.
Part 2 - in the next post. Part 3 is here: FindReplaceEx_part3.js
All parts you should save in one file.
Required to include: InputBox_function.js
All in one: KDJ.zip
FindReplaceEx.js
Code: | // http://akelpad.sourceforge.net/forum/viewtopic.php?p=20852#20852
// Version: 2016-11-18
// Author: KDJ
//
// *** Extended version of "Find/Replace" dialog ***
//
// Required to include: InputBox_function.js
//
// Usage:
// Call("Scripts::Main", 1, "FindReplaceEx.js") - "Find" dialog
// Call("Scripts::Main", 1, "FindReplaceEx.js", '-dlg="R"') - "Replace" dialog
// Call("Scripts::Main", 1, "FindReplaceEx.js", '-dlg="R" -FR="M+R+S" -RDB="A"') - "Replace" dialog, select "Match case" and "Regular expressions", direction "In selection", set default push button to "Replace all",
// Call("Scripts::Main", 1, "FindReplaceEx.js", '-dlg="B" -FR="A" -FRE="D+M+" -BR=-2') - replace all files using batch #2 without confirmation and message, next close dialog
//
// Arguments:
// -dlg - dialog that will be displayed when you run the script:
// "F" - "Find" (default)
// "R" - "Replace"
// "G" - "Go to"
// "B" - "Batch replace"
// -GT - set "Go to" initial parameter:
// "L" - "Line:Column"
// "O" - "Offset"
// -FR - set "Find/Replace" initial parameters:
// "M+" - "Match case" check
// "M-" - "Match case" uncheck
// "W+" - "Whole word" check
// "W-" - "Whole word" uncheck
// "R+" - "Regular expressions" check
// "R-" - "Regular expressions" uncheck
// "RN+" - ". matches \n" check
// "RN-" - ". matches \n" uncheck
// "E+" - "Esc-sequences" check
// "E-" - "Esc-sequences" uncheck
// "D" - "Down" (direction)
// "U" - "Up"
// "B" - "Begining"
// "S" - "In selection"
// "A" - "All files"
// -FRE - set "Find/Replace" extended parameters:
// "D+" - ""Replace all" closes dialog" check
// "D-" - ""Replace all" closes dialog" uncheck
// "M+" - ""Replace all" without message" check
// "M-" - ""Replace all" without message" uncheck
// "S+" - "Check "in selection" if selection not empty" check
// "S-" - "Check "in selection" if selection not empty" uncheck
// "C+" - "Cycle search" check
// "C-" - "Cycle search" uncheck
// "P+" - "Prompt" check
// "P-" - "Prompt" uncheck
// -RDB - change default push button in "Replace" dialog:
// "R" - "Replace"
// "A" - "Replace all"
// -BR - batch replace all using batch with the specified number, eg:
// -BR=5 - replace all using batch #5
// -BR=-5 - same, but without confirmation
//
// Manual parameters (set in FindReplaceEx.ini file):
// bGoToDlg=true; - allows to switch to "Go to" dialog
// bFastCount=false; - if true, "Count" function is executed faster, but it can't be stopped
//
// In "Find/Replace" dialog:
// F1 - help for regular expressions (if "Regular expressions" is checked)
// Ctrl+F1 - AkelHelp-*.htm in default browser (if "Regular expressions" is checked)
// Shift+F1 - AkelHelp-*.htm in HtmlView.js (if "Regular expressions" is checked and HtmlView.js is available)
// F2 - Templates/Batches
//
// In "Templates/Batches" dialog:
// F1 - help for regular expressions
// Ctrl+F1 - AkelHelp-*.htm in default browser
// Shift+F1 - AkelHelp-*.htm in HtmlView.js
// F3 - next template (Shift+F3 - previous)
// Ctrl+Tab - next batch (Ctrl+Shift+Tab - previous batch)
// Ctrl+(1-9) - select batch number
// Alt+Right - add template to batch
// Enter - OK, set current template into "Find/Replace" dialog (also double click in item list)
// Esc - close dialog
// RightClick - context menu (edit boxes, list headers and batch tabs)
// If focus is in templates list:
// Ins - New button, new template based on current one
// Ctrl+Ins - Add button, add template based on "Find/Replace" dialog (also with Shift)
// F2 - rename template
// Alt+Up - move template up (move works only if sorting isn't set)
// Alt+Down - move template down
// Ctrl+Del - remove template (also with Shift or Alt)
// If focus is in batches list:
// F2 - rename batch
// Alt+Up - move item up
// Alt+Down - move item down
// Ctrl+Del - remove item from list (also with Shift or Alt)
//
// Remarks:
// Find/Replace templates are saved in file FindReplaceEx_templates.tsv
// HtmlView.js is here: http://akelpad.sourceforge.net/forum/viewtopic.php?p=29221#29221
var oSys = AkelPad.SystemFunction();
var hInstDLL = AkelPad.GetInstanceDll();
var sClass = "AkelPad::Scripts::" + WScript.ScriptName + "::" + oSys.Call("Kernel32::GetCurrentProcessId");
if ((! AkelPad.GetEditWnd()) || (! AkelPad.Include("InputBox_function.js")) || oSys.Call("User32::FindWindowExW", 0, 0, sClass, 0))
WScript.Quit();
var DT_UNICODE = 1;
var DT_QWORD = 2;
var DT_DWORD = 3;
var DT_WORD = 4;
//AKD_GETMODELESS types
var MLT_FIND = 3;
var MLT_REPLACE = 4;
var MLT_GOTO = 5;
//Find/Replace flags
var FRF_DOWN = 0x00000001;
var FRF_WHOLEWORD = 0x00000002;
var FRF_MATCHCASE = 0x00000004;
var FRF_REGEXPNONEWLINEDOT = 0x00040000;
var FRF_REGEXP = 0x00080000;
var FRF_UP = 0x00100000;
var FRF_BEGINNING = 0x00200000; //FRF_DOWN|FRF_BEGINNING
var FRF_SELECTION = 0x00400000; //FRF_DOWN|FRF_SELECTION
var FRF_ESCAPESEQ = 0x00800000;
var FRF_ALLFILES = 0x01000000; //FRF_DOWN|FRF_BEGINNING|FRF_ALLFILES
var FRF_REPLACEALLANDCLOSE = 0x02000000;
var FRF_CHECKINSELIFSEL = 0x04000000;
var FRF_CYCLESEARCH = 0x08000000;
var FRF_CYCLESEARCHPROMPT = 0x10000000;
var FRF_REPLACEALLNOMSG = 0x20000000;
var IDCANCEL = 2;
var IDC_SEARCH_FIND = 3052; //Combobox What
var IDC_SEARCH_REPLACE = 3053; //Combobox With
var IDC_SEARCH_MATCHCASE = 3054;
var IDC_SEARCH_WHOLEWORD = 3055;
var IDC_SEARCH_ESCAPESEQ = 3056;
var IDC_SEARCH_REGEXP = 3057;
var IDC_SEARCH_BACKWARD = 3059;
var IDC_SEARCH_FORWARD = 3060;
var IDC_SEARCH_BEGINNING = 3061;
var IDC_SEARCH_INSEL = 3062;
var IDC_SEARCH_ALLFILES = 3064;
var IDC_SEARCH_FIND_BUTTON = 3065;
var IDC_SEARCH_REPLACE_BUTTON = 3066;
var IDC_SEARCH_ALL_BUTTON = 3067;
var IDC_SEARCH_REGEXP_ARROW = 3068;
var IDC_GOTO_LINE = 3102;
var IDC_GOTO_OFFSET = 3103;
var hMainWnd = AkelPad.GetMainWnd();
var hGuiFont = oSys.Call("Gdi32::GetStockObject", 17 /*DEFAULT_GUI_FONT*/);
var oFSO = new ActiveXObject("Scripting.FileSystemObject");
var bContinueDlg = true;
var bFirstTimeGT = true;
var nWhatSel1 = 0;
var nWhatSel2 = -1;
var nWithSel1 = 0;
var nWithSel2 = -1;
var hDlg;
var hDlgSubClass;
var aButSubClass;
var hWhatE;
var hWithE;
var hCancelB;
var hFocus;
var sWhatText;
var sWithText;
var nResizeW;
var nResizeH;
var bQSearchDialogSwitcher;
var i;
var nBufSize = 32768 * 2;
var lpBuffer = AkelPad.MemAlloc(nBufSize);
var lpLVITEM = AkelPad.MemAlloc(_X64 ? 72 : 60); //sizeof(LVITEM)
AkelPad.MemCopy(lpLVITEM, 0x0001 /*LVIF_TEXT*/, DT_DWORD);
AkelPad.MemCopy(_PtrAdd(lpLVITEM, _X64 ? 24 : 20), lpBuffer, DT_QWORD);
AkelPad.MemCopy(_PtrAdd(lpLVITEM, _X64 ? 32 : 24), nBufSize, DT_DWORD);
var Scale =
{
Init: function()
{
var hDC = oSys.Call("User32::GetDC", hMainWnd);
this.ScaleX = oSys.Call("Gdi32::GetDeviceCaps", hDC, 88 /*LOGPIXELSX*/);
this.ScaleY = oSys.Call("Gdi32::GetDeviceCaps", hDC, 90 /*LOGPIXELSY*/);
oSys.Call("User32::ReleaseDC", hMainWnd, hDC);
//Align to 16 pixel
this.ScaleX += (16 - this.ScaleX % 16) % 16;
this.ScaleY += (16 - this.ScaleY % 16) % 16;
},
X: function(n) {return oSys.Call("Kernel32::MulDiv", n, this.ScaleX, 96);},
Y: function(n) {return oSys.Call("Kernel32::MulDiv", n, this.ScaleY, 96);},
UX: function(n) {return oSys.Call("Kernel32::MulDiv", n, 96, this.ScaleX);},
UY: function(n) {return oSys.Call("Kernel32::MulDiv", n, 96, this.ScaleY);}
}
Scale.Init();
var aDlg = [];
var aWnd = [];
var aSubClassFRT = [];
var nFRTMinW = Scale.X(778);
var nFRTMinH = Scale.Y(312);
var hWndFRT;
var bCheckBRLV;
//ini settings
var bGoToDlg = true;
var bFastCount = false;
var bTranspNA = false;
var nOpacity = 255;
var bMore = false;
var bAEFont = false;
var nFRTSel = 0;
var bFRTSort = false;
var nFRTX = 0;
var nFRTY = 0;
var nBRX = 200;
var nBRY = 200;
var nFRTW;
var nFRTH;
var nDlgX;
var nDlgY;
var nBR;
var aBR;
var aBRCB;
var aBRName;
var aFRTCol;
var aBRCol;
//script arguments
var nFRF;
var nDlgType;
var nDefButID;
var nGoTo;
var nBatchNum;
GetDialogWnd();
if (hDlg)
SendMessage(hDlg, 273 /*WM_COMMAND*/, IDCANCEL, hCancelB);
ReadIni();
GetArguments();
var IDFRTS = 9000;
var IDFRTLV = 9001;
var IDWHATS = 9002;
var IDWITHS = 9003;
var IDWHATE = 9004;
var IDWITHE = 9005;
var IDMATCHB = 9006;
var IDWHOLEWB = 9007;
var IDREGEXPB = 9008;
var IDDOTNLB = 9009;
var IDESCSEQB = 9010;
var IDDIRG = 9011;
var IDDIRDOWNB = 9012;
var IDDIRUPB = 9013;
var IDDIRBEGB = 9014;
var IDDIRSELB = 9015;
var IDDIRALLB = 9016;
var IDBRS = 9017;
var IDBRNAMES = 9018;
var IDBRTC = 9019;
var IDBRLV = 9020;
var IDFRTNEWB = 9021;
var IDFRTADDB = 9022;
var IDFRTRENB = 9023;
var IDFRTUPB = 9024;
var IDFRTDOWNB = 9025;
var IDFRTDELB = 9026;
var IDCHECKEXPB = 9027;
var IDTOBATCH = 9028;
var IDOKB = 9029;
var IDBRUPB = 9030;
var IDBRDOWNB = 9031;
var IDBRDELB = 9032;
var IDBRALLB = 9033;
var IDBRENABLEB = 9034;
var IDBRACDB = 9035;
var IDBRAWMB = 9036;
var IDHELP1L = 9037;
var IDHELP2L = 9038;
var IDFINDL = 9039;
var IDREPLACEL = 9040;
var IDGOTOL = 9041;
var IDMOREB = 9042;
var IDRACDB = 9043;
var IDRAWMB = 9044;
var IDINSELB = 9045;
var IDCYCLEB = 9046;
var IDPROMPTB = 9047;
var IDTRACKBAR = 9048;
var IDTRANSPNAB = 9049;
var IDCOUNTB = 9050;
var IDFINDALLB = 9051;
var IDFRTB = 9052;
var IDLINE = 9053;
//0x50000000=WS_VISIBLE|WS_CHILD
//0x50000003=WS_VISIBLE|WS_CHILD|BS_AUTOCHECKBOX
//0x50000007=WS_VISIBLE|WS_CHILD|BS_GROUPBOX
//0x50000009=WS_VISIBLE|WS_CHILD|BS_AUTORADIOBUTTON
//0x50001201=WS_CHILD|WS_VISIBLE|SS_SUNKEN|SS_CENTERIMAGE|SS_CENTER
//0x50008400=WS_VISIBLE|WS_CHILD|TCS_FOCUSNEVER|TCS_FIXEDWIDTH
//0x50010000=WS_VISIBLE|WS_CHILD|WS_TABSTOP
//0x50010005=WS_VISIBLE|WS_CHILD|WS_TABSTOP|TBS_TOP|TBS_AUTOTICKS
//0x50010003=WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_AUTOCHECKBOX
//0x50800000=WS_VISIBLE|WS_CHILD|WS_BORDER
//0x50804280=WS_VISIBLE|WS_CHILD|WS_BORDER|SS_ENDELLIPSIS|SS_CENTERIMAGE|SS_NOPREFIX
//0x50810000=WS_VISIBLE|WS_CHILD|WS_BORDER|WS_TABSTOP
//0x5081000D=WS_VISIBLE|WS_CHILD|WS_BORDER|WS_TABSTOP|LVS_SHOWSELALWAYS|LVS_SINGLESEL|LVS_REPORT
aDlg[IDHELP1L] ={S:0x50000000, C:"SysLink", T:"?"};
aDlg[IDHELP2L] ={S:0x50000000, C:"SysLink", T:"?"};
aDlg[IDFINDL] ={S:0x50000000, C:"SysLink", T:"(Ctrl+F)", DlgID: 2004 /*IDD_FIND*/};
aDlg[IDREPLACEL] ={S:0x50000000, C:"SysLink", T:"(Ctrl+H/R)", DlgID: 2005 /*IDD_REPLACE*/};
aDlg[IDGOTOL] ={S:0x50000000, C:"SysLink", T:"(Ctrl+G)", DlgID: 2006 /*IDD_GOTO*/};
aDlg[IDMOREB] ={S:0x50010000, C:"BUTTON"};
aDlg[IDRACDB] ={S:0x50010003, C:"BUTTON", T:sTxtReplAllCD};
aDlg[IDRAWMB] ={S:0x50010003, C:"BUTTON", T:sTxtReplAllWM};
aDlg[IDINSELB] ={S:0x50010003, C:"BUTTON", T:sTxtCheckInSel};
aDlg[IDCYCLEB] ={S:0x50010003, C:"BUTTON", T:sTxtCycleSearch};
aDlg[IDPROMPTB] ={S:0x50010003, C:"BUTTON", T:sTxtPrompt};
aDlg[IDTRACKBAR] ={S:0x50010005, C:"msctls_trackbar32"};
aDlg[IDTRANSPNAB]={S:0x50010003, C:"BUTTON", T:sTxtTransparentNA};
aDlg[IDCOUNTB] ={S:0x50010000, C:"BUTTON", T:sTxtCount};
aDlg[IDFINDALLB] ={S:0x50010000, C:"BUTTON", T:sTxtFindAll + "..."};
aDlg[IDFRTB] ={S:0x50010000, C:"BUTTON", T:sTxtTemplates + "&/" + sTxtBatches + "..."};
aDlg[IDLINE] ={S:0x50800000, C:"STATIC"};
//Teplates/Batches
aWnd[IDFRTS] ={S:0x50001201, C:"STATIC", T:sTxtTemplates};
aWnd[IDFRTLV] ={S:0x5081000D, C:"SysListView32"};
aWnd[IDWHATS] ={S:0x50000000, C:"STATIC", T:sTxtWhatFind + ":"};
aWnd[IDWITHS] ={S:0x50000000, C:"STATIC", T:sTxtReplaceWith + ":"};
aWnd[IDWHATE] ={S:0x50810000, C:"AkelEditW"};
aWnd[IDWITHE] ={S:0x50810000, C:"AkelEditW"};
aWnd[IDMATCHB] ={S:0x50010003, C:"BUTTON", T:sTxtMatchCase};
aWnd[IDWHOLEWB] ={S:0x50010003, C:"BUTTON", T:sTxtWholeWord};
aWnd[IDREGEXPB] ={S:0x50010003, C:"BUTTON", T:sTxtRegExp};
aWnd[IDDOTNLB] ={S:0x50010003, C:"BUTTON", T:sTxtDotMatchesNL};
aWnd[IDESCSEQB] ={S:0x50010003, C:"BUTTON", T:sTxtEscSeq};
aWnd[IDDIRG] ={S:0x50000007, C:"BUTTON", T:sTxtDirection};
aWnd[IDDIRDOWNB] ={S:0x50000009, C:"BUTTON", T:sTxtDirDown};
aWnd[IDDIRUPB] ={S:0x50000009, C:"BUTTON", T:sTxtDirUp};
aWnd[IDDIRBEGB] ={S:0x50000009, C:"BUTTON", T:sTxtDirBeginning};
aWnd[IDDIRSELB] ={S:0x50000009, C:"BUTTON", T:sTxtDirInSel};
aWnd[IDDIRALLB] ={S:0x50000009, C:"BUTTON", T:sTxtDirAllFiles};
aWnd[IDBRS] ={S:0x50001201, C:"STATIC", T:sTxtBatches};
aWnd[IDBRNAMES] ={S:0x50804280, C:"STATIC"};
aWnd[IDBRTC] ={S:0x50008400, C:"SysTabControl32"};
aWnd[IDBRLV] ={S:0x5081000D, C:"SysListView32"};
aWnd[IDFRTNEWB] ={S:0x50000000, C:"BUTTON", T:sTxtNew};
aWnd[IDFRTADDB] ={S:0x50000000, C:"BUTTON", T:sTxtAdd};
aWnd[IDFRTRENB] ={S:0x50000000, C:"BUTTON", T:sTxtRename};
aWnd[IDFRTUPB] ={S:0x50000000, C:"BUTTON", T:sTxtMoveUp};
aWnd[IDFRTDOWNB] ={S:0x50000000, C:"BUTTON", T:sTxtMoveDown};
aWnd[IDFRTDELB] ={S:0x50000000, C:"BUTTON", T:sTxtRemove};
aWnd[IDCHECKEXPB]={S:0x50000000, C:"BUTTON", T:sTxtCheckExpr};
aWnd[IDTOBATCH] ={S:0x50000000, C:"BUTTON", T:sTxtAddToBatch};
aWnd[IDOKB] ={S:0x50000000, C:"BUTTON", T:sTxtOK};
aWnd[IDBRUPB] ={S:0x50000000, C:"BUTTON", T:sTxtMoveUp};
aWnd[IDBRDOWNB] ={S:0x50000000, C:"BUTTON", T:sTxtMoveDown};
aWnd[IDBRDELB] ={S:0x50000000, C:"BUTTON", T:sTxtRemove};
aWnd[IDBRALLB] ={S:0x50000000, C:"BUTTON", T:sTxtBatchReplAll};
aWnd[IDBRENABLEB]={S:0x50000003, C:"BUTTON", T:sTxtEnableAll};
aWnd[IDBRACDB] ={S:0x50000003, C:"BUTTON", T:sTxtClosesDialog};
aWnd[IDBRAWMB] ={S:0x50000003, C:"BUTTON", T:sTxtWithoutMsg};
aWnd[IDHELP1L] ={S:0x50000000, C:"SysLink", T:"<a>?</a>"};
aWnd[IDHELP2L] ={S:0x50000000, C:"SysLink", T:"<a>?</a>"};
if (bQSearchDialogSwitcher = AkelPad.IsPluginRunning("QSearch::DialogSwitcher"))
AkelPad.Call("QSearch::DialogSwitcher");
AkelPad.ScriptNoMutex();
AkelPad.WindowRegisterClass(sClass);
if (nDlgType == -1)
{
hDlg = 0;
FRTemplates();
}
else
{
GetLinkText();
AkelPad.WindowRegisterClass(sClass + "ThreadMenu");
while (bContinueDlg)
{
bContinueDlg = false;
nFRF = SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 228 /*MI_SEARCHOPTIONS*/, 0);
if (nDlgType == MLT_FIND)
AkelPad.Command(4158 /*IDM_EDIT_FIND*/);
else if (nDlgType == MLT_REPLACE)
AkelPad.Command(4161 /*IDM_EDIT_REPLACE*/);
else
AkelPad.Command(4162 /*IDM_EDIT_GOTO*/);
GetDialogWnd();
if (! hDlg)
break;
if ((typeof nDlgX == "number") && (typeof nDlgY == "number"))
oSys.Call("User32::SetWindowPos", hDlg, 0, nDlgX, nDlgY, 0, 0, 0x0415 /*SWP_NOSENDCHANGING|SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOSIZE*/);
GetLinkPos();
for (i = IDHELP1L; i < aDlg.length; ++i)
{
if (aDlg[i].Create)
SendMessage(
oSys.Call("User32::CreateWindowExW",
0, //dwExStyle
aDlg[i].C, //lpClassName
(i < IDMOREB ? "<a>" : "") + aDlg[i].T + (i < IDMOREB ? "</a>" : ""), //lpWindowName
aDlg[i].S, //dwStyle
aDlg[i].X, //x
aDlg[i].Y, //y
aDlg[i].W, //nWidth
aDlg[i].H, //nHeight
hDlg, //hWndParent
i, //ID
hInstDLL, //hInstance
0), //lpParam
48 /*WM_SETFONT*/, hGuiFont, true);
}
if (nDlgType == MLT_GOTO)
{
if (bFirstTimeGT)
{
bFirstTimeGT = false;
if (nGoTo != 2)
{
oSys.Call("User32::CheckRadioButton", hDlg, IDC_GOTO_LINE, IDC_GOTO_OFFSET, nGoTo);
SendMessage(hDlg, 273 /*WM_COMMAND*/, nGoTo, GetDlgItem(hDlg, nGoTo));
}
}
if (bGoToDlg)
ResizeDialog(0, 30);
}
else
{
if (nFRF & FRF_SELECTION)
{
oSys.Call("User32::CheckRadioButton", hDlg, IDC_SEARCH_BACKWARD, IDC_SEARCH_ALLFILES, IDC_SEARCH_INSEL);
SendMessage(hDlg, 273 /*WM_COMMAND*/, IDC_SEARCH_INSEL, GetDlgItem(hDlg, IDC_SEARCH_INSEL));
}
if (typeof sWhatText == "string")
{
oSys.Call("User32::SetWindowTextW", hWhatE, sWhatText);
SendMessage(hWhatE, 177 /*EM_SETSEL*/, 0, -1);
}
if (nDlgType == MLT_REPLACE)
{
if (typeof sWithText == "string")
oSys.Call("User32::SetWindowTextW", hWithE, sWithText);
SendMessage(hDlg, 1025 /*DM_SETDEFID*/, nDefButID, 0);
}
SetTrackBar();
ResizeDialog(nResizeW, bMore ? nResizeH : 0);
ShowMore();
ShowHelpLinksFR();
SetTransparency(1);
}
oSys.Call("User32::UpdateWindow", hDlg);
hDlgSubClass = AkelPad.WindowSubClass(hDlg, DialogCallback, 6 /*WM_ACTIVATE*/, 78 /*WM_NOTIFY*/, 256 /*WM_KEYDOWN*/, 273 /*WM_COMMAND*/, 276 /*WM_HSCROLL*/, 2 /*WM_DESTROY*/);
if (nBatchNum)
PostMessage(hDlg, 273 /*WM_COMMAND*/, IDFRTB, GetDlgItem(hDlg, IDFRTB));
AkelPad.WindowRegisterDialog(hDlg);
AkelPad.WindowGetMessage();
AkelPad.WindowUnregisterDialog(hDlg);
AkelPad.WindowUnsubClass(hDlg);
}
AkelPad.WindowUnregisterClass(sClass + "ThreadMenu");
}
WriteIni();
AkelPad.WindowUnregisterClass(sClass);
AkelPad.MemFree(lpBuffer);
AkelPad.MemFree(lpLVITEM);
if (bQSearchDialogSwitcher)
AkelPad.Call("QSearch::DialogSwitcher");
function DialogCallback(hWnd, uMsg, wParam, lParam)
{
var nID;
var nCode;
var nOption;
if (uMsg == 6 /*WM_ACTIVATE*/)
{
if (aDlg[IDMOREB].Create)
{
if (LoWord(wParam))
ShowMore();
SetTransparency(LoWord(wParam));
}
}
else if (uMsg == 78 /*WM_NOTIFY*/)
{
if (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 16 : 8), DT_DWORD) == -2 /*NM_CLICK*/)
{
if ((wParam == IDHELP1L) || (wParam == IDHELP2L))
PostThreadMenu(wParam);
else if (wParam == IDFINDL)
SwitchDialog(MLT_FIND);
else if (wParam == IDREPLACEL)
SwitchDialog(MLT_REPLACE);
else if (wParam == IDGOTOL)
SwitchDialog(MLT_GOTO);
}
}
else if (uMsg == 256 /*WM_KEYDOWN*/)
{
if ((wParam == 0x46 /*F key*/) && aDlg[IDFINDL].Create)
{
if (aDlg[IDFINDL].Create && Ctrl() && (! Shift()) && (! Alt()))
SwitchDialog(MLT_FIND);
}
else if ((wParam == 0x48 /*H key*/) || (wParam == 0x52 /*R key*/))
{
if (aDlg[IDREPLACEL].Create && Ctrl() && (! Shift()) && (! Alt()))
SwitchDialog(MLT_REPLACE);
}
else if (wParam == 0x47 /*G key*/)
{
if (aDlg[IDGOTOL].Create && Ctrl() && (! Shift()) && (! Alt()))
SwitchDialog(MLT_GOTO);
}
else if (wParam == 0x70 /*VK_F1*/)
{
if (aDlg[IDHELP1L].Show)
{
if (Ctrl() || Shift())
AkelHelp(GetAkelHelpFile());
else
{
if (aDlg[IDHELP2L].Show && (oSys.Call("User32::GetFocus") == hWithE))
PostThreadMenu(IDHELP2L);
else
{
oSys.Call("User32::SetFocus", hWhatE);
PostThreadMenu(IDHELP1L);
}
}
}
}
else if (wParam == 0x71 /*VK_F2*/)
{
if (aDlg[IDFRTB].Create && (! Ctrl()) && (! Shift()))
PostMessage(hDlg, 273 /*WM_COMMAND*/, IDFRTB, GetDlgItem(hDlg, IDFRTB));
}
}
else if (uMsg == 273 /*WM_COMMAND*/)
{
nID = LoWord(wParam);
nCode = HiWord(wParam);
if (nID == IDC_SEARCH_FIND)
{
if ((nCode == 1 /*CBN_SELCHANGE*/) || (nCode == 5 /*CBN_EDITCHANGE*/))
EnableCount();
else if (nCode == 3 /*CBN_SETFOCUS*/)
SendMessage(lParam, 322 /*CB_SETEDITSEL*/, 0, MkLong(nWhatSel1, nWhatSel2));
else if (nCode == 10 /*CBN_SELENDCANCEL*/)
{
nWhatSel1 = LoWord(SendMessage(lParam, 320 /*CB_GETEDITSEL*/, 0, 0));
nWhatSel2 = HiWord(SendMessage(lParam, 320 /*CB_GETEDITSEL*/, 0, 0));
}
}
else if (nID == IDC_SEARCH_REPLACE)
{
if (nCode == 3 /*CBN_SETFOCUS*/)
SendMessage(lParam, 322 /*CB_SETEDITSEL*/, 0, MkLong(nWithSel1, nWithSel2));
else if (nCode == 10 /*CBN_SELENDCANCEL*/)
{
nWithSel1 = LoWord(SendMessage(lParam, 320 /*CB_GETEDITSEL*/, 0, 0));
nWithSel2 = HiWord(SendMessage(lParam, 320 /*CB_GETEDITSEL*/, 0, 0));
}
}
else if ((nID >= IDC_SEARCH_MATCHCASE) && (nID <= IDC_SEARCH_REGEXP_ARROW))
{
EnableCount();
if ((nID == IDC_SEARCH_ESCAPESEQ) || (nID == IDC_SEARCH_REGEXP))
{
AkelPad.WindowNextProc(hDlgSubClass, hDlg, uMsg, wParam, lParam);
ShowHelpLinksFR();
oSys.Call("User32::UpdateWindow", hDlg);
}
else if ((nID >= IDC_SEARCH_FIND_BUTTON) && (nID <= IDC_SEARCH_ALL_BUTTON))
{
if ((SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 228 /*MI_SEARCHOPTIONS*/, 0) & FRF_SELECTION) && (AkelPad.GetSelStart() == AkelPad.GetSelEnd()))
AkelPad.WindowNoNextProc(hDlgSubClass);
else if (GetDlgCtrlID(oSys.Call("User32::GetFocus")) >= IDFRTS)
oSys.Call("User32::SetFocus", hWhatE);
}
}
else if (nID == IDMOREB)
{
bMore = ! bMore;
aDlg[IDMOREB].T = bMore ? "<< " + sTxtMore : sTxtMore + " >>";
oSys.Call("User32::SetWindowTextW", lParam, aDlg[IDMOREB].T);
ResizeDialog(0, (bMore ? 1 : -1) * nResizeH);
ShowMore();
oSys.Call("User32::UpdateWindow", hDlg);
}
else if ((nID >= IDRACDB) && (nID <= IDPROMPTB))
{
if (nID == IDRACDB)
nOption = FRF_REPLACEALLANDCLOSE;
else if (nID == IDRAWMB)
nOption = FRF_REPLACEALLNOMSG;
else if (nID == IDINSELB)
nOption = FRF_CHECKINSELIFSEL;
else if (nID == IDCYCLEB)
{
nOption = FRF_CYCLESEARCH;
oSys.Call("User32::EnableWindow", GetDlgItem(hDlg, IDPROMPTB), SendMessage(lParam, 240 /*BM_GETCHECK*/, 0, 0));
}
else
nOption = FRF_CYCLESEARCHPROMPT;
SendMessage(hMainWnd, 1219 /*AKD_SETMAININFO*/, 228 /*MIS_SEARCHOPTIONS*/, SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 228 /*MI_SEARCHOPTIONS*/, 0) ^ nOption);
}
else if (nID == IDTRANSPNAB)
{
bTranspNA = ! bTranspNA;
SetTransparency(1);
}
else if (nID == IDCOUNTB)
{
if (GetWindowText(lParam) != sTxtCount)
oSys.Call("User32::SetWindowTextW", lParam, sTxtCount);
else
{
if (nCode)
Count(lParam, nID);
else
{
Count_AddToHistory();
PostMessage(hDlg, 273 /*WM_COMMAND*/, MkLong(nID, 1), lParam);
}
}
}
else if (nID == IDFINDALLB)
{
if (nCode)
PostThreadMenu(nID);
else
{
Count_AddToHistory();
PostMessage(hDlg, 273 /*WM_COMMAND*/, MkLong(nID, 1), lParam);
}
}
else if (nID == IDFRTB)
{
oSys.Call("User32::SetWindowTextW", GetDlgItem(hDlg, IDCOUNTB), sTxtCount);
FRTemplates();
}
}
else if (uMsg == 276 /*WM_HSCROLL*/)
{
if (lParam == GetDlgItem(hDlg, IDTRACKBAR))
{
nOpacity = -(SendMessage(lParam, 1024 /*TBM_GETPOS*/, 0, 0) - 255);
SetTransparency(1);
}
}
else if (uMsg == 2 /*WM_DESTROY*/)
{
GetWhatWithFR();
oSys.Call("User32::GetWindowRect", hDlg, lpBuffer);
nDlgX = AkelPad.MemRead(_PtrAdd(lpBuffer, 0), DT_DWORD);
nDlgY = AkelPad.MemRead(_PtrAdd(lpBuffer, 4), DT_DWORD);
oSys.Call("User32::PostQuitMessage", 0);
}
return 0;
}
function PostThreadMenu(nID)
{
//unlock main thread for context menu, based on Instructor's code: http://akelpad.sourceforge.net/forum/viewtopic.php?p=22725#22725
var hWndThreadMenu = oSys.Call("User32::CreateWindowExW", 0, sClass + "ThreadMenu", "", 0x80000000 /*WS_POPUP*/, 0, 0, 0, 0, hMainWnd, 0, hInstDLL, CallbackThreadMenu);
PostMessage(hWndThreadMenu, 3000, nID, 0);
}
function CallbackThreadMenu(hWnd, uMsg, wParam, lParam)
{
if (uMsg == 3000)
{
if (wParam == IDFINDALLB)
FindAllMenu(hWnd, wParam);
else
HelpMenu(hWnd, wParam, SendDlgItemMessage(hDlg, IDC_SEARCH_REGEXP, 240 /*BM_GETCHECK*/, 0, 0));
oSys.Call("User32::DestroyWindow", hWnd);
}
}
function GetDlgCtrlID(hWnd)
{
return oSys.Call("User32::GetDlgCtrlID", hWnd);
}
function GetDlgItem(hWnd, nID)
{
return oSys.Call("User32::GetDlgItem", hWnd, nID);
}
function GetWindowText(hWnd)
{
oSys.Call("User32::GetWindowTextW", hWnd, lpBuffer, nBufSize / 2);
return AkelPad.MemRead(lpBuffer, DT_UNICODE);
}
function SendDlgItemMessage(hWnd, nID, uMsg, wParam, lParam)
{
return oSys.Call("User32::SendDlgItemMessageW", hWnd, nID, uMsg, wParam, lParam);
}
function SendMessage(hWnd, uMsg, wParam, lParam)
{
return oSys.Call("User32::SendMessageW", hWnd, uMsg, wParam, lParam);
}
function PostMessage(hWnd, uMsg, wParam, lParam)
{
return oSys.Call("User32::PostMessageW", hWnd, uMsg, wParam, lParam);
}
function LoWord(nParam)
{
return (nParam & 0xFFFF);
}
function HiWord(nParam)
{
return ((nParam >> 16) & 0xFFFF);
}
function MkLong(nLoWord, nHiWord)
{
return (nLoWord & 0xFFFF) | (nHiWord << 16);
}
function Ctrl()
{
return oSys.Call("User32::GetKeyState", 0x11 /*VK_CONTROL*/) & 0x8000;
}
function Shift()
{
return oSys.Call("User32::GetKeyState", 0x10 /*VK_SHIFT*/) & 0x8000;
}
function Alt()
{
return oSys.Call("user32::GetKeyState", 0x12 /*VK_MENU*/) & 0x8000;
}
function GetArguments()
{
var sArg;
var nDirection;
nFRF = SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 228 /*MI_SEARCHOPTIONS*/, 0);
sArg = AkelPad.GetArgValue("FR", "").toUpperCase();
if (sArg.indexOf("M+") >= 0)
nFRF |= FRF_MATCHCASE;
else if (sArg.indexOf("M-") >= 0)
nFRF &= ~FRF_MATCHCASE;
if (sArg.indexOf("W+") >= 0)
nFRF |= FRF_WHOLEWORD;
else if (sArg.indexOf("W-") >= 0)
nFRF &= ~FRF_WHOLEWORD;
if (sArg.indexOf("R+") >= 0)
nFRF = (nFRF | FRF_REGEXP) & ~FRF_ESCAPESEQ;
else if (sArg.indexOf("R-") >= 0)
nFRF &= ~FRF_REGEXP;
if (sArg.indexOf("RN+") >= 0)
nFRF &= ~FRF_REGEXPNONEWLINEDOT;
else if (sArg.indexOf("RN-") >= 0)
nFRF |= FRF_REGEXPNONEWLINEDOT;
if (sArg.indexOf("E+") >= 0)
{
if (sArg.indexOf("R+") < 0)
nFRF = (nFRF | FRF_ESCAPESEQ) & ~FRF_REGEXP;
}
else if (sArg.indexOf("E-") >= 0)
nFRF &= ~FRF_ESCAPESEQ;
if (sArg.indexOf("D") >= 0)
nDirection = FRF_DOWN;
else if (sArg.indexOf("U") >= 0)
nDirection = FRF_UP;
else if (sArg.indexOf("B") >= 0)
nDirection = FRF_DOWN | FRF_BEGINNING;
else if (sArg.indexOf("S") >= 0)
nDirection = FRF_DOWN | FRF_SELECTION;
else if (sArg.indexOf("A") >= 0)
nDirection = FRF_DOWN | FRF_BEGINNING | FRF_ALLFILES;
if (nDirection)
nFRF = (nFRF & ~(FRF_DOWN | FRF_UP | FRF_BEGINNING | FRF_SELECTION | FRF_ALLFILES)) | nDirection;
sArg = AkelPad.GetArgValue("FRE", "").toUpperCase();
if (sArg.indexOf("D+") >= 0)
nFRF |= FRF_REPLACEALLANDCLOSE;
else if (sArg.indexOf("D-") >= 0)
nFRF &= ~FRF_REPLACEALLANDCLOSE;
if (sArg.indexOf("M+") >= 0)
nFRF |= FRF_REPLACEALLNOMSG;
else if (sArg.indexOf("M-") >= 0)
nFRF &= ~FRF_REPLACEALLNOMSG;
if (sArg.indexOf("S+") >= 0)
nFRF |= FRF_CHECKINSELIFSEL;
else if (sArg.indexOf("S-") >= 0)
nFRF &= ~FRF_CHECKINSELIFSEL;
if (sArg.indexOf("C+") >= 0)
nFRF |= FRF_CYCLESEARCH;
else if (sArg.indexOf("C-") >= 0)
nFRF &= ~FRF_CYCLESEARCH;
if (sArg.indexOf("P+") >= 0)
nFRF |= FRF_CYCLESEARCHPROMPT;
else if (sArg.indexOf("P-") >= 0)
nFRF &= ~FRF_CYCLESEARCHPROMPT;
SendMessage(hMainWnd, 1219 /*AKD_SETMAININFO*/, 228 /*MIS_SEARCHOPTIONS*/, nFRF);
sArg = AkelPad.GetArgValue("dlg", "F").toUpperCase();
if (sArg == "R")
nDlgType = MLT_REPLACE;
else if (sArg == "G")
nDlgType = MLT_GOTO;
else if (sArg == "B")
nDlgType = -1;
else
nDlgType = MLT_FIND;
sArg = AkelPad.GetArgValue("RDB", "").toUpperCase();
if (sArg == "R")
nDefButID = IDC_SEARCH_REPLACE_BUTTON;
else if (sArg == "A")
nDefButID = IDC_SEARCH_ALL_BUTTON;
else
nDefButID = IDC_SEARCH_FIND_BUTTON;
sArg = AkelPad.GetArgValue("GT", "").toUpperCase();
if (sArg.indexOf("L") >= 0)
nGoTo = IDC_GOTO_LINE;
else if (sArg.indexOf("O") >= 0)
nGoTo = IDC_GOTO_OFFSET;
else
nGoTo = 2;
nBatchNum = AkelPad.GetArgValue("BR", 0);
if ((Math.abs(nBatchNum) > aBR.length) || (nDlgType == MLT_GOTO) || AkelPad.GetEditReadOnly(0))
nBatchNum = 0;
if (nBatchNum)
nBR = Math.abs(nBatchNum) - 1;
}
function GetLinkText()
{
var hLangLib = SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 50 /*MI_LANGHANDLE*/, 0);
var hRes;
var hResData;
var lpPointer;
var nSize;
var i;
for (i = IDFINDL; i <= IDGOTOL; ++i)
{
hRes = oSys.Call("Kernel32::FindResourceExW", hLangLib, 5 /*RT_DIALOG*/, aDlg[i].DlgID, AkelPad.GetLangId());
hResData = oSys.Call("Kernel32::LoadResource", hLangLib, hRes);
lpPointer = oSys.Call("Kernel32::LockResource", hResData);
nSize = oSys.Call("Kernel32::SizeofResource", hLangLib, hRes);
if (nSize)
{
//pointer to menu
if (AkelPad.MemRead(_PtrAdd(lpPointer, 2), DT_WORD) == 0xFFFF) //DLGTEMPLATEEX
lpPointer = _PtrAdd(lpPointer, 26);
else //DLGTEMPLATE
lpPointer = _PtrAdd(lpPointer, 18);
//pointer to windowClass
if (AkelPad.MemRead(lpPointer, DT_WORD) == 0xFFFF)
lpPointer = _PtrAdd(lpPointer, 4);
else
lpPointer = _PtrAdd(lpPointer, AkelPad.MemRead(lpPointer, DT_UNICODE).length + 2);
//pointer to title
if (AkelPad.MemRead(lpPointer, DT_WORD) == 0xFFFF)
lpPointer = _PtrAdd(lpPointer, 4);
else
lpPointer = _PtrAdd(lpPointer, AkelPad.MemRead(lpPointer, DT_UNICODE).length + 2);
aDlg[i].T = AkelPad.MemRead(lpPointer, DT_UNICODE) + " " + aDlg[i].T;
}
}
}
function GetLinkPos()
{
var hDC = oSys.Call("User32::GetDC", hDlg);
var nDlgW, nDlgH;
var nButX, nButW, nButH;
var nGapH;
var i;
oSys.Call("Gdi32::SelectObject", hDC, hGuiFont);
oSys.Call("Gdi32::SetMapMode", hDC, 1 /*MM_TEXT*/);
for (i = IDHELP1L; i <= IDGOTOL; ++i)
{
oSys.Call("Gdi32::GetTextExtentPoint32W", hDC, aDlg[i].T, aDlg[i].T.length, lpBuffer);
aDlg[i].W = AkelPad.MemRead(_PtrAdd(lpBuffer, 0), DT_DWORD);
aDlg[i].H = AkelPad.MemRead(_PtrAdd(lpBuffer, 4), DT_DWORD);
}
oSys.Call("User32::GetClientRect", hDlg, lpBuffer);
nDlgW = AkelPad.MemRead(_PtrAdd(lpBuffer, 8), DT_DWORD);
nDlgH = AkelPad.MemRead(_PtrAdd(lpBuffer, 12), DT_DWORD);
if (nDlgType == MLT_GOTO)
{
aDlg[IDFINDL].X = 10;
aDlg[IDFINDL].Y = nDlgH + 7;
aDlg[IDREPLACEL].X = nDlgW - aDlg[IDREPLACEL].W - 10;
aDlg[IDREPLACEL].Y = aDlg[IDFINDL].Y;
aDlg[IDHELP1L].Create = false;
aDlg[IDHELP1L].Show = false;
aDlg[IDHELP2L].Create = false;
aDlg[IDHELP2L].Show = false;
aDlg[IDFINDL].Create = bGoToDlg;
aDlg[IDREPLACEL].Create = bGoToDlg;
aDlg[IDGOTOL].Create = false;
aDlg[IDMOREB].Create = false;
aDlg[IDRACDB].Create = false;
aDlg[IDRAWMB].Create = false;
aDlg[IDINSELB].Create = false;
aDlg[IDCYCLEB].Create = false;
aDlg[IDPROMPTB].Create = false;
aDlg[IDTRANSPNAB].Create= false;
aDlg[IDTRACKBAR].Create = false;
aDlg[IDCOUNTB].Create = false;
aDlg[IDFINDALLB].Create = false;
aDlg[IDFRTB].Create = false;
aDlg[IDLINE].Create = false;
}
else
{
aDlg[IDMOREB].T = bMore ? "<< " + sTxtMore : sTxtMore + " >>";
oSys.Call("Gdi32::GetTextExtentPoint32W", hDC, aDlg[IDMOREB].T, aDlg[IDMOREB].T.length, lpBuffer);
aDlg[IDMOREB].W = AkelPad.MemRead(lpBuffer, DT_DWORD);
for (i = IDCOUNTB; i <= IDFRTB; ++i)
{
oSys.Call("Gdi32::GetTextExtentPoint32W", hDC, aDlg[i].T, aDlg[i].T.length, lpBuffer);
aDlg[i].W = AkelPad.MemRead(lpBuffer, DT_DWORD) + Scale.X(10);
}
GetControlRect(hCancelB);
nButX = AkelPad.MemRead(_PtrAdd(lpBuffer, 0), DT_DWORD);
nButW = AkelPad.MemRead(_PtrAdd(lpBuffer, 8), DT_DWORD) - nButX;
nButH = AkelPad.MemRead(_PtrAdd(lpBuffer, 12), DT_DWORD) - AkelPad.MemRead(_PtrAdd(lpBuffer, 4), DT_DWORD);
nResizeW = Math.max(0, Math.max(aDlg[IDFINDL].W, aDlg[IDREPLACEL].W, aDlg[IDGOTOL].W, aDlg[IDMOREB].W, aDlg[IDCOUNTB].W, aDlg[IDFINDALLB].W, aDlg[IDFRTB].W) - nButW);
if (nResizeW)
{
nDlgW += nResizeW;
nButW += nResizeW;
oSys.Call("User32::SetWindowPos", hCancelB, 0, 0, 0, nButW, nButH, 0x16 /*SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOMOVE*/);
oSys.Call("User32::SetWindowPos", GetDlgItem(hDlg, IDC_SEARCH_FIND_BUTTON), 0, 0, 0, nButW, nButH, 0x16 /*SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOMOVE*/);
if (nDlgType == MLT_REPLACE)
{
oSys.Call("User32::SetWindowPos", GetDlgItem(hDlg, IDC_SEARCH_REPLACE_BUTTON), 0, 0, 0, nButW, nButH, 0x16 /*SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOMOVE*/);
oSys.Call("User32::SetWindowPos", GetDlgItem(hDlg, IDC_SEARCH_ALL_BUTTON), 0, 0, 0, nButW, nButH, 0x16 /*SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOMOVE*/);
}
}
GetControlRect(GetDlgItem(hDlg, IDC_SEARCH_FIND));
aDlg[IDHELP1L].X = AkelPad.MemRead(_PtrAdd(lpBuffer, 8), DT_DWORD) + 1;
aDlg[IDHELP1L].Y = AkelPad.MemRead(_PtrAdd(lpBuffer, 4), DT_DWORD) + (AkelPad.MemRead(_PtrAdd(lpBuffer, 12), DT_DWORD) - AkelPad.MemRead(_PtrAdd(lpBuffer, 4), DT_DWORD) - aDlg[IDHELP1L].H) / 2;
GetControlRect(GetDlgItem(hDlg, IDC_SEARCH_REPLACE));
aDlg[IDHELP2L].X = AkelPad.MemRead(_PtrAdd(lpBuffer, 8), DT_DWORD) + 1;
aDlg[IDHELP2L].Y = AkelPad.MemRead(_PtrAdd(lpBuffer, 4), DT_DWORD) + (AkelPad.MemRead(_PtrAdd(lpBuffer, 12), DT_DWORD) - AkelPad.MemRead(_PtrAdd(lpBuffer, 4), DT_DWORD) - aDlg[IDHELP2L].H) / 2;
GetControlRect(GetDlgItem(hDlg, IDC_SEARCH_WHOLEWORD));
nGapH = AkelPad.MemRead(_PtrAdd(lpBuffer, 4), DT_DWORD);
GetControlRect(GetDlgItem(hDlg, IDC_SEARCH_MATCHCASE));
nGapH = nGapH - AkelPad.MemRead(_PtrAdd(lpBuffer, 4), DT_DWORD);
aDlg[IDLINE].X = 0;
aDlg[IDLINE].Y = nDlgH;
aDlg[IDLINE].W = nDlgW;
aDlg[IDLINE].H = 1;
aDlg[IDRACDB].X = AkelPad.MemRead(lpBuffer, DT_DWORD);
aDlg[IDRACDB].Y = nDlgH + Math.round(nGapH / 2);
aDlg[IDRACDB].W = aDlg[IDHELP1L].X - aDlg[IDRACDB].X - 1;
aDlg[IDRACDB].H = AkelPad.MemRead(_PtrAdd(lpBuffer, 12), DT_DWORD) - AkelPad.MemRead(_PtrAdd(lpBuffer, 4), DT_DWORD);
aDlg[IDRAWMB].X = aDlg[IDRACDB].X;
aDlg[IDRAWMB].Y = aDlg[IDRACDB].Y + nGapH;
aDlg[IDRAWMB].W = aDlg[IDRACDB].W;
aDlg[IDRAWMB].H = aDlg[IDRACDB].H;
aDlg[IDINSELB].X = aDlg[IDRACDB].X;
aDlg[IDINSELB].Y = aDlg[IDRAWMB].Y + nGapH;
aDlg[IDINSELB].W = aDlg[IDRACDB].W;
aDlg[IDINSELB].H = aDlg[IDRACDB].H;
aDlg[IDCYCLEB].X = aDlg[IDRACDB].X;
aDlg[IDCYCLEB].Y = aDlg[IDINSELB].Y + nGapH;
aDlg[IDCYCLEB].W = aDlg[IDRACDB].W / 2 - 5;
aDlg[IDCYCLEB].H = aDlg[IDRACDB].H;
aDlg[IDPROMPTB].X = aDlg[IDRACDB].X + aDlg[IDRACDB].W / 2;
aDlg[IDPROMPTB].Y = aDlg[IDCYCLEB].Y;
aDlg[IDPROMPTB].W = aDlg[IDCYCLEB].W;
aDlg[IDPROMPTB].H = aDlg[IDRACDB].H;
aDlg[IDTRACKBAR].X = aDlg[IDRACDB].X;
aDlg[IDTRACKBAR].Y = aDlg[IDCYCLEB].Y + nGapH * 2;
aDlg[IDTRACKBAR].W = Scale.X(70);
aDlg[IDTRACKBAR].H = nButH;
aDlg[IDTRACKBAR].H = nGapH;
aDlg[IDTRANSPNAB].X = aDlg[IDTRACKBAR].X + aDlg[IDTRACKBAR].W + 5;
aDlg[IDTRANSPNAB].Y = aDlg[IDTRACKBAR].Y;
aDlg[IDTRANSPNAB].W = aDlg[IDRACDB].X + aDlg[IDRACDB].W - aDlg[IDTRANSPNAB].X;
aDlg[IDTRANSPNAB].H = aDlg[IDCYCLEB].H;
aDlg[IDMOREB].X = nButX;
aDlg[IDMOREB].Y = nDlgH - nButH - Math.round(nGapH / 2);
aDlg[IDMOREB].W = nButW;
aDlg[IDMOREB].H = nButH;
aDlg[IDCOUNTB].X = nButX;
aDlg[IDCOUNTB].Y = aDlg[IDRACDB].Y;
aDlg[IDCOUNTB].W = nButW;
aDlg[IDCOUNTB].H = nButH;
aDlg[IDFINDALLB].X = nButX;
aDlg[IDFINDALLB].Y = aDlg[IDCOUNTB].Y + nButH + Math.round(nGapH / 6);
aDlg[IDFINDALLB].W = nButW;
aDlg[IDFINDALLB].H = nButH;
aDlg[IDFRTB].X = nButX;
aDlg[IDFRTB].Y = aDlg[IDFINDALLB].Y + nButH + Math.round(nGapH / 6);
aDlg[IDFRTB].W = nButW;
aDlg[IDFRTB].H = nButH;
aDlg[IDFINDL].X = nButX + (nButW - aDlg[IDFINDL].W) / 2;
aDlg[IDFINDL].Y = aDlg[IDTRACKBAR].Y + aDlg[IDTRACKBAR].H - aDlg[IDFINDL].H;
aDlg[IDREPLACEL].X = nButX + (nButW - aDlg[IDREPLACEL].W) / 2;
aDlg[IDREPLACEL].Y = aDlg[IDFINDL].Y;
aDlg[IDGOTOL].X = nButX + (nButW - aDlg[IDGOTOL].W) / 2;
aDlg[IDGOTOL].Y = aDlg[IDFINDL].Y - nGapH;
aDlg[IDHELP1L].Create = true;
aDlg[IDHELP2L].Create = true;
aDlg[IDFINDL].Create = (nDlgType == MLT_REPLACE);
aDlg[IDREPLACEL].Create = (nDlgType == MLT_FIND);
aDlg[IDGOTOL].Create = bGoToDlg;
aDlg[IDMOREB].Create = true;
aDlg[IDRACDB].Create = true;
aDlg[IDRAWMB].Create = true;
aDlg[IDINSELB].Create = true;
aDlg[IDCYCLEB].Create = true;
aDlg[IDPROMPTB].Create = true;
aDlg[IDTRANSPNAB].Create= true;
aDlg[IDTRACKBAR].Create = true;
aDlg[IDCOUNTB].Create = true;
aDlg[IDFINDALLB].Create = true;
aDlg[IDFRTB].Create = true;
aDlg[IDLINE].Create = true;
nResizeH = nGapH * 7;
}
oSys.Call("User32::ReleaseDC", hDlg, hDC);
}
function GetControlRect(hWnd)
{
oSys.Call("User32::GetWindowRect", hWnd, lpBuffer);
oSys.Call("User32::ScreenToClient", hDlg, lpBuffer);
oSys.Call("User32::ScreenToClient", hDlg, _PtrAdd(lpBuffer, 8));
}
function ShowMore()
{
var nID = GetDlgCtrlID(oSys.Call("User32::GetFocus"));
var i;
nFRF = SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 228 /*MI_SEARCHOPTIONS*/, 0);
for (i = IDFINDL; i <= IDLINE; ++i)
{
if (aDlg[i].Create && (i != IDMOREB))
{
oSys.Call("User32::ShowWindow", GetDlgItem(hDlg, i), bMore);
oSys.Call("User32::EnableWindow", GetDlgItem(hDlg, i), bMore);
}
}
if (bMore)
{
SendDlgItemMessage(hDlg, IDRACDB, 241 /*BM_SETCHECK*/, nFRF & FRF_REPLACEALLANDCLOSE, 0);
SendDlgItemMessage(hDlg, IDRAWMB, 241 /*BM_SETCHECK*/, nFRF & FRF_REPLACEALLNOMSG, 0);
SendDlgItemMessage(hDlg, IDINSELB, 241 /*BM_SETCHECK*/, nFRF & FRF_CHECKINSELIFSEL, 0);
SendDlgItemMessage(hDlg, IDCYCLEB, 241 /*BM_SETCHECK*/, nFRF & FRF_CYCLESEARCH, 0);
SendDlgItemMessage(hDlg, IDPROMPTB, 241 /*BM_SETCHECK*/, nFRF & FRF_CYCLESEARCHPROMPT, 0);
SendDlgItemMessage(hDlg, IDTRANSPNAB, 241 /*BM_SETCHECK*/, bTranspNA, 0);
oSys.Call("User32::EnableWindow", GetDlgItem(hDlg, IDRACDB), nDlgType == MLT_REPLACE);
oSys.Call("User32::EnableWindow", GetDlgItem(hDlg, IDRAWMB), nDlgType == MLT_REPLACE);
oSys.Call("User32::EnableWindow", GetDlgItem(hDlg, IDPROMPTB), nFRF & FRF_CYCLESEARCH);
EnableCount();
}
else if ((nID >= IDCOUNTB) && (nID <= IDFRTB))
{
SendDlgItemMessage(hDlg, nID, 244 /*BM_SETSTYLE*/, 0 /*BS_PUSHBUTTON*/, 1);
SendDlgItemMessage(hDlg, nDefButID, 244 /*BM_SETSTYLE*/, 1 /*BS_DEFPUSHBUTTON*/, 1);
}
}
function EnableCount()
{
for (var i = IDCOUNTB; i <= IDFINDALLB; ++i)
oSys.Call("User32::EnableWindow", GetDlgItem(hDlg, i), oSys.Call("User32::IsWindowEnabled", GetDlgItem(hDlg, IDC_SEARCH_FIND_BUTTON)));
oSys.Call("User32::SetWindowTextW", GetDlgItem(hDlg, IDCOUNTB), sTxtCount);
}
function ShowHelpLinksFR()
{
if ((SendDlgItemMessage(hDlg, IDC_SEARCH_REGEXP, 240 /*BM_GETCHECK*/, 0, 0)) || (SendDlgItemMessage(hDlg, IDC_SEARCH_ESCAPESEQ, 240 /*BM_GETCHECK*/, 0, 0)))
{
aDlg[IDHELP1L].Show = true;
aDlg[IDHELP2L].Show = (nDlgType == MLT_REPLACE);
}
else
{
aDlg[IDHELP1L].Show = false;
aDlg[IDHELP2L].Show = false;
}
oSys.Call("User32::ShowWindow", GetDlgItem(hDlg, IDHELP1L), aDlg[IDHELP1L].Show);
oSys.Call("User32::ShowWindow", GetDlgItem(hDlg, IDHELP2L), aDlg[IDHELP2L].Show);
}
function GetDialogWnd()
{
var hWnd = SendMessage(hMainWnd, 1275 /*AKD_GETMODELESS*/, 0, lpBuffer);
var nMLT = AkelPad.MemRead(lpBuffer, DT_DWORD);
hWhatE = 0;
hWithE = 0;
if ((nMLT == MLT_FIND) || (nMLT == MLT_REPLACE) || (nMLT == MLT_GOTO))
{
nDlgType = nMLT;
hDlg = hWnd;
hCancelB = GetDlgItem(hDlg, IDCANCEL);
if (nMLT != MLT_GOTO)
{
AkelPad.MemCopy(lpBuffer, (_X64 ? 64 : 52) /*sizeof(COMBOBOXINFO)*/, DT_DWORD);
oSys.Call("User32::GetComboBoxInfo", GetDlgItem(hDlg, IDC_SEARCH_FIND), lpBuffer);
hWhatE = AkelPad.MemRead(_PtrAdd(lpBuffer, _X64 ? 48 : 44) /*hwndItem*/, DT_QWORD);
if (nMLT == MLT_REPLACE)
{
oSys.Call("User32::GetComboBoxInfo", GetDlgItem(hDlg, IDC_SEARCH_REPLACE), lpBuffer);
hWithE = AkelPad.MemRead(_PtrAdd(lpBuffer, _X64 ? 48 : 44) /*hwndItem*/, DT_QWORD);
}
}
}
else
hDlg = 0;
}
function SwitchDialog(nMLT)
{
bContinueDlg = true;
nDlgType = nMLT;
SendMessage(hDlg, 273 /*WM_COMMAND*/, IDCANCEL, hCancelB);
}
function ResizeDialog(nResizeW, nResizeH)
{
var nW, nH;
oSys.Call("User32::GetWindowRect", hDlg, lpBuffer);
nW = AkelPad.MemRead(_PtrAdd(lpBuffer, 8), DT_DWORD) - AkelPad.MemRead(_PtrAdd(lpBuffer, 0), DT_DWORD) + nResizeW;
nH = AkelPad.MemRead(_PtrAdd(lpBuffer, 12), DT_DWORD) - AkelPad.MemRead(_PtrAdd(lpBuffer, 4), DT_DWORD) + nResizeH;
oSys.Call("User32::SetWindowPos", hDlg, 0, 0, 0, nW, nH, 0x16 /*SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOMOVE*/);
}
function SetTrackBar()
{
SendDlgItemMessage(hDlg, IDTRACKBAR, 1030 /*TBM_SETRANGE*/, 0, MkLong(0, 240));
SendDlgItemMessage(hDlg, IDTRACKBAR, 1047 /*TBM_SETLINESIZEE*/, 0, 10);
SendDlgItemMessage(hDlg, IDTRACKBAR, 1045 /*TBM_SETPAGESIZE*/, 0, 40);
SendDlgItemMessage(hDlg, IDTRACKBAR, 1044 /*TBM_SETTICFREQ*/, 20, 0);
SendDlgItemMessage(hDlg, IDTRACKBAR, 1029 /*TBM_SETPOS*/, 1, -(nOpacity - 255));
}
function SetTransparency(bDlgActive)
{
var nExStyle = oSys.Call("User32::GetWindowLongW", hDlg, -20 /*GWL_EXSTYLE*/);
var nAlphaCur = -1;
var nAlphaNew = -1;
var lpAlpha;
if (nExStyle & 0x00080000 /*WS_EX_LAYERED*/)
{
lpAlpha = AkelPad.MemAlloc(1);
oSys.Call("User32::GetLayeredWindowAttributes", hDlg, 0, lpAlpha, 0);
nAlphaCur = AkelPad.MemRead(lpAlpha, 5 /*DT_BYTE*/);
AkelPad.MemFree(lpAlpha);
}
if (bTranspNA && bDlgActive)
{
if (nAlphaCur >= 0)
nAlphaNew = 255;
}
else if ((nAlphaCur < 0) && (nOpacity < 255) || (nAlphaCur >= 0) && (nAlphaCur != nOpacity))
nAlphaNew = nOpacity;
if (nAlphaNew >= 0)
{
oSys.Call("User32::SetWindowLongW", hDlg, -20 /*GWL_EXSTYLE*/, nExStyle | 0x00080000 /*WS_EX_LAYERED*/);
oSys.Call("User32::SetLayeredWindowAttributes", hDlg, 0, nAlphaNew, 2 /*LWA_ALPHA*/);
oSys.Call("User32::UpdateWindow", hDlg);
}
}
function GetWhatWithFR()
{
if (hWhatE) sWhatText = GetWindowText(hWhatE);
if (hWithE) sWithText = GetWindowText(hWithE);
}
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") && (! Ctrl()))
AkelPad.Call("Scripts::Main", 1, "HtmlView.js", sFile + "#ch7");
else
AkelPad.Exec('rundll32.exe shell32, ShellExec_RunDLL ' + sFile);
}
}
function Count_AddToHistory()
{
var hWndCB = GetDlgItem(hDlg, IDC_SEARCH_FIND);
var nCurLen = SendMessage(hWndCB, 326 /*CB_GETCOUNT*/, 0, 0);
var nMaxLen = SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 198 /*MI_SEARCHSTRINGS*/, 0);
var sText;
var i;
GetWhatWithFR();
if (nMaxLen > 0)
{
for (i = 0; i < nCurLen; ++i)
{
SendMessage(hWndCB, 328 /*CB_GETLBTEXT*/, i, lpBuffer);
sText = AkelPad.MemRead(lpBuffer, DT_UNICODE);
if (sText == sWhatText)
{
SendMessage(hWndCB, 324 /*CB_DELETESTRING*/, i, 0);
--nCurLen;
break;
}
}
if (nCurLen == nMaxLen)
SendMessage(hWndCB, 324 /*CB_DELETESTRING*/, nCurLen - 1, 0);
SendMessage(hWndCB, 330 /*CB_INSERTSTRING*/, 0, sWhatText);
SendMessage(hWndCB, 334 /*CB_SETCURSEL*/, 0, 0);
}
}
|
Last edited by KDJ on Fri Nov 18, 2016 10:01 pm; edited 56 times in total |
|
Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1929 Location: Poland
|
Posted: Fri Jan 25, 2013 11:09 pm Post subject: |
|
|
Extended version of "Find/Replace" dialog - part 2.
Part 3 is here: FindReplaceEx_part3.js
FindReplaceEx_part2.js
Code: | function Count_EnableButtons(aButton, nID)
{
var hWnd;
var i;
if (aButton.length)
{
for (i = 1; i < aButton.length; ++i)
oSys.Call("User32::EnableWindow", aButton[i], 1);
oSys.Call("User32::SetFocus", aButton[0]);
}
else
{
aButton[0] = oSys.Call("User32::GetFocus");
oSys.Call("User32::EnableWindow", hWnd = GetDlgItem(hDlg, IDCANCEL), 0);
aButton.push(hWnd);
for (i = IDC_SEARCH_MATCHCASE; i <= IDC_SEARCH_REGEXP_ARROW; ++i)
{
if (oSys.Call("User32::IsWindowEnabled", hWnd = GetDlgItem(hDlg, i)))
{
oSys.Call("User32::EnableWindow", hWnd, 0);
aButton.push(hWnd);
}
}
for (i = IDHELP1L; i <= IDFRTB; ++i)
{
if ((i != nID) && (oSys.Call("User32::IsWindowEnabled", hWnd = GetDlgItem(hDlg, i))))
{
oSys.Call("User32::EnableWindow", hWnd, 0);
aButton.push(hWnd);
}
}
}
}
function Count(hButton, nID)
{
var nRESE = 0x1002 /*RESE_GLOBAL|RESE_MULTILINE*/;
var lpFrameStart = SendMessage(hMainWnd, 1290 /*AKD_FRAMEFINDW*/, 1 /*FWF_CURRENT*/, 0);
var lpFrameCurr = lpFrameStart;
var lpCallback = 0;
var nCountAll = 0;
var bContinue = true;
var nErrOffset;
var nAEGI1;
var nAEGI2;
var aButton;
var lpMsg;
var lpDelim;
var lpPat;
var lpPatExec;
var hEditWnd;
var nMaxDelim;
nFRF = SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 228 /*MI_SEARCHOPTIONS*/, 0);
if (nFRF & FRF_REGEXP)
nErrOffset = CheckRegExp(sWhatText);
else if (nFRF & FRF_ESCAPESEQ)
nErrOffset = CheckEscSeq(sWhatText);
if (nErrOffset)
{
//to call "Syntax error ..." message
PostMessage(hDlg, 273 /*WM_COMMAND*/, IDC_SEARCH_FIND_BUTTON, 0);
return;
}
if (nFRF & FRF_ESCAPESEQ)
sWhatText = EscSeqToRegExp(sWhatText);
else if (! (nFRF & FRF_REGEXP))
sWhatText = sWhatText.replace(/[\\\/.^$+*?|()\[\]{}]/g, "\\$&");
if (nFRF & FRF_MATCHCASE)
nRESE |= 0x0001 /*RESE_MATCHCASE*/;
if (nFRF & FRF_WHOLEWORD)
nRESE |= 0x0004 /*RESE_WHOLEWORD*/;
if (nFRF & FRF_REGEXPNONEWLINEDOT)
nRESE |= 0x0008 /*RESE_NONEWLINEDOT*/;
if ((nFRF & FRF_BEGINNING) || (nFRF & FRF_ALLFILES))
{
nAEGI1 = 1 /*AEGI_FIRSTCHAR*/;
nAEGI2 = 2 /*AEGI_LASTCHAR*/;
}
else if (nFRF & FRF_SELECTION)
{
nAEGI1 = 3 /*AEGI_FIRSTSELCHAR*/;
nAEGI2 = 4 /*AEGI_LASTSELCHAR*/;
}
else if (nFRF & FRF_DOWN)
{
nAEGI1 = 4 /*AEGI_LASTSELCHAR*/;
nAEGI2 = 2 /*AEGI_LASTCHAR*/;
}
else //nFRF & FRF_UP
{
nAEGI1 = 1 /*AEGI_FIRSTCHAR*/;
nAEGI2 = 3 /*AEGI_FIRSTSELCHAR*/;
}
if (! bFastCount)
{
try
{
lpCallback = oSys.RegisterCallback(PatExecCallback);
}
catch (oError)
{}
}
aButton = [];
lpMsg = AkelPad.MemAlloc(_X64 ? 48 : 28 /*sizeof(MSG)*/);
lpDelim = AkelPad.MemAlloc(128 /*WORD_DELIMITERS_SIZE*/ * 2);
lpPat = AkelPad.MemAlloc((sWhatText.length + 1) * 2);
lpPatExec = AkelPad.MemAlloc(_X64? 216 : 108 /*sizeof(PATEXEC)*/);
AkelPad.MemCopy(lpPat, sWhatText, DT_UNICODE);
AkelPad.MemCopy(lpPatExec /*PATEXEC.dwOptions*/, nRESE, DT_DWORD);
AkelPad.MemCopy(_PtrAdd(lpPatExec, _X64 ? 112 : 56) /*PATEXEC.wpPat*/, lpPat, DT_QWORD);
AkelPad.MemCopy(_PtrAdd(lpPatExec, _X64 ? 120 : 60) /*PATEXEC.wpMaxPat*/, _PtrAdd(lpPat, sWhatText.length * 2), DT_QWORD);
AkelPad.MemCopy(_PtrAdd(lpPatExec, _X64 ? 200 : 100) /*PATEXEC.lpCallback*/, lpCallback, DT_QWORD);
oSys.Call("User32::SetWindowTextW", hButton, lpCallback ? sTxtStop : sTxtWait);
Count_EnableButtons(aButton, lpCallback ? nID : 0);
do
{
hEditWnd = AkelPad.GetEditWnd();
nMaxDelim = SendMessage(hEditWnd, 3243 /*AEM_GETWORDDELIMITERS*/, 128 /*WORD_DELIMITERS_SIZE*/, lpDelim) - 2;
AkelPad.MemCopy(_PtrAdd(lpPatExec, _X64 ? 8 : 4) /*PATEXEC.wpDelim*/, nMaxDelim ? lpDelim : 0, DT_QWORD);
AkelPad.MemCopy(_PtrAdd(lpPatExec, _X64 ? 16 : 8) /*PATEXEC.wpMaxDelim*/, _PtrAdd(lpDelim, nMaxDelim * 2), DT_QWORD);
SendMessage(hEditWnd, 3130 /*AEM_GETINDEX*/, nAEGI1, _PtrAdd(lpPatExec, _X64 ? 56 : 28) /*PATEXEC.ciRange*/);
SendMessage(hEditWnd, 3130 /*AEM_GETINDEX*/, nAEGI2, _PtrAdd(lpPatExec, _X64 ? 80 : 40) /*PATEXEC.ciMaxRange*/);
SendMessage(hEditWnd, 3130 /*AEM_GETINDEX*/, nAEGI1, _PtrAdd(lpPatExec, _X64 ? 144 : 72) /*PATEXEC.ciStr*/);
SendMessage(hEditWnd, 3130 /*AEM_GETINDEX*/, nAEGI2, _PtrAdd(lpPatExec, _X64 ? 168 : 84) /*PATEXEC.ciMaxStr*/);
nCountAll += SendMessage(hMainWnd, 1415 /*AKD_PATEXEC*/, 0, lpPatExec);
}
while (bContinue && (nFRF & FRF_ALLFILES) && ((lpFrameCurr = SendMessage(hMainWnd, 1285 /*AKD_FRAMEACTIVATE*/, 0x10 /*FWA_NEXT*/, lpFrameCurr)) != lpFrameStart))
if (lpCallback)
oSys.UnregisterCallback(lpCallback);
AkelPad.MemFree(lpMsg);
AkelPad.MemFree(lpDelim);
AkelPad.MemFree(lpPat);
AkelPad.MemFree(lpPatExec);
SendMessage(hMainWnd, 1423 /*AKD_PATFREE*/, 0, lpPatExec);
SendMessage(hMainWnd, 1285 /*AKD_FRAMEACTIVATE*/, 0, lpFrameStart);
oSys.Call("User32::SetWindowTextW", hButton, bContinue ? nCountAll.toString() : aDlg[nID].T);
Count_EnableButtons(aButton);
function PatExecCallback(lpPatExec, lpREGroupRoot, bMatched)
{
if (oSys.Call("User32::PeekMessageW", lpMsg, hButton, 513 /*WM_LBUTTONDOWN*/, 513 /*WM_LBUTTONDOWN*/, 0x1 /*PM_REMOVE*/))
{
bContinue = false;
return -1 /*RESEC_STOP*/;
}
return 0 /*RESEC_CONTINUE*/;
}
}
function FindAll(hButton, nID, nCmd)
{
var nAEFR = 0x00000001 /*AEFR_DOWN*/;
var lpFrameStart = SendMessage(hMainWnd, 1290 /*AKD_FRAMEFINDW*/, 1 /*FWF_CURRENT*/, 0);
var lpFrameCurr = lpFrameStart;
var sText = "";
var bContinue = true;
var nCountAll = 0;
var nCountInDoc;
var nErrOffset;
var nOffset3;
var nOffset4;
var nAEGI1;
var nAEGI2;
var aButton;
var lpMsg;
var lpWhat;
var lpFind;
var lpIndex1;
var lpIndex2;
var lpIndex3;
var lpIndex4;
var hEditWnd;
var hEditDoc;
var bWordWrap;
var bWrapNotNum;
var nLine;
var oLine;
var nColumn;
var i;
nFRF = SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 228 /*MI_SEARCHOPTIONS*/, 0);
if (nFRF & FRF_REGEXP)
nErrOffset = CheckRegExp(sWhatText);
else if (nFRF & FRF_ESCAPESEQ)
nErrOffset = CheckEscSeq(sWhatText);
if (nErrOffset)
{
//to call "Syntax error ..." message
PostMessage(hDlg, 273 /*WM_COMMAND*/, IDC_SEARCH_FIND_BUTTON, 0);
return;
}
if (nCmd <= 2)
{
if (! AkelPad.IsPluginRunning("Log::Output"))
{
if (AkelPad.Call("Log::Output") == 1 /*UD_NONUNLOAD_ACTIVE*/)
oSys.Call("User32::UpdateWindow", hMainWnd);
else
return;
}
AkelPad.Call("Log::Output", 4, "", -1, 0);
AkelPad.Call("Log::Output", 1, "", "", "^ \\[\\d+, (\\d+), (\\d+), \\d+:\\d+\\]", "/FRAME=\\1 /GOTOCHAR=\\2");
}
else if (nCmd >= 5)
{
if (! AkelPad.IsPluginRunning("LineBoard::Main"))
{
if (AkelPad.Call("LineBoard::Main") != 1 /*UD_NONUNLOAD_ACTIVE*/)
return;
}
ShowLineBoardPanel();
oSys.Call("User32::UpdateWindow", hMainWnd);
}
if (nFRF & FRF_WHOLEWORD)
nAEFR |= 0x00000002 /*AEFR_WHOLEWORD*/;
if (nFRF & FRF_MATCHCASE)
nAEFR |= 0x00000004 /*AEFR_MATCHCASE*/;
if ((nFRF & FRF_REGEXP) || (nFRF & FRF_ESCAPESEQ))
{
nAEFR |= 0x00080000 /*AEFR_REGEXP*/;
if (nFRF & FRF_REGEXP)
{
if (nFRF & FRF_REGEXPNONEWLINEDOT)
nAEFR |= 0x00100000 /*AEFR_REGEXPNONEWLINEDOT*/;
}
else
sWhatText = EscSeqToRegExp(sWhatText);
}
if ((nFRF & FRF_BEGINNING) || (nFRF & FRF_ALLFILES))
{
nAEGI1 = 1 /*AEGI_FIRSTCHAR*/;
nAEGI2 = 2 /*AEGI_LASTCHAR*/;
}
else if (nFRF & FRF_SELECTION)
{
nAEGI1 = 3 /*AEGI_FIRSTSELCHAR*/;
nAEGI2 = 4 /*AEGI_LASTSELCHAR*/;
}
else if (nFRF & FRF_DOWN)
{
nAEGI1 = 4 /*AEGI_LASTSELCHAR*/;
nAEGI2 = 2 /*AEGI_LASTCHAR*/;
}
else //nFRF & FRF_UP
{
nAEGI1 = 1 /*AEGI_FIRSTCHAR*/;
nAEGI2 = 3 /*AEGI_FIRSTSELCHAR*/;
}
aButton = [];
lpMsg = AkelPad.MemAlloc(_X64 ? 48 : 28 /*sizeof(MSG)*/);
lpWhat = AkelPad.MemAlloc((sWhatText.length + 1) * 2);
lpFind = AkelPad.MemAlloc(_X64 ? 136 : 68 /*sizeof(AEFINDTEXTW)*/);
AkelPad.MemCopy(lpWhat, sWhatText, DT_UNICODE);
AkelPad.MemCopy(_PtrAdd(lpFind, _X64 ? 8 : 4) /**pText*/, lpWhat, DT_QWORD);
AkelPad.MemCopy(_PtrAdd(lpFind, _X64 ? 16 : 8) /*dwTextLen*/, -1, DT_QWORD);
AkelPad.MemCopy(_PtrAdd(lpFind, _X64 ? 24 : 12) /*nNewLine*/, 3 /*AELB_ASIS*/, DT_DWORD);
lpIndex1 = _PtrAdd(lpFind, _X64 ? 32 : 16);
lpIndex2 = _PtrAdd(lpFind, _X64 ? 56 : 28);
lpIndex3 = _PtrAdd(lpFind, _X64 ? 80 : 40);
lpIndex4 = _PtrAdd(lpFind, _X64 ? 104 : 52);
oSys.Call("User32::SetWindowTextW", hButton, sTxtStop);
Count_EnableButtons(aButton, nID);
do
{
hEditWnd = AkelPad.GetEditWnd();
hEditDoc = AkelPad.GetEditDoc();
bWordWrap = SendMessage(hEditWnd, 3241 /*AEM_GETWORDWRAP*/, 0, 0);
bWrapNotNum = bWordWrap && (! (SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 111 /*MI_STATUSPOSTYPE*/, 0) & 2 /*SPT_LINEWRAP*/));
nCountInDoc = 0;
EnableMainWnd(0, hEditWnd);
if (nCmd >= 5)
{
if (bWordWrap)
AkelPad.Command(4209 /*IDM_VIEW_WORDWRAP*/);
if (nCmd == 6)
{
sText = "," + GetBookmarks(hEditWnd, hEditDoc) + ",";
oLine = {};
}
}
SendMessage(hEditWnd, 3130 /*AEM_GETINDEX*/, nAEGI1, lpIndex1);
SendMessage(hEditWnd, 3130 /*AEM_GETINDEX*/, nAEGI2, lpIndex2);
AkelPad.MemCopy(lpFind /*dwFlags*/, nAEFR | 0x00200000 /*AEFR_REGEXPMINMATCH*/, DT_DWORD);
while (SendMessage(hEditWnd, 3041 /*AEM_FINDTEXTW*/, 0, lpFind))
{
AkelPad.MemCopy(lpFind /*dwFlags*/, nAEFR & ~0x00200000 /*AEFR_REGEXPMINMATCH*/, DT_DWORD);
if (nCmd <= 4)
{
nOffset3 = SendMessage(hEditWnd, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpIndex3);
nOffset4 = SendMessage(hEditWnd, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpIndex4);
if (nCmd <= 2)
{
++nCountAll;
++nCountInDoc;
if (bWrapNotNum)
{
nLine = SendMessage(hEditWnd, 3143 /*AEM_GETUNWRAPLINE*/, AkelPad.MemRead(lpIndex3, DT_DWORD), 0);
nColumn = nOffset3 - SendMessage(hEditWnd, 3138 /*AEM_GETRICHOFFSET*/, 18 /*AEGI_WRAPLINEBEGIN*/, nOffset3);
}
else
{
nLine = AkelPad.MemRead(lpIndex3, DT_DWORD);
nColumn = AkelPad.MemRead(_PtrAdd(lpIndex3, _X64 ? 16 : 8), DT_DWORD);
}
if (nCountInDoc == 1)
sText += ((nCountAll > 1) ? "\n" : "") + (AkelPad.GetEditFile(0) ? AkelPad.GetEditFile(0) : sTxtNoName) + ":\n";
sText += " [" + nCountInDoc + ", " + lpFrameCurr + ", " + nOffset3 + ", " + (++nLine) + ":" + (++nColumn) + "] " +
((nCmd == 1) ? AkelPad.GetTextRange(nOffset3, nOffset4, 2 /*\n*/)
: AkelPad.MemRead(AkelPad.MemRead(_PtrAdd(AkelPad.MemRead(_PtrAdd(lpIndex3, _X64 ? 8 : 4), DT_QWORD), _X64 ? 16 : 8), DT_QWORD), DT_UNICODE)) +
"\n";
}
else if (nOffset3 != nOffset4)
sText += AkelPad.GetTextRange(nOffset3, nOffset4, 2 /*\n*/) + "\n";
}
else
{
if (nCmd == 5)
sText += AkelPad.MemRead(lpIndex3, DT_DWORD) + ",";
else
oLine[AkelPad.MemRead(lpIndex3, DT_DWORD)] = true;
}
if (SendMessage(hEditWnd, 3133 /*AEM_INDEXCOMPARE*/, lpIndex1, lpIndex4) == -1)
{
AkelPad.MemCopy(lpIndex1, AkelPad.MemRead(lpIndex4, DT_DWORD), DT_DWORD);
AkelPad.MemCopy(_PtrAdd(lpIndex1, _X64 ? 8 : 4), AkelPad.MemRead(_PtrAdd(lpIndex4, _X64 ? 8 : 4), DT_QWORD), DT_QWORD);
AkelPad.MemCopy(_PtrAdd(lpIndex1, _X64 ? 16 : 8), AkelPad.MemRead(_PtrAdd(lpIndex4, _X64 ? 16 : 8), DT_DWORD), DT_DWORD);
}
else if (! SendMessage(hEditWnd, 3130 /*AEM_GETINDEX*/, 22 /*AEGI_NEXTCHAR*/, lpIndex1))
break;
if (oSys.Call("User32::PeekMessageW", lpMsg, hButton, 513 /*WM_LBUTTONDOWN*/, 513 /*WM_LBUTTONDOWN*/, 0x1 /*PM_REMOVE*/))
{
bContinue = false;
break;
}
}
if (nCmd <= 2)
{
AkelPad.Call("Log::Output", 4, sText, sText.length);
sText = "";
}
else if (nCmd >= 5)
{
if (bContinue)
{
if (nCmd == 6)
{
AkelPad.CallW("LineBoard::Main", 14, hEditWnd, hEditDoc); //Delete all bookmarks
for (i in oLine)
sText = sText.replace("," + i + ",", ",");
sText = sText.substr(1);
}
AkelPad.CallW("LineBoard::Main", 13, hEditWnd, hEditDoc, sText); //Set bookmarks
sText = "";
}
if (bWordWrap)
AkelPad.Command(4209 /*IDM_VIEW_WORDWRAP*/);
}
EnableMainWnd(1, hEditWnd);
}
while (bContinue && (nFRF & FRF_ALLFILES) && ((lpFrameCurr = SendMessage(hMainWnd, 1285 /*AKD_FRAMEACTIVATE*/, 0x10 /*FWA_NEXT*/, lpFrameCurr)) != lpFrameStart))
SendMessage(hMainWnd, 1285 /*AKD_FRAMEACTIVATE*/, 0, lpFrameStart);
if (nCmd <= 2)
AkelPad.Call("Log::Output", 4, bContinue ? sTxtTotalFound + nCountAll : "...", -1);
else if (bContinue)
{
if (nCmd == 3)
AkelPad.SetClipboardText(sText);
else if (nCmd == 4)
{
AkelPad.SendMessage(hMainWnd, 273 /*WM_COMMAND*/, 4101 /*IDM_FILE_NEW*/, 1 /*lParam=TRUE*/);
AkelPad.ReplaceSel(sText);
}
}
AkelPad.MemFree(lpMsg);
AkelPad.MemFree(lpWhat);
AkelPad.MemFree(lpFind);
oSys.Call("User32::SetWindowTextW", hButton, aDlg[nID].T);
Count_EnableButtons(aButton);
}
function EnableMainWnd(bEnable, hEditWnd)
{
oSys.Call("User32::EnableWindow", hMainWnd, bEnable);
SendMessage(hEditWnd, 11 /*WM_SETREDRAW*/, bEnable, 0);
SendMessage(hEditWnd, 3185 /*AEM_LOCKSCROLL*/, 3 /*SB_BOTH*/, ! bEnable);
if (bEnable)
oSys.Call("User32::InvalidateRect", hEditWnd, 0, 1);
}
function ShowLineBoardPanel()
{
var lpVisible = AkelPad.MemAlloc(4);
AkelPad.Call("LineBoard::Main", 4, lpVisible);
if (! AkelPad.MemRead(lpVisible, DT_DWORD))
AkelPad.Call("LineBoard::Main", 4);
AkelPad.MemFree(lpVisible);
}
function GetBookmarks(hEditWnd, hEditDoc)
{
var lpLength = AkelPad.MemAlloc(4 /*sizeof(int)*/);
var sBookmark = "";
var lpBookmark;
var nLength;
AkelPad.CallW("LineBoard::Main", 12, hEditWnd, hEditDoc, 0, lpLength);
if ((nLength = AkelPad.MemRead(lpLength, 3 /*DT_DWORD*/)) > 1)
{
lpBookmark = AkelPad.MemAlloc(nLength * 2 /*sizeof(wchar_t)*/);
AkelPad.CallW("LineBoard::Main", 12, hEditWnd, hEditDoc, lpBookmark, 0);
sBookmark = AkelPad.MemRead(lpBookmark, 1 /*DT_UNICODE*/);
AkelPad.MemFree(lpBookmark);
}
AkelPad.MemFree(lpLength);
return sBookmark;
}
function FRTemplates()
{
var nX, nY;
var sTitle;
var hWndOwn;
if (hDlg)
{
oSys.Call("User32::EnableWindow", hDlg, 0);
oSys.Call("User32::GetWindowRect", GetDlgItem(hDlg, IDC_SEARCH_MATCHCASE), lpBuffer);
nX = nFRTX + AkelPad.MemRead(_PtrAdd(lpBuffer, 0), DT_DWORD);
nY = nFRTY + AkelPad.MemRead(_PtrAdd(lpBuffer, 4), DT_DWORD);
sTitle = sTxtTemplates + "/" + sTxtBatches;
hWndOwn = hDlg;
}
else
{
nX = nBRX;
nY = nBRY;
sTitle = sTxtBatchReplace;
hWndOwn = hMainWnd;
aWnd[IDOKB].T = sTxtClose;
}
oSys.Call("user32::CreateWindowExW",
0, //dwExStyle
sClass, //lpClassName
sTitle, //lpWindowName
0x90CC0000, //dwStyle=WS_POPUP|WS_VISIBLE|WS_CAPTION|WS_SYSMENU|WS_SIZEBOX
nX, //x
nY, //y
nFRTW, //nWidth
nFRTH, //nHeight
hWndOwn, //hWndParent
0, //hMenu
hInstDLL, //hInstance
CallbackFRT); //Script function callback. To use it class must be registered by WindowRegisterClass.
if (! hDlg)
AkelPad.WindowGetMessage();
}
function CallbackFRT(hWnd, uMsg, wParam, lParam)
{
var nID;
var nCode;
var sName;
if (uMsg == 1 /*WM_CREATE*/)
{
hWndFRT = hWnd;
InitDialogFRT();
}
else if (uMsg == 0x8001 /*WM_APP+1*/)
oSys.Call("User32::SetFocus", aWnd[lParam].HWND);
else if ((uMsg == 6 /*WM_ACTIVATE*/) && (! wParam))
hFocus = oSys.Call("User32::GetFocus");
else if (uMsg == 7 /*WM_SETFOCUS*/)
{
oSys.Call("User32::SetFocus", hFocus);
EnableButtonsFRT();
SetSearchOptionsFRT();
}
else if (uMsg == 36 /*WM_GETMINMAXINFO*/)
{
AkelPad.MemCopy(_PtrAdd(lParam, 24), nFRTMinW, DT_DWORD); //ptMinTrackSize_x
AkelPad.MemCopy(_PtrAdd(lParam, 28), nFRTMinH, DT_DWORD); //ptMinTrackSize_y
}
else if (uMsg == 5 /*WM_SIZE*/)
ResizeFRT(LoWord(lParam), HiWord(lParam));
else if (uMsg == 15 /*WM_PAINT*/)
PaintSizeGrip(hWnd);
else if (uMsg == 256 /*WM_KEYDOWN*/)
{
nID = GetDlgCtrlID(oSys.Call("User32::GetFocus"));
if (wParam == 0x09 /*VK_TAB*/)
{
if (Ctrl())
{
if (Shift())
nBR = (nBR == 0) ? aBR.length - 1 : nBR - 1;
else
nBR = (nBR == aBR.length - 1) ? 0 : nBR + 1;
SendMessage(aWnd[IDBRTC].HWND, 4912 /*TCM_SETCURFOCUS*/, nBR, 0);
oSys.Call("User32::SetFocus", aWnd[IDBRLV].HWND);
}
}
else if ((wParam >= 0x31 /*1 key*/) && (wParam <= 0x39 /*9 key*/) || (wParam >= 0x61 /*VK_NUMPAD1*/) && (wParam <= 0x69 /*VK_NUMPAD9*/))
{
if (Ctrl())
{
nBR = wParam - ((wParam <= 0x39) ? 0x31 : 0x61);
SendMessage(aWnd[IDBRTC].HWND, 4912 /*TCM_SETCURFOCUS*/, nBR, 0);
if ((nID >= IDFRTLV) && (nID <= IDDIRALLB))
oSys.Call("User32::SetFocus", aWnd[nID].HWND);
}
}
else if (wParam == 0x70 /*VK_F1*/)
{
if (oSys.Call("User32::IsWindowVisible", aWnd[IDHELP1L].HWND))
{
if (Ctrl() || Shift())
AkelHelp(GetAkelHelpFile());
else
{
if (nID == IDWITHE)
HelpMenu(0, IDHELP2L, SendMessage(aWnd[IDREGEXPB].HWND, 240 /*BM_GETCHECK*/, 0, 0));
else
{
oSys.Call("User32::SetFocus", aWnd[IDWHATE].HWND);
HelpMenu(0, IDHELP1L, SendMessage(aWnd[IDREGEXPB].HWND, 240 /*BM_GETCHECK*/, 0, 0));
}
}
}
}
else if (wParam == 0x71 /*VK_F2*/)
{
if (nID == IDFRTLV)
{
if ((! Ctrl()) && (! Shift()))
PostMessage(hWnd, 273 /*WM_COMMAND*/, IDFRTRENB, aWnd[IDFRTRENB].HWND);
}
else if ((nID == IDBRTC) || (nID == IDBRLV))
{
if ((! Ctrl()) && (! Shift()))
RenameBR();
}
}
else if (wParam == 0x72 /*VK_F3*/)
{
if (! Ctrl())
{
nFRTSel = GetCurSelLV(IDFRTLV);
if (Shift())
{
if (nFRTSel > 0)
--nFRTSel;
}
else
{
if (nFRTSel < GetItemCountLV(IDFRTLV) - 1)
++nFRTSel;
}
SetCurSelLV(IDFRTLV, nFRTSel);
}
}
else if (wParam == 0x2D /*VK_INSERT*/)
{
if (nID == IDFRTLV)
{
if (Ctrl() || Shift())
PostMessage(hWnd, 273 /*WM_COMMAND*/, IDFRTADDB, aWnd[IDFRTADDB].HWND);
else
PostMessage(hWnd, 273 /*WM_COMMAND*/, IDFRTNEWB, aWnd[IDFRTNEWB].HWND);
}
}
else if (wParam == 0x2E /*VK_DELETE*/)
{
if (nID == IDFRTLV)
{
if (Ctrl() || Shift())
PostMessage(hWnd, 273 /*WM_COMMAND*/, IDFRTDELB, aWnd[IDFRTDELB].HWND);
}
else if (nID == IDBRLV)
{
if (Ctrl() || Shift())
PostMessage(hWnd, 273 /*WM_COMMAND*/, IDBRDELB, aWnd[IDBRDELB].HWND);
}
}
else if (wParam == 0x46 /*F key*/)
{
if ((nID == IDWHATE) || (nID == IDWITHE))
{
if (Ctrl() && (! Shift()) && (! Alt()))
{
bAEFont = ! bAEFont;
SetEditFontFRT();
}
}
}
else if (wParam == 0x0D /*VK_RETURN*/)
{
if ((nID >= IDFRTLV) && (nID <= IDBRLV) || (nID >= IDBRENABLEB) && (nID <= IDBRAWMB))
{
if ((! Ctrl()) && (! Shift()))
PostMessage(hWnd, 273 /*WM_COMMAND*/, IDOKB, aWnd[IDOKB].HWND);
}
}
}
else if (uMsg == 260 /*WM_SYSKEYDOWN*/)
{
nID = GetDlgCtrlID(oSys.Call("User32::GetFocus"));
if (wParam == 0x2E /*VK_DELETE*/)
{
if (nID == IDFRTLV)
PostMessage(hWnd, 273 /*WM_COMMAND*/, IDFRTDELB, aWnd[IDFRTDELB].HWND);
else if (nID == IDBRLV)
PostMessage(hWnd, 273 /*WM_COMMAND*/, IDBRDELB, aWnd[IDBRDELB].HWND);
}
else if (wParam == 0x27 /*VK_RIGHT*/)
{
if (! Shift())
PostMessage(hWnd, 273 /*WM_COMMAND*/, IDTOBATCH, aWnd[IDTOBATCH].HWND);
}
else if (wParam == 0x26 /*VK_UP*/)
{
if (nID == IDFRTLV)
PostMessage(hWnd, 273 /*WM_COMMAND*/, IDFRTUPB, aWnd[IDFRTUPB].HWND);
else if (nID == IDBRLV)
PostMessage(hWnd, 273 /*WM_COMMAND*/, IDBRUPB, aWnd[IDBRUPB].HWND);
}
else if (wParam == 0x28 /*VK_DOWN*/)
{
if (nID == IDFRTLV)
PostMessage(hWnd, 273 /*WM_COMMAND*/, IDFRTDOWNB, aWnd[IDFRTDOWNB].HWND);
else if (nID == IDBRLV)
PostMessage(hWnd, 273 /*WM_COMMAND*/, IDBRDOWNB, aWnd[IDBRDOWNB].HWND);
}
}
else if (uMsg == 78 /*WM_NOTIFY*/)
{
if (wParam == IDFRTLV)
{
switch (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 16 : 8), DT_DWORD))
{
case -101 : //LVN_ITEMCHANGED
if (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 32 : 20) /*NMLISTVIEW.uNewState*/, DT_DWORD) & 0x2 /*LVIS_SELECTED*/)
{
sName = GetTextLV(IDFRTLV, AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 24 : 12) /*NMLISTVIEW.iItem*/, DT_DWORD), 0);
if (sName.toUpperCase() != GetTextLV(IDBRLV, GetCurSelLV(IDBRLV), 0).toUpperCase())
SetCurSelLV(IDBRLV, FindItemLV(IDBRLV, sName, -1));
RefreshViewFRT();
}
break;
case -3 : //NM_DBLCLK
if (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 24 : 12) /*NMITEMACTIVATE.iItem*/, DT_DWORD) != -1)
{
if (hDlg)
{
PostMessage(hWnd, 273 /*WM_COMMAND*/, IDOKB, aWnd[IDOKB].HWND);
break;
}
}
case -2 : //NM_CLICK
case -5 : //NM_RCLICK
case -6 : //NM_RDBLCLK
if (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 24 : 12) /*NMITEMACTIVATE.iItem*/, DT_DWORD) == -1)
SetCurSelLV(IDFRTLV, GetCurFocLV(IDFRTLV));
break;
case -7 : //NM_SETFOCUS
EnableButtonsFRT();
break;
case -108 : //LVN_COLUMNCLICK
HeaderLVMenu(aWnd[IDFRTLV].HWND, -1, -1);
break;
}
}
else if (wParam == IDBRLV)
{
switch (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 16 : 8), DT_DWORD))
{
case -101 : //LVN_ITEMCHANGED
if (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 32 : 20) /*NMLISTVIEW.uNewState*/, DT_DWORD) & 0x2 /*LVIS_SELECTED*/)
{
sName = GetTextLV(IDBRLV, AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 24 : 12) /*NMLISTVIEW.iItem*/, DT_DWORD), 0);
if (sName.toUpperCase() != GetTextLV(IDFRTLV, GetCurSelLV(IDFRTLV), 0).toUpperCase())
SetCurSelLV(IDFRTLV, FindItemLV(IDFRTLV, sName, -1));
EnableButtonsFRT();
}
else if (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 32 : 20) /*NMLISTVIEW.uNewState*/, DT_DWORD) & 0xF000 /*LVIS_STATEIMAGEMASK*/)
{
if (bCheckBRLV)
{
GetCheckBRLV(AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 24 : 12) /*NMLISTVIEW.iItem*/, DT_DWORD));
EnableButtonsFRT();
}
}
break;
case -3 : //NM_DBLCLK
if (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 24 : 12) /*NMITEMACTIVATE.iItem*/, DT_DWORD) != -1)
{
if (hDlg)
{
PostMessage(hWnd, 273 /*WM_COMMAND*/, IDOKB, aWnd[IDOKB].HWND);
break;
}
}
case -2 : //NM_CLICK
case -5 : //NM_RCLICK
case -6 : //NM_RDBLCLK
if (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 24 : 12) /*NMITEMACTIVATE.iItem*/, DT_DWORD) == -1)
SetCurSelLV(IDBRLV, GetCurFocLV(IDBRLV));
break;
case -7 : //NM_SETFOCUS
EnableButtonsFRT();
break;
case -108 : //LVN_COLUMNCLICK
HeaderLVMenu(aWnd[IDBRLV].HWND, -1, -1);
break;
}
}
else if (wParam == IDBRTC)
{
switch (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 16 : 8), DT_DWORD))
{
case -551 : //TCN_SELCHANGE
nBR = SendMessage(aWnd[IDBRTC].HWND, 4875 /*TCM_GETCURSEL*/, 0, 0);
SetNameBR();
FillBRLV();
EnableButtonsFRT();
oSys.Call("User32::SetFocus", aWnd[IDBRLV].HWND);
break;
case -5 : //NM_RCLICK
TabMenu();
break;
}
}
else if ((wParam == IDHELP1L) || (wParam == IDHELP2L))
{
if (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 16 : 8), DT_DWORD) == -2 /*NM_CLICK*/)
HelpMenu(0, wParam, SendMessage(aWnd[IDREGEXPB].HWND, 240 /*BM_GETCHECK*/, 0, 0));
}
}
else if (uMsg == 123 /*WM_CONTEXTMENU*/)
{
if ((wParam == aWnd[IDWHATE].HWND) || (wParam == aWnd[IDWITHE].HWND))
EditMenu(wParam, LoWord(lParam), HiWord(lParam));
else if ((wParam == aWnd[IDFRTLV].HWND) || (wParam == aWnd[IDBRLV].HWND))
HeaderLVMenu(wParam, LoWord(lParam), HiWord(lParam));
}
else if (uMsg == 273 /*WM_COMMAND*/)
{
nID = LoWord(wParam);
nCode = HiWord(wParam);
if ((nID == IDWHATE) || (nID == IDWITHE))
{
if (nCode == 256 /*EN_SETFOCUS*/)
EnableButtonsFRT();
else if ((nCode == 768 /*EN_CHANGE*/) && (oSys.Call("User32::GetFocus") == lParam))
{
oSys.Call("User32::GetWindowTextW", lParam, lpBuffer, nBufSize / 2);
SetParametersFRTToLV(nID - IDWHATE + 1, AkelPad.MemRead(lpBuffer, DT_UNICODE).replace(/[\r\n\t]/g, ""))
EnableButtonsFRT();
}
}
else if ((nID >= IDMATCHB) && (nID <= IDESCSEQB))
{
CheckButtonsFRT(nID);
EnableButtonsFRT();
}
else if ((nID >= IDDIRDOWNB) && (nID <= IDDIRALLB))
SetSearchDirectionFRT(nID);
else if ((nID >= IDFRTNEWB) && (nID <= IDFRTRENB))
{
if (oSys.Call("User32::IsWindowEnabled", lParam))
{
NewAddRenameFRT(nID);
PostMessage(hWnd, 0x8001 /*WM_APP+1*/, 0, IDFRTLV);
}
}
else if ((nID == IDFRTUPB) || (nID == IDFRTDOWNB))
{
if (oSys.Call("User32::IsWindowEnabled", lParam))
{
UpDownFRT(nID);
PostMessage(hWnd, 0x8001 /*WM_APP+1*/, 0, IDFRTLV);
}
}
else if (nID == IDFRTDELB)
{
if (oSys.Call("User32::IsWindowEnabled", lParam))
{
RemoveFRT();
PostMessage(hWnd, 0x8001 /*WM_APP+1*/, 0, IDFRTLV);
}
}
else if (nID == IDCHECKEXPB)
{
if (oSys.Call("User32::IsWindowEnabled", lParam))
CheckExpressionFRT(GetCurSelLV(IDFRTLV), 1);
}
else if (nID == IDTOBATCH)
{
if (oSys.Call("User32::IsWindowEnabled", lParam))
AddToBatch();
}
else if (nID == IDOKB)
{
if (oSys.Call("User32::IsWindowEnabled", lParam))
{
if (hDlg)
SetFRTtoFR();
PostMessage(hWnd, 16 /*WM_CLOSE*/, 0, 0);
}
}
else if ((nID == IDBRUPB) || (nID == IDBRDOWNB))
{
if (oSys.Call("User32::IsWindowEnabled", lParam))
{
UpDownBR(nID);
PostMessage(hWnd, 0x8001 /*WM_APP+1*/, 0, IDBRLV);
}
}
else if (nID == IDBRDELB)
{
if (oSys.Call("User32::IsWindowEnabled", lParam))
{
RemoveBR();
PostMessage(hWnd, 0x8001 /*WM_APP+1*/, 0, IDBRLV);
}
}
else if (nID == IDBRALLB)
{
if (oSys.Call("User32::IsWindowEnabled", lParam))
BatchReplaceAll();
nBatchNum = 0;
}
else if (nID == IDBRENABLEB)
SetCheckBRLV(-1, SendMessage(lParam, 240 /*BM_GETCHECK*/, 0, 0));
else if ((nID == IDBRACDB) || (nID == IDBRAWMB))
{
nFRF = SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 228 /*MI_SEARCHOPTIONS*/, 0) ^ ((nID == IDBRACDB) ? FRF_REPLACEALLANDCLOSE : FRF_REPLACEALLNOMSG);
SendMessage(hMainWnd, 1219 /*AKD_SETMAININFO*/, 228 /*MIS_SEARCHOPTIONS*/, nFRF);
}
else if (nID == IDCANCEL)
PostMessage(hWnd, 16 /*WM_CLOSE*/, 0, 0);
}
else if (uMsg == 16 /*WM_CLOSE*/)
{
SaveFRT();
AkelPad.WindowUnsubClass(aWnd[IDWHATE].HWND);
AkelPad.WindowUnsubClass(aWnd[IDWITHE].HWND);
if (hDlg)
oSys.Call("User32::EnableWindow", hDlg, 1);
oSys.Call("User32::DestroyWindow", hWnd);
}
else if (uMsg == 2 /*WM_DESTROY*/)
{
if (! hDlg)
oSys.Call("User32::PostQuitMessage", 0);
}
return 0;
}
function InitDialogFRT()
{
var lpTCITEM;
var hDC;
var i;
for (i = IDFRTS; i <= IDHELP2L; ++i)
{
aWnd[i].HWND =
oSys.Call("User32::CreateWindowExW",
0, //dwExStyle
aWnd[i].C, //lpClassName
aWnd[i].T, //lpWindowName
aWnd[i].S, //dwStyle
0, 0, 0, 0, //x, y, nWidth, nHeight
hWndFRT, //hWndParent
i, //ID
hInstDLL, //hInstance
0); //lpParam
SendMessage(aWnd[i].HWND, 48 /*WM_SETFONT*/, hGuiFont, true);
}
if (! hDlg)
{
hDC = oSys.Call("User32::GetDC", hWndFRT);
oSys.Call("Gdi32::SelectObject", hDC, hGuiFont);
oSys.Call("Gdi32::SetMapMode", hDC, 1 /*MM_TEXT*/);
oSys.Call("Gdi32::GetTextExtentPoint32W", hDC, aDlg[IDHELP1L].T, aDlg[IDHELP1L].T.length, lpBuffer);
aDlg[IDHELP1L].W = AkelPad.MemRead(_PtrAdd(lpBuffer, 0), DT_DWORD);
aDlg[IDHELP1L].H = AkelPad.MemRead(_PtrAdd(lpBuffer, 4), DT_DWORD);
oSys.Call("User32::ReleaseDC", hWndFRT, hDC);
}
for (i = IDWHATE; i <= IDWITHE; ++i)
{
SendMessage(aWnd[i].HWND, 3262 /*AEM_SETTEXTLIMIT*/, 1024, 0);
SendMessage(aWnd[i].HWND, 1093 /*EM_SETEVENTMASK*/, 0, 0x1 /*ENM_CHANGE*/);
aSubClassFRT[i] = AkelPad.WindowSubClass(aWnd[i].HWND, EditCallbackFRT, 256 /*WM_KEYDOWN*/, 260 /*WM_SYSKEYDOWN*/);
}
SetEditFontFRT();
SendMessage(aWnd[IDFRTLV].HWND, 4150 /*LVM_SETEXTENDEDLISTVIEWSTYLE*/, 0, 0x0421 /*LVS_EX_INFOTIP|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES*/);
SendMessage(aWnd[IDBRLV].HWND, 4150 /*LVM_SETEXTENDEDLISTVIEWSTYLE*/, 0, 0x0425 /*LVS_EX_INFOTIP|LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES|LVS_EX_GRIDLINES*/);
InsertColumnsLV(IDFRTLV);
InsertColumnsLV(IDBRLV);
SetSortFRTLV();
FillFRTLV();
FillBRLV();
//Tab
lpTCITEM = AkelPad.MemAlloc(_X64 ? 40 : 28 /*sizeof(TCITEM)*/);
AkelPad.MemCopy(_PtrAdd(lpTCITEM, 0), 1 /*TCIF_TEXT*/, DT_DWORD); //mask
AkelPad.MemCopy(_PtrAdd(lpTCITEM, _X64 ? 16 : 12), lpBuffer, DT_QWORD); //pszText
for (i = 0; i < aBR.length; ++i)
{
AkelPad.MemCopy(lpBuffer, (i + 1).toString(), DT_UNICODE);
SendMessage(aWnd[IDBRTC].HWND, 4926 /*TCM_INSERTITEMW*/, i, lpTCITEM);
}
SendMessage(aWnd[IDBRTC].HWND, 4905 /*TCM_SETITEMSIZE*/, 0, MkLong(Scale.X(25), Scale.Y(20)));
SendMessage(aWnd[IDBRTC].HWND, 4912 /*TCM_SETCURFOCUS*/, nBR, 0);
SetNameBR();
AkelPad.MemFree(lpTCITEM);
for (i = IDDIRDOWNB; i <= IDDIRALLB; ++i)
oSys.Call("User32::SetWindowLongW", aWnd[i].HWND, -16 /*GWL_STYLE*/, aWnd[i].S);
hFocus = aWnd[IDFRTLV].HWND;
oSys.Call("User32::SetFocus", hFocus);
if (nBatchNum)
PostMessage(hWndFRT, 273 /*WM_COMMAND*/, IDBRALLB, aWnd[IDBRALLB].HWND);
}
function EditCallbackFRT(hWnd, uMsg, wParam, lParam)
{
if (uMsg == 256 /*WM_KEYDOWN*/)
{
if (wParam == 0x09 /*VK_TAB*/)
AkelPad.WindowNoNextProc(aSubClassFRT[GetDlgCtrlID(hWnd)]);
}
else if (uMsg == 260 /*WM_SYSKEYDOWN*/)
{
if (wParam == 0x27 /*VK_RIGHT*/)
{
if (! Shift())
AkelPad.WindowNoNextProc(aSubClassFRT[GetDlgCtrlID(hWnd)]);
}
}
return 0;
}
function PaintSizeGrip(hWnd)
{
var lpPaint = AkelPad.MemAlloc(_X64 ? 72 : 64); //sizeof(PAINTSTRUCT)
var hDC;
if (hDC = oSys.Call("User32::BeginPaint", hWnd, lpPaint))
{
oSys.Call("User32::GetClientRect", hWnd, lpBuffer);
AkelPad.MemCopy(_PtrAdd(lpBuffer, 0), AkelPad.MemRead(_PtrAdd(lpBuffer, 8), DT_DWORD) - oSys.Call("User32::GetSystemMetrics", 2 /*SM_CXVSCROLL*/), DT_DWORD);
AkelPad.MemCopy(_PtrAdd(lpBuffer, 4), AkelPad.MemRead(_PtrAdd(lpBuffer, 12), DT_DWORD) - oSys.Call("User32::GetSystemMetrics", 20 /*SM_CYVSCROLL*/), DT_DWORD);
oSys.Call("User32::DrawFrameControl", hDC, lpBuffer, 3 /*DFC_SCROLL*/, 0x8 /*DFCS_SCROLLSIZEGRIP*/);
oSys.Call("User32::EndPaint", hWnd, lpPaint);
}
AkelPad.MemFree(lpPaint);
}
function ResizeFRT(nW, nH)
{
var nFlags = 0x14; //SWP_NOACTIVATE|SWP_NOZORDER
var nW5 = Scale.X(5);
var nW10 = Scale.X(10);
var nW16 = Scale.X(16);
var nW75 = Scale.X(75);
var nW90 = Scale.X(90);
var nW145 = Scale.X(145);
var nH5 = Scale.Y(5);
var nH10 = Scale.Y(10);
var nH13 = Scale.Y(13);
var nH16 = Scale.Y(16);
var nH18 = Scale.Y(18);
var nH20 = Scale.Y(20);
var nH23 = Scale.Y(23);
var nH25 = Scale.Y(25);
var nLW = Math.round((nW - nW10 * 4) / 3) - nW10;
var nEW = nW - nLW * 2 - nW10 * 4;
var nEH = Math.round((nH - nH25 * 2 - nH23 * 2 - nH10 * 14) / 2);
var nX;
var i;
oSys.Call("User32::SetWindowPos", aWnd[IDFRTS].HWND, 0,
nW10,
nH10,
nLW,
nH20,
nFlags);
oSys.Call("User32::SetWindowPos", aWnd[IDFRTLV].HWND, 0,
nW10,
nH20 + nH10,
nLW,
nH - nH23 * 2 - nH20 - nH10 * 3,
nFlags);
for (i = IDWHATS; i <= IDWITHS; ++i)
oSys.Call("User32::SetWindowPos", aWnd[i].HWND, 0,
nLW + nW10 * 2,
nH10 + (nH25 + nEH) * (i - IDWHATS),
nW145,
nH13,
nFlags);
for (i = IDHELP1L; i <= IDHELP2L; ++i)
oSys.Call("User32::SetWindowPos", aWnd[i].HWND, 0,
nLW + nW10 * 2 + nEW - aDlg[IDHELP1L].W,
nH10 + (nH25 + nEH) * (i - IDHELP1L),
aDlg[IDHELP1L].W,
aDlg[IDHELP1L].H,
nFlags);
for (i = IDWHATE; i <= IDWITHE; ++i)
oSys.Call("User32::SetWindowPos", aWnd[i].HWND, 0,
nLW + nW10 * 2,
nH25 + (nH25 + nEH) * (i - IDWHATE),
nEW,
nEH,
nFlags);
for (i = IDMATCHB; i <= IDREGEXPB; ++i)
oSys.Call("User32::SetWindowPos", aWnd[i].HWND, 0,
nLW + nW10 * 2,
(nH25 + nEH) * 2 + nH10 + nH20 * (i - IDMATCHB),
nW145,
nH16,
nFlags);
oSys.Call("User32::SetWindowPos", aWnd[IDDOTNLB].HWND, 0,
nLW + nW10 * 2 + nW16,
(nH25 + nEH) * 2 + nH10 + nH20 * 3,
nW145 - nW16,
nH16,
nFlags);
oSys.Call("User32::SetWindowPos", aWnd[IDESCSEQB].HWND, 0,
nLW + nW10 * 2,
(nH25 + nEH) * 2 + nH10 + nH20 * 4,
nW145,
nH16,
nFlags);
oSys.Call("User32::SetWindowPos", aWnd[IDDIRG].HWND, 0,
nLW + nEW - nW90,
(nH25 + nEH) * 2 + nH10,
nW90 + nW10 * 2,
nH18 * 6,
nFlags);
for (i = IDDIRDOWNB; i <= IDDIRALLB; ++i)
oSys.Call("User32::SetWindowPos", aWnd[i].HWND, 0,
nLW + nEW - nW90 + nW10,
(nH25 + nEH + nH10) * 2 + nH5 + nH18 * (i - IDDIRDOWNB),
nW90,
nH16,
nFlags);
oSys.Call("User32::SetWindowPos", aWnd[IDBRS].HWND, 0,
nW - nLW - nW10,
nH10,
nLW,
nH20,
nFlags);
oSys.Call("User32::SetWindowPos", aWnd[IDBRTC].HWND, 0,
nW - nLW - nW10,
nH20 + nH10,
nLW,
nH20,
nFlags);
oSys.Call("User32::SetWindowPos", aWnd[IDBRNAMES].HWND, 0,
nW - nLW - nW10,
nH20 * 2 + nH10,
nLW,
Scale.Y(21),
nFlags);
oSys.Call("User32::SetWindowPos", aWnd[IDBRLV].HWND, 0,
nW - nLW - nW10,
nH20 * 3 + nH10,
nLW,
nH - nH20 * 3 - (nH23 + nH16 + nH10) * 2 - nH5 * 4,
nFlags);
nX = nW10 + Math.round((nLW - (nW75 * 3 + nW5 * 2)) / 2);
for (i = IDFRTNEWB; i <= IDFRTRENB; ++i)
oSys.Call("User32::SetWindowPos", aWnd[i].HWND, 0,
nX + (nW75 + nW5) * (i - IDFRTNEWB),
nH - nH23 * 2 - nH10 - nH5,
nW75,
nH23,
nFlags);
for (i = IDFRTUPB; i <= IDFRTDELB; ++i)
oSys.Call("User32::SetWindowPos", aWnd[i].HWND, 0,
nX + (nW75 + nW5) * (i - IDFRTUPB),
nH - nH23 - nH10,
nW75,
nH23,
nFlags);
oSys.Call("User32::SetWindowPos", aWnd[IDCHECKEXPB].HWND, 0,
Math.round((nW - (nW75 * 2 + nW5)) / 2),
nH - nH23 * 2 - nH5 - nH10,
nW75 * 2 + nW5,
nH23,
nFlags);
for (i = IDTOBATCH; i <= IDOKB; ++i)
oSys.Call("User32::SetWindowPos", aWnd[i].HWND, 0,
Math.round((nW - (nW75 * 2 + nW5)) / 2) + (nW75 + nW5) * (i - IDTOBATCH),
nH - nH23 - nH10,
nW75,
nH23,
nFlags);
oSys.Call("User32::SetWindowPos", aWnd[IDBRENABLEB].HWND, 0,
nW - nLW - nW10,
nH - (nH23 + nH16) * 2 - nH10 - nH5 * 3,
nW75 * 2,
nH16,
nFlags);
nX = nW - nLW - nW10 + Math.round((nLW - (nW75 * 3 + nW5 * 2)) / 2);
for (i = IDBRUPB; i <= IDBRDELB; ++i)
oSys.Call("User32::SetWindowPos", aWnd[i].HWND, 0,
nX + (nW75 + nW5) * (i - IDBRUPB),
nH - nH23 * 2 - nH16 - nH10 - nH5 * 2,
nW75,
nH23,
nFlags);
oSys.Call("User32::SetWindowPos", aWnd[IDBRALLB].HWND, 0,
nX,
nH - nH23 - nH16 - nH10 - nH5,
nW75 * 3 + nW5 * 2,
nH23,
nFlags);
oSys.Call("User32::SetWindowPos", aWnd[IDBRACDB].HWND, 0,
nX,
nH - nH16 - nH10,
Scale.X(115),
nH16,
nFlags);
oSys.Call("User32::SetWindowPos", aWnd[IDBRAWMB].HWND, 0,
nX + Scale.X(130),
nH - nH16 - nH10,
Scale.X(105),
nH16,
nFlags);
SendMessage(aWnd[IDFRTLV].HWND, 4115 /*LVM_ENSUREVISIBLE*/, GetCurSelLV(IDFRTLV), false);
SendMessage(aWnd[IDBRLV].HWND, 4115 /*LVM_ENSUREVISIBLE*/, GetCurSelLV(IDBRLV), false);
SendMessage(aWnd[IDWHATE].HWND, 3242 /*AEM_SETWORDWRAP*/, 0x2 /*AEWW_SYMBOL*/, 0);
SendMessage(aWnd[IDWITHE].HWND, 3242 /*AEM_SETWORDWRAP*/, 0x2 /*AEWW_SYMBOL*/, 0);
oSys.Call("user32::InvalidateRect", hWndFRT, 0, true);
}
function RefreshViewFRT()
{
var nItem = GetCurSelLV(IDFRTLV);
var sConds = (nItem > -1) ? GetTextLV(IDFRTLV, nItem, 3) : "";
var i;
for (i = IDWHATE; i <= IDWITHE; ++i)
{
oSys.Call("User32::SetWindowTextW", aWnd[i].HWND, (nItem > -1) ? GetTextLV(IDFRTLV, nItem, i - IDWHATE + 1) : "");
oSys.Call("User32::EnableWindow", aWnd[i].HWND, (nItem > -1));
}
for (i = IDMATCHB; i <= IDESCSEQB; ++i)
{
SendMessage(aWnd[i].HWND, 241 /*BM_SETCHECK*/, parseInt(sConds.substr(i - IDMATCHB, 1)), 0);
oSys.Call("User32::EnableWindow", aWnd[i].HWND, (nItem > -1));
}
EnableButtonsFRT();
ShowHelpLinksFRT();
}
function EnableButtonsFRT()
{
var nItemFRT = GetCurSelLV(IDFRTLV);
var nItemBR = GetCurSelLV(IDBRLV);
var nCheckBR = 0;
var i;
for (i = 0; i < aBRCB[nBR].length; ++i)
nCheckBR += aBRCB[nBR][i];
oSys.Call("User32::EnableWindow", aWnd[IDDOTNLB].HWND, SendMessage(aWnd[IDREGEXPB].HWND, 240 /*BM_GETCHECK*/, 0, 0));
oSys.Call("User32::EnableWindow", aWnd[IDDIRALLB].HWND, AkelPad.IsMDI());
oSys.Call("User32::EnableWindow", aWnd[IDFRTADDB].HWND, hDlg);
oSys.Call("User32::EnableWindow", aWnd[IDFRTRENB].HWND, (nItemFRT > -1));
oSys.Call("User32::EnableWindow", aWnd[IDFRTUPB].HWND, (nItemFRT > 0) && (! bFRTSort));
oSys.Call("User32::EnableWindow", aWnd[IDFRTDOWNB].HWND, (nItemFRT > -1) && (nItemFRT < GetItemCountLV(IDFRTLV) - 1) && (! bFRTSort));
oSys.Call("User32::EnableWindow", aWnd[IDFRTDELB].HWND, (nItemFRT > -1));
oSys.Call("User32::EnableWindow", aWnd[IDCHECKEXPB].HWND, (nItemFRT > -1) && GetTextLV(IDFRTLV, nItemFRT, 1).length && ((GetTextLV(IDFRTLV, nItemFRT, 3).charAt(2) == "1") || (GetTextLV(IDFRTLV, nItemFRT, 3).charAt(4) == "1")));
oSys.Call("User32::EnableWindow", aWnd[IDTOBATCH].HWND, (nItemFRT > -1));
oSys.Call("User32::EnableWindow", aWnd[IDOKB].HWND, (nItemFRT > -1) || (! hDlg));
oSys.Call("User32::EnableWindow", aWnd[IDBRUPB].HWND, nItemBR > 0);
oSys.Call("User32::EnableWindow", aWnd[IDBRDOWNB].HWND, (nItemBR > -1) && (nItemBR < aBR[nBR].length - 1));
oSys.Call("User32::EnableWindow", aWnd[IDBRDELB].HWND, (nItemBR > -1) && aBR[nBR].length);
oSys.Call("User32::EnableWindow", aWnd[IDBRALLB].HWND, aBR[nBR].length && nCheckBR && (! AkelPad.GetEditReadOnly(0)));
oSys.Call("User32::EnableWindow", aWnd[IDBRENABLEB].HWND, aBR[nBR].length);
SendMessage(aWnd[IDBRENABLEB].HWND, 241 /*BM_SETCHECK*/, aBR[nBR].length && (nCheckBR == aBRCB[nBR].length), 0);
for (i = IDFRTNEWB; i <= IDBRALLB; ++i)
SendMessage(aWnd[i].HWND, 244 /*BM_SETSTYLE*/, 0 /*BS_PUSHBUTTON*/, 1);
if ((nItemFRT > -1) || (! hDlg))
SendMessage(aWnd[IDOKB].HWND, 244 /*BM_SETSTYLE*/, 1 /*BS_DRFPUSHBUTTON*/, 1);
}
function SetSearchOptionsFRT()
{
var nID;
nFRF = SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 228 /*MI_SEARCHOPTIONS*/, 0);
if (nFRF & FRF_ALLFILES)
nID = IDDIRALLB;
else if (nFRF & FRF_SELECTION)
nID = IDDIRSELB;
else if ((nFRF & FRF_BEGINNING) || hDlg && (SendDlgItemMessage(hDlg, IDC_SEARCH_BEGINNING, 242 /*BM_GETSTATE*/, 0, 0) & 4 /*BST_PUSHED*/))
nID = IDDIRBEGB;
else if (nFRF & FRF_UP)
nID = IDDIRUPB;
else
nID = IDDIRDOWNB;
oSys.Call("User32::CheckRadioButton", hWndFRT, IDDIRDOWNB, IDDIRALLB, nID);
SendMessage(aWnd[IDBRACDB].HWND, 241 /*BM_SETCHECK*/, nFRF & FRF_REPLACEALLANDCLOSE, 0);
SendMessage(aWnd[IDBRAWMB].HWND, 241 /*BM_SETCHECK*/, nFRF & FRF_REPLACEALLNOMSG, 0);
}
function SetSearchDirectionFRT(nID)
{
var nDlgID;
nFRF = SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 228 /*MI_SEARCHOPTIONS*/, 0) & ~(FRF_DOWN | FRF_UP | FRF_BEGINNING | FRF_SELECTION | FRF_ALLFILES);
if (nID == IDDIRDOWNB)
{
nFRF |= FRF_DOWN
nDlgID = IDC_SEARCH_FORWARD;
}
else if (nID == IDDIRUPB)
{
nFRF |= FRF_UP;
nDlgID = IDC_SEARCH_BACKWARD;
}
else if (nID == IDDIRBEGB)
{
nFRF |= FRF_DOWN | FRF_BEGINNING;
nDlgID = IDC_SEARCH_BEGINNING;
}
else if (nID == IDDIRSELB)
{
nFRF |= FRF_DOWN | FRF_SELECTION;
nDlgID = IDC_SEARCH_INSEL;
}
else
{
nFRF |= FRF_DOWN | FRF_BEGINNING | FRF_ALLFILES;
nDlgID = IDC_SEARCH_ALLFILES;
}
oSys.Call("User32::SetWindowLongW", aWnd[nID].HWND, -16 /*GWL_STYLE*/, aWnd[nID].S);
if (hDlg)
{
oSys.Call("User32::CheckRadioButton", hDlg, IDC_SEARCH_BACKWARD, IDC_SEARCH_ALLFILES, nDlgID);
SendMessage(hDlg, 273 /*WM_COMMAND*/, nDlgID, GetDlgItem(hDlg, nDlgID));
}
else
SendMessage(hMainWnd, 1219 /*AKD_SETMAININFO*/, 228 /*MIS_SEARCHOPTIONS*/, nFRF);
}
function SetParametersFRTToLV(nCol, sText)
{
var nItem = GetCurSelLV(IDFRTLV);
var sName = GetTextLV(IDFRTLV, nItem, 0).toUpperCase();
var i;
SetTextLV(IDFRTLV, nItem, nCol, sText);
for (i = 0; i < aBR[nBR].length; ++i)
{
if (aBR[nBR][i].toUpperCase() == sName)
SetTextLV(IDBRLV, i, nCol, sText);
}
}
function CheckButtonsFRT(nID)
{
var sConds = "";
var i;
if ((nID == IDREGEXPB) && SendMessage(aWnd[IDREGEXPB].HWND, 240 /*BM_GETCHECK*/, 0, 0))
SendMessage(aWnd[IDESCSEQB].HWND, 241 /*BM_SETCHECK*/, 0, 0);
else if ((nID == IDESCSEQB) && SendMessage(aWnd[IDESCSEQB].HWND, 240 /*BM_GETCHECK*/, 0, 0))
SendMessage(aWnd[IDREGEXPB].HWND, 241 /*BM_SETCHECK*/, 0, 0);
ShowHelpLinksFRT();
for (i = IDMATCHB; i <= IDESCSEQB; ++i)
sConds += SendMessage(aWnd[i].HWND, 240 /*BM_GETCHECK*/, 0, 0).toString();
SetParametersFRTToLV(3, sConds);
}
function ShowHelpLinksFRT()
{
var bShow = SendMessage(aWnd[IDREGEXPB].HWND, 240 /*BM_GETCHECK*/, 0, 0) || SendMessage(aWnd[IDESCSEQB].HWND, 240 /*BM_GETCHECK*/, 0, 0);
oSys.Call("User32::ShowWindow", aWnd[IDHELP1L].HWND, bShow);
oSys.Call("User32::ShowWindow", aWnd[IDHELP2L].HWND, bShow);
}
function SetEditFontFRT()
{
var hFont = bAEFont ? SendMessage(hMainWnd, 1233 /*AKD_GETFONTW*/, 0, 0) : hGuiFont;
SendMessage(aWnd[IDWHATE].HWND, 48 /*WM_SETFONT*/, hFont, 0);
SendMessage(aWnd[IDWITHE].HWND, 48 /*WM_SETFONT*/, hFont, 0);
oSys.Call("User32::InvalidateRect", aWnd[IDWHATE].HWND, 0, 1);
oSys.Call("User32::InvalidateRect", aWnd[IDWITHE].HWND, 0, 1);
}
function GetItemCountLV(nID)
{
return SendMessage(aWnd[nID].HWND, 4100 /*LVM_GETITEMCOUNT*/, 0, 0);
}
function GetCurFocLV(nID)
{
return SendMessage(aWnd[nID].HWND, 4108 /*LVM_GETNEXTITEM*/, -1, 0x1 /*LVNI_FOCUSED*/);
}
function GetCurSelLV(nID)
{
return SendMessage(aWnd[nID].HWND, 4108 /*LVM_GETNEXTITEM*/, -1, 0x2 /*LVNI_SELECTED*/);
}
function SetCurSelLV(nID, nItem)
{
AkelPad.MemCopy(_PtrAdd(lpLVITEM, 16), 0x3 /*LVIS_SELECTED|LVIS_FOCUSED*/, DT_DWORD); //stateMask
if (nItem > -1)
{
AkelPad.MemCopy(_PtrAdd(lpLVITEM, 12), 0x3 /*LVIS_SELECTED|LVIS_FOCUSED*/, DT_DWORD); //state
SendMessage(aWnd[nID].HWND, 4139 /*LVM_SETITEMSTATE*/, nItem, lpLVITEM);
SendMessage(aWnd[nID].HWND, 4115 /*LVM_ENSUREVISIBLE*/, nItem, false);
}
else
{
AkelPad.MemCopy(_PtrAdd(lpLVITEM, 12), 0x0, DT_DWORD);
SendMessage(aWnd[nID].HWND, 4139 /*LVM_SETITEMSTATE*/, GetCurSelLV(nID), lpLVITEM);
}
}
function GetTextLV(nID, nItem, nSubItem)
{
AkelPad.MemCopy(_PtrAdd(lpLVITEM, 8), nSubItem, DT_DWORD);
if (SendMessage(aWnd[nID].HWND, 4211 /*LVM_GETITEMTEXTW*/, nItem, lpLVITEM))
return AkelPad.MemRead(lpBuffer, DT_UNICODE);
return "";
}
|
Last edited by KDJ on Tue Nov 01, 2016 9:36 pm; edited 55 times in total |
|
Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1929 Location: Poland
|
Posted: Tue Feb 05, 2013 5:54 pm Post subject: |
|
|
Minimize, maximize or restore tab in MDI mode.
TabMinMax.js
Code: | // http://akelpad.sourceforge.net/forum/viewtopic.php?p=21150#21150
// Version: 2013-08-23
// Author: KDJ
//
// *** Minimize/maximize/restore tab in MDI mode ***
//
// Usage:
// Call("Scripts::Main", 1, "TabMinMax.js") - restore tab
// Call("Scripts::Main", 1, "TabMinMax.js", "-") - minimize tab
// Call("Scripts::Main", 1, "TabMinMax.js", "+") - maximize tab
if (AkelPad.GetEditWnd() && (AkelPad.IsMDI() == 1 /*WMD_MDI*/))
{
var oSys = AkelPad.SystemFunction();
var hMainWnd = AkelPad.GetMainWnd();
var lpFrame = oSys.Call("User32::SendMessageW", hMainWnd, 1288 /*AKD_FRAMEFIND*/, 1 /*FWF_CURRENT*/, 0);
var hWndMdi = oSys.Call("User32::SendMessageW", hMainWnd, 1223 /*AKD_GETFRAMEINFO*/, 1 /*FI_WNDEDITPARENT*/, lpFrame);
var nAction = 9 /*SW_RESTORE*/;
if (WScript.Arguments.length)
{
if (WScript.Arguments(0) == "-")
nAction = 2 /*SW_SHOWMINIMIZED*/;
else if (WScript.Arguments(0) == "+")
nAction = 3 /*SW_MAXIMIZE*/;
}
oSys.Call("User32::ShowWindow", hWndMdi, nAction);
if (nAction == 3 /*SW_MAXIMIZE*/)
oSys.Call("User32::SetForegroundWindow", hWndMdi);
}
|
Last edited by KDJ on Sat Dec 20, 2014 7:29 pm; edited 2 times in total |
|
Back to top |
|
 |
akkorn
Joined: 08 Feb 2013 Posts: 39
|
Posted: Mon Feb 18, 2013 11:06 am Post subject: Comparison checksum of selected texts |
|
|
Comparison checksum of selected texts (CRC32txt)
Функция отображения контрольной суммы выделенного текста+ сравнение с предыдущими результатами (отображаются в новой вкладке при согласии пользователя).
Условия работы:
1) Нужен установленный плагин Scripts
2) В папке (...\AkelFiles\Plugs\Scripts\) создаем Новый текстовый документ и копируем в него код, расположенный ниже
3) Изменяем имя созданного файла на "CRC32txt.vbs"
4) Вызываем скрипт следующей командой: Code: | Call("Scripts::Main", 1, "CRC32txt.vbs") |
Из панели плагина Toolbar код вызова плагина будет следующим (обратите внимание на лидирующий минус, иначе кнопка будет "залипать"): Code: | -"Check CRC selected text" Call("Scripts::Main", 1, "CRC32txt.vbs") Icon(38) |
CRC32txt.vbs Code: |
' [Start script CRC32txt]
'
' VBScript CRC32txt file
' by akkorn for AkelPad
' Changed: 22:30 18.03.2013
' Usage:
' Call("Scripts::Main", 1, "CRC32txt.vbs")
' Test script:
' Text "Test" has a checksum is "784DD132"
' Declarations
Option Explicit
' Defines
Dim aCRC32Table(255)
Dim CRC32SetupExit, ErrorChecksum, vTimer, FormatNewLine, hMainWnd, lpCurrFrameTab, lpCurrFrameTabText, CurrMDIMode
Const sTitleLogTab = "AkelPad plugin [CRC32txt] log:"
' Executes
vTimer = Timer
Call Main
WScript.Quit(-1)
' ===============
' List procedures
' ===============
Sub Main()
'vTimer = Timer
'msgbox fTimer
Call PreparingData()
Dim oShell
Set oShell = CreateObject("Wscript.Shell")
Dim t, CurrCRC, StatText, StatText2, StatAvailable, Answer, l, m1, m2
t = AkelPad.GetSelText(0)
If t="" Then
Msgbox "No text is selected.",, "Checksum text"
Exit sub
End if
l = Len(t)
If l > 1000 Then l = FormatNumber(l,0)
ErrorChecksum = True
CurrCRC = CRC32Text(t)
CurrCRC = CStr(CurrCRC)
If l<2 Then ErrorChecksum = False
If ErrorChecksum Then
m1 = "Chance of a checksum error." & vbcrlf & vbcrlf
m2 = 64
Else
m1 = ""
m2 = 0
End if
StatText2 = PreviewText(t,l)
StatText = CorrectDate & CurrCRC & String(13-Len(CurrCRC),Chr(32)) & "Length: " & l & StatText2
If (CurrMDIMode = 0) Then
call MsgBox(m1 & "Checksum selection of text:" & vbTab & CurrCRC & VbCrLf & VbCrLf & _
"To activate the advance mode please change" & VbCrLf & "the operation mode to MDI or PMDI.",m2,"Checksum text")
Else
StatAvailable = LogTabIsAvailable
If StatAvailable = True Then
If AddTextToLogTab(StatText) = False Then
call oShell.Popup(m1 & "Checksum selection of text:" & vbTab & CurrCRC & _
vbCrLf & "Statistics are available on one of the tabs.",1,"Checksum text",m2)
End if
Else
Answer = MsgBox(m1 & "Checksum selection of text:" & vbTab & CurrCRC & _
vbCrLf & "Allow display of statistics in a new tab?",m2+260,"Checksum text")
If Answer = vbYes Then
call AddTextToLogTab(StatText)
End if
End if
End if
Set oShell = Nothing
End sub
Sub PreparingData()
Const AKD_FRAMEFINDW=1290, FWF_CURRENT=1, AKD_GETFRAMEINFO=1223, FI_WNDEDIT=2
Call SetFormatNewLine()
CurrMDIMode = AkelPad.IsMDI()
hMainWnd = AkelPad.GetMainWnd()
lpCurrFrameTab = AkelPad.SendMessage(hMainWnd, AKD_FRAMEFINDW, FWF_CURRENT, 0)
lpCurrFrameTabText = AkelPad.SendMessage(hMainWnd, AKD_GETFRAMEINFO, FI_WNDEDIT, lpCurrFrameTab)
End sub
Function fTimer()
dim i
i= Timer - vTimer
i= FormatNumber(i,3)
fTimer = i
End Function
Sub SetFormatNewLine()
Select Case AkelPad.GetEditNewLine(0)
Case 1: FormatNewLine = VbCrLf
Case 2: FormatNewLine = VbLf
Case 3: FormatNewLine = VbCr
End Select
End sub
Function CorrectDate()
dim i,d
i = cStr(now())
d = 30-Len(i)
d = String(d,Chr(32))
CorrectDate = i & d
End Function
Function PreviewText(sText, sLenght)
Dim StatText
StatText= sText
StatText= Left(StatText,1000)
DO
StatText = Replace(StatText, FormatNewLine & FormatNewLine, FormatNewLine)
LOOP UNTIL (InStr(1, StatText, FormatNewLine & FormatNewLine, 1)=0)
StatText= Replace(StatText, FormatNewLine, Chr(124))
StatText=Left(StatText,30)
StatText= String(20-len(sLenght),Chr(32)) & "First 30 chars: " & Chr(34) & StatText & Chr(34)
PreviewText = StatText
End Function
Function AddTextToLogTab(sNewText)
AddTextToLogTab = False
sNewText= cStr(sNewText)
if (CurrMDIMode = 0) OR (Len(sNewText)=0) Then Exit function 'MDI or PMDI
Dim lpFrameTab, lpFrameCur, sText, i, SelectionStart, SelectionEnd, FindLogTab
Const AKD_FRAMEFINDW=1290, FWF_BYTABINDEX=8, WM_SETREDRAW=&HB, AKD_FRAMEACTIVATE=1285, FWF_CURRENT=1, WM_COMMAND=273, IDM_FILE_NEW=4101
FindLogTab = False
i=0
lpFrameTab = AkelPad.SendMessage(hMainWnd, AKD_FRAMEFINDW, FWF_BYTABINDEX, i)
call AkelPad.SendMessage(hMainWnd, WM_SETREDRAW, false, 0)
DO WHILE lpFrameTab>0
lpFrameCur = AkelPad.SendMessage(hMainWnd, AKD_FRAMEACTIVATE, 0, lpFrameTab)
sText = AkelPad.GetTextRange(0, -1)
if left(sText,30) = sTitleLogTab Then
SelectionStart = AkelPad.GetSelStart()
SelectionEnd = AkelPad.GetSelEnd()
sText = sText & FormatNewLine & sNewText
call AkelPad.SetSel(0, -1)
call AkelPad.ReplaceSel(sText,False)
call AkelPad.SetSel(SelectionStart, SelectionEnd)
FindLogTab = True
If (lpCurrFrameTab=lpFrameTab) Then AddTextToLogTab = True
End if
i = i+1
lpFrameTab = AkelPad.SendMessage(hMainWnd, AKD_FRAMEFINDW, FWF_BYTABINDEX, i)
LOOP
If FindLogTab = False then
call AkelPad.SendMessage (hMainWnd, WM_COMMAND, IDM_FILE_NEW, 0)
lpFrameTab = AkelPad.SendMessage(hMainWnd, AKD_FRAMEFINDW, FWF_CURRENT, 0)
sText = sTitleLogTab & FormatNewLine & String(30,Chr(61)) & FormatNewLine & sNewText
call AkelPad.ReplaceSel(sText,False)
call AkelPad.SetSel(0,0)
End if
call AkelPad.SendMessage(hMainWnd, AKD_FRAMEACTIVATE, 0, lpCurrFrameTab)
call AkelPad.SendMessage(hMainWnd, WM_SETREDRAW, true, 0)
call AkelPad.SystemFunction().Call("user32.dll::InvalidateRect",hMainWnd,0)
call AkelPad.SystemFunction().Call("user32.dll::InvalidateRect",lpCurrFrameTabText,0)
End Function
Function LogTabIsAvailable()
LogTabIsAvailable = False
if (CurrMDIMode = 0) Then Exit function 'MDI or PMDI
Dim lpFrameTab, lpFrameCur, sText, i
Const AKD_FRAMEFINDW=1290, FWF_BYTABINDEX=8, WM_SETREDRAW=&HB, AKD_FRAMEACTIVATE=1285
i=0
lpFrameTab = AkelPad.SendMessage(hMainWnd, AKD_FRAMEFINDW, FWF_BYTABINDEX, i)
call AkelPad.SendMessage(hMainWnd, WM_SETREDRAW, false, 0)
DO WHILE lpFrameTab>0
lpFrameCur = AkelPad.SendMessage(hMainWnd, AKD_FRAMEACTIVATE, 0, lpFrameTab)
sText = AkelPad.GetTextRange(0, -1)
if left(sText,30) = sTitleLogTab Then LogTabIsAvailable = True
i = i+1
lpFrameTab = AkelPad.SendMessage(hMainWnd, AKD_FRAMEFINDW, FWF_BYTABINDEX, i)
LOOP
call AkelPad.SendMessage(hMainWnd, AKD_FRAMEACTIVATE, 0, lpCurrFrameTab)
call AkelPad.SendMessage(hMainWnd, WM_SETREDRAW, true, 0)
call AkelPad.SystemFunction().Call("user32.dll::InvalidateRect",hMainWnd,0)
call AkelPad.SystemFunction().Call("user32.dll::InvalidateRect",lpCurrFrameTabText,0)
End Function
Function CRC32Text(sText)
Dim iCRC
Call CRC32Setup
iCRC = CRC32(sText)
CRC32Text = Hex(iCRC)
End Function
Public Function CRC32(sMessage)
Dim iCRC, i, bytT, bytC, lngA, s, l
l = Len(sMessage)
If l=0 Then Exit function
Call CRC32Setup
iCRC = &HFFFFFFFF
s = Asc(Mid(sMessage, 1, 1))
For i = 1 To l
bytC = Asc(Mid(sMessage, i, 1))
If Not (bytC = s) Then ErrorChecksum = False
s = bytC
bytT = Abs((iCRC And &HFF) Xor bytC) Mod &H100
lngA = ulShiftRightBy8(iCRC)
iCRC = lngA Xor aCRC32Table(bytT)
Next
CRC32 = iCRC Xor &HFFFFFFFF
End Function
Public Function ulShiftRightBy8(x)
Dim iNew
iNew = (x And &H7FFFFFFF) \ 256
If (x And &H80000000) <> 0 Then
iNew = iNew Or &H800000
End If
ulShiftRightBy8 = iNew
End Function
Public Function CRC32Setup()
Dim vntA, i, iOffset, nLen
If CRC32SetupExit Then
Exit Function
End If
iOffset = 0
nLen = 32
vntA = Array( _
&H0, &H77073096, &HEE0E612C, &H990951BA, _
&H76DC419, &H706AF48F, &HE963A535, &H9E6495A3, _
&HEDB8832, &H79DCB8A4, &HE0D5E91E, &H97D2D988, _
&H9B64C2B, &H7EB17CBD, &HE7B82D07, &H90BF1D91, _
&H1DB71064, &H6AB020F2, &HF3B97148, &H84BE41DE, _
&H1ADAD47D, &H6DDDE4EB, &HF4D4B551, &H83D385C7, _
&H136C9856, &H646BA8C0, &HFD62F97A, &H8A65C9EC, _
&H14015C4F, &H63066CD9, &HFA0F3D63, &H8D080DF5)
For i = iOffset To iOffset + nLen - 1
aCRC32Table(i) = vntA(i - iOffset)
Next
iOffset = iOffset + nLen
vntA = Array( _
&H3B6E20C8, &H4C69105E, &HD56041E4, &HA2677172, _
&H3C03E4D1, &H4B04D447, &HD20D85FD, &HA50AB56B, _
&H35B5A8FA, &H42B2986C, &HDBBBC9D6, &HACBCF940, _
&H32D86CE3, &H45DF5C75, &HDCD60DCF, &HABD13D59, _
&H26D930AC, &H51DE003A, &HC8D75180, &HBFD06116, _
&H21B4F4B5, &H56B3C423, &HCFBA9599, &HB8BDA50F, _
&H2802B89E, &H5F058808, &HC60CD9B2, &HB10BE924, _
&H2F6F7C87, &H58684C11, &HC1611DAB, &HB6662D3D)
For i = iOffset To iOffset + nLen - 1
aCRC32Table(i) = vntA(i - iOffset)
Next
iOffset = iOffset + nLen
vntA = Array( _
&H76DC4190, &H1DB7106, &H98D220BC, &HEFD5102A, _
&H71B18589, &H6B6B51F, &H9FBFE4A5, &HE8B8D433, _
&H7807C9A2, &HF00F934, &H9609A88E, &HE10E9818, _
&H7F6A0DBB, &H86D3D2D, &H91646C97, &HE6635C01, _
&H6B6B51F4, &H1C6C6162, &H856530D8, &HF262004E, _
&H6C0695ED, &H1B01A57B, &H8208F4C1, &HF50FC457, _
&H65B0D9C6, &H12B7E950, &H8BBEB8EA, &HFCB9887C, _
&H62DD1DDF, &H15DA2D49, &H8CD37CF3, &HFBD44C65)
For i = iOffset To iOffset + nLen - 1
aCRC32Table(i) = vntA(i - iOffset)
Next
iOffset = iOffset + nLen
vntA = Array( _
&H4DB26158, &H3AB551CE, &HA3BC0074, &HD4BB30E2, _
&H4ADFA541, &H3DD895D7, &HA4D1C46D, &HD3D6F4FB, _
&H4369E96A, &H346ED9FC, &HAD678846, &HDA60B8D0, _
&H44042D73, &H33031DE5, &HAA0A4C5F, &HDD0D7CC9, _
&H5005713C, &H270241AA, &HBE0B1010, &HC90C2086, _
&H5768B525, &H206F85B3, &HB966D409, &HCE61E49F, _
&H5EDEF90E, &H29D9C998, &HB0D09822, &HC7D7A8B4, _
&H59B33D17, &H2EB40D81, &HB7BD5C3B, &HC0BA6CAD)
For i = iOffset To iOffset + nLen - 1
aCRC32Table(i) = vntA(i - iOffset)
Next
iOffset = iOffset + nLen
vntA = Array( _
&HEDB88320, &H9ABFB3B6, &H3B6E20C, &H74B1D29A, _
&HEAD54739, &H9DD277AF, &H4DB2615, &H73DC1683, _
&HE3630B12, &H94643B84, &HD6D6A3E, &H7A6A5AA8, _
&HE40ECF0B, &H9309FF9D, &HA00AE27, &H7D079EB1, _
&HF00F9344, &H8708A3D2, &H1E01F268, &H6906C2FE, _
&HF762575D, &H806567CB, &H196C3671, &H6E6B06E7, _
&HFED41B76, &H89D32BE0, &H10DA7A5A, &H67DD4ACC, _
&HF9B9DF6F, &H8EBEEFF9, &H17B7BE43, &H60B08ED5)
For i = iOffset To iOffset + nLen - 1
aCRC32Table(i) = vntA(i - iOffset)
Next
iOffset = iOffset + nLen
vntA = Array( _
&HD6D6A3E8, &HA1D1937E, &H38D8C2C4, &H4FDFF252, _
&HD1BB67F1, &HA6BC5767, &H3FB506DD, &H48B2364B, _
&HD80D2BDA, &HAF0A1B4C, &H36034AF6, &H41047A60, _
&HDF60EFC3, &HA867DF55, &H316E8EEF, &H4669BE79, _
&HCB61B38C, &HBC66831A, &H256FD2A0, &H5268E236, _
&HCC0C7795, &HBB0B4703, &H220216B9, &H5505262F, _
&HC5BA3BBE, &HB2BD0B28, &H2BB45A92, &H5CB36A04, _
&HC2D7FFA7, &HB5D0CF31, &H2CD99E8B, &H5BDEAE1D)
For i = iOffset To iOffset + nLen - 1
aCRC32Table(i) = vntA(i - iOffset)
Next
iOffset = iOffset + nLen
vntA = Array( _
&H9B64C2B0, &HEC63F226, &H756AA39C, &H26D930A, _
&H9C0906A9, &HEB0E363F, &H72076785, &H5005713, _
&H95BF4A82, &HE2B87A14, &H7BB12BAE, &HCB61B38, _
&H92D28E9B, &HE5D5BE0D, &H7CDCEFB7, &HBDBDF21, _
&H86D3D2D4, &HF1D4E242, &H68DDB3F8, &H1FDA836E, _
&H81BE16CD, &HF6B9265B, &H6FB077E1, &H18B74777, _
&H88085AE6, &HFF0F6A70, &H66063BCA, &H11010B5C, _
&H8F659EFF, &HF862AE69, &H616BFFD3, &H166CCF45)
For i = iOffset To iOffset + nLen - 1
aCRC32Table(i) = vntA(i - iOffset)
Next
iOffset = iOffset + nLen
vntA = Array( _
&HA00AE278, &HD70DD2EE, &H4E048354, &H3903B3C2, _
&HA7672661, &HD06016F7, &H4969474D, &H3E6E77DB, _
&HAED16A4A, &HD9D65ADC, &H40DF0B66, &H37D83BF0, _
&HA9BCAE53, &HDEBB9EC5, &H47B2CF7F, &H30B5FFE9, _
&HBDBDF21C, &HCABAC28A, &H53B39330, &H24B4A3A6, _
&HBAD03605, &HCDD70693, &H54DE5729, &H23D967BF, _
&HB3667A2E, &HC4614AB8, &H5D681B02, &H2A6F2B94, _
&HB40BBE37, &HC30C8EA1, &H5A05DF1B, &H2D02EF8D)
For i = iOffset To iOffset + nLen - 1
aCRC32Table(i) = vntA(i - iOffset)
Next
iOffset = iOffset + nLen
CRC32SetupExit = True
End Function
'
' [End script CRC32txt]
|
Обсуждение скрипта, вопросы- все здесь:
http://akelpad.sourceforge.net/forum/viewtopic.php?t=1504
Last edited by akkorn on Mon Mar 18, 2013 6:34 pm; edited 29 times in total |
|
Back to top |
|
 |
Infocatcher
Joined: 06 Aug 2007 Posts: 1767
|
Posted: Sun Feb 24, 2013 8:27 pm Post subject: |
|
|
winMergeTabs.js Code: | // http://akelpad.sourceforge.net/forum/viewtopic.php?p=21354#21354
// http://infocatcher.ucoz.net/js/akelpad_scripts/winMergeTabs.js
// https://github.com/Infocatcher/AkelPad_scripts/blob/master/winMergeTabs.js
// (c) Infocatcher 2013-2014
// version 0.1.2 - 2014-04-13
// Compare contents of current and next selected tab using WinMerge (http://winmerge.org/)
// or any other compare tool
// Required MDI or PMDI window mode and timer.js library!
// https://github.com/Infocatcher/AkelPad_scripts/blob/master/Include/timer.js
// (or use -noBlink=true argument to work without timer.js)
// Arguments:
// -path="%ProgramFiles%\WinMerge\WinMerge.exe" - path to WinMerge executable
// (or many paths: "path1|path2|path3")
// -cmd="<exe> /S=C <f1> <f2>" - set custom command line for any other compare tool
// (an example for Total Commander)
// -save=true - true - save (already saved, but modified) file before compare
// false - use temporary files for modified files
// -temp="%AkelScripts%\temp" - path to temporary directory
// -useTabsOrder=true - always compare left tab with right tab
// -noBlink=true - disable blink in status bar (and just show "Select tab!" text)
// Usage:
// Call("Scripts::Main", 1, "winMergeTabs.js")
// Call("Scripts::Main", 1, "winMergeTabs.js", '-path="%COMMANDER_PATH%\TOTALCMD.EXE" -cmd="<exe> /S=C <f1> <f2>"')
function _localize(s) {
var strings = {
"No tabs!": {
ru: "Отсутствуют вкладки!"
},
"MDI or PMDI window mode required!": {
ru: "Требуется оконный режим MDI или PMDI!"
},
"WinMerge not found!": {
ru: "Не удалось найти WinMerge!"
},
"Select tab!": {
ru: "Выберите вкладку!"
},
"Not found file from first tab:\n": {
ru: "Не найден файл из первой вкладки:\n"
},
"Not found file from second tab:\n": {
ru: "Не найден файл из второй вкладки:\n"
}
};
var lng;
switch(AkelPad.GetLangId(1 /*LANGID_PRIMARY*/)) {
case 0x19: lng = "ru"; break;
default: lng = "en";
}
_localize = function(s) {
return strings[s] && strings[s][lng] || s;
};
return _localize(s);
}
var hScript = AkelPad.ScriptHandle(WScript.ScriptName, 3 /*SH_FINDSCRIPT*/);
if(hScript) do {
if(AkelPad.ScriptHandle(hScript, 13 /*SH_GETMESSAGELOOP*/)) {
// Script is running, second call close it
AkelPad.ScriptHandle(hScript, 33 /*SH_CLOSESCRIPT*/);
WScript.Quit();
}
}
while(hScript = AkelPad.ScriptHandle(hScript, 32 /*SH_NEXTSAMESCRIPT*/));
var paths = AkelPad.GetArgValue("path", "");
var cmdLineTemplate = AkelPad.GetArgValue("cmd", "<exe> <f1> <f2>");
var save = AkelPad.GetArgValue("save", false);
var tempDir = AkelPad.GetArgValue("temp", "%temp%");
var useTabsOrder = AkelPad.GetArgValue("useTabsOrder", false);
var winMergePaths = paths
? paths.split("|")
: [
"<HKCU\\Software\\Thingamahoochie\\WinMerge\\Executable>",
"<HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\WinMergeU.exe\\>",
"<HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\WinMerge.exe\\>",
"%ProgramFiles%\\WinMerge\\WinMergeU.exe",
"%ProgramFiles (x86)%\\WinMerge\\WinMergeU.exe",
"%AkelDir%\\..\\WinMergePortable\\WinMergePortable.exe",
"%COMMANDER_PATH%\\..\\WinMergePortable\\WinMergePortable.exe"
];
var hMainWnd = AkelPad.GetMainWnd();
var oSys = AkelPad.SystemFunction();
var fso = new ActiveXObject("Scripting.FileSystemObject");
var wsh = new ActiveXObject("WScript.Shell");
if(
hMainWnd
&& AkelPad.IsMDI() // WMD_MDI or WMD_PMDI
) {
var lpFrame = AkelPad.SendMessage(hMainWnd, 1288 /*AKD_FRAMEFIND*/, 1 /*FWF_CURRENT*/, 0);
var lpFrame2;
if(lpFrame) {
var statusbar = new Statusbar();
statusbar.save();
var statusMsg = _localize("Select tab!");
statusbar.set(statusMsg);
if(
!AkelPad.GetArgValue("noBlink", false)
&& AkelPad.Include("timer.js")
) {
var showDelay = 600;
var hideDelay = 150;
// show -> [showDelay] -> hide -> [hideDelay] -> show -> [showDelay] -> hide
var timerHide = setTimeout(function() {
statusbar.set("");
clearTimeout(timerHide);
timerHide = setInterval(function() {
statusbar.set("");
}, showDelay + hideDelay, timerHide);
}, showDelay);
var timerShow = setInterval(function() {
statusbar.set(statusMsg);
}, showDelay + hideDelay);
var stopTimers = function() {
clearInterval(timerHide);
clearInterval(timerShow);
};
}
}
if(
lpFrame
&& AkelPad.WindowSubClass(
1 /*WSC_MAINPROC*/,
mainCallback,
0x416 /*AKDN_FRAME_ACTIVATE*/,
0x418 /*AKDN_FRAME_DESTROY*/
)
) {
AkelPad.ScriptNoMutex(); // Allow other scripts running
AkelPad.WindowGetMessage(); // Message loop
AkelPad.WindowUnsubClass(1 /*WSC_MAINPROC*/);
stopTimers && stopTimers();
statusbar.restore();
if(lpFrame2)
compareTabs(lpFrame, lpFrame2);
}
else {
stopTimers && stopTimers();
statusbar && statusbar.restore();
AkelPad.MessageBox(hMainWnd, _localize("No tabs!"), WScript.ScriptName, 48 /*MB_ICONEXCLAMATION*/);
}
}
else {
AkelPad.MessageBox(hMainWnd, _localize("MDI or PMDI window mode required!"), WScript.ScriptName, 48 /*MB_ICONEXCLAMATION*/);
}
function mainCallback(hWnd, uMsg, wParam, lParam) {
if(uMsg == 0x416 /*AKDN_FRAME_ACTIVATE*/) {
if(lParam != lpFrame) {
lpFrame2 = lParam;
oSys.Call("user32::PostQuitMessage", 0); // Exit message loop
}
}
else if(uMsg == 0x418 /*AKDN_FRAME_DESTROY*/) {
if(lParam == lpFrame)
oSys.Call("user32::PostQuitMessage", 0); // Exit message loop
}
}
function compareTabs(lpFrame, lpFrame2) {
var winMerge = getWinMerge();
if(!winMerge) {
AkelPad.MessageBox(
hMainWnd,
_localize("WinMerge not found!") + "\n\n" + getWinMergePaths(),
WScript.ScriptName,
48 /*MB_ICONEXCLAMATION*/
);
return;
}
setRedraw(hMainWnd, false);
var file = getFile(lpFrame);
var file2 = getFile(lpFrame2);
//if(AkelPad.SendMessage(hMainWnd, 1288 /*AKD_FRAMEFIND*/, 1 /*FWF_CURRENT*/, 0) != lpFrame2)
// AkelPad.SendMessage(hMainWnd, 1285 /*AKD_FRAMEACTIVATE*/, 0, lpFrame2);
setRedraw(hMainWnd, true);
// Force redraw current edit window
oSys.Call("user32::InvalidateRect", AkelPad.GetEditWnd(), 0, true);
var noFile = !fso.FileExists(file);
var noFile2 = !fso.FileExists(file2);
if(noFile || noFile2) {
var errs = [];
if(noFile)
errs[errs.length] = _localize("Not found file from first tab:\n") + file;
if(noFile2)
errs[errs.length] = _localize("Not found file from second tab:\n") + file2;
AkelPad.MessageBox(
hMainWnd,
errs.join("\n\n"),
WScript.ScriptName,
48 /*MB_ICONEXCLAMATION*/
);
if(!noFile && file.isTemp)
fso.DeleteFile(file);
if(!noFile2 && file2.isTemp)
fso.DeleteFile(file2);
return;
}
if(useTabsOrder) {
var pos = AkelPad.SendMessage(hMainWnd, 1294 /*AKD_FRAMEINDEX*/, 0, lpFrame);
var pos2 = AkelPad.SendMessage(hMainWnd, 1294 /*AKD_FRAMEINDEX*/, 0, lpFrame2);
if(pos2 < pos) {
var tmp = file;
file = file2;
file2 = tmp;
}
}
var cmdLine = cmdLineTemplate
.replace("<exe>", '"' + winMerge + '"')
.replace("<f1>", '"' + file + '"')
.replace("<f2>", '"' + file2 + '"');
var wm = wsh.Exec(cmdLine);
if(file.isTemp || file2.isTemp) {
// If WinMerge are already opened, new process will be immediately closed,
// so don't delete files too early
WScript.Sleep(4000);
for(;;) {
if(wm.Status != 0) {
if(file.isTemp)
fso.DeleteFile(file);
if(file2.isTemp)
fso.DeleteFile(file2);
break;
}
WScript.Sleep(1500);
}
}
}
function getFile(lpFrame) {
AkelPad.SendMessage(hMainWnd, 1285 /*AKD_FRAMEACTIVATE*/, 0, lpFrame);
var hWndEdit = AkelPad.GetEditWnd();
var origFile = AkelPad.GetEditFile(hWndEdit);
var file = origFile;
if(!origFile || AkelPad.SendMessage(hWndEdit, 3086 /*AEM_GETMODIFY*/, 0, 0)) {
if(origFile && save)
AkelPad.Command(4105); // IDM_FILE_SAVE
else {
var tempFile = file = getTempFile(hWndEdit, origFile);
var codePage = -1;
var hasBOM = -1;
if(!origFile) {
// Will use UTF-8 with BOM to correctly save all (most?) new documents
codePage = 65001;
hasBOM = 1;
}
AkelPad.SaveFile(AkelPad.GetEditWnd(), tempFile, codePage, hasBOM, 0 /* W/o SD_UPDATE */);
}
}
return file;
}
function getWinMerge() {
for(var i = 0, l = winMergePaths.length; i < l; ++i) {
var path = expandVariables(winMergePaths[i]);
if(fso.FileExists(path))
return path;
}
return "";
}
function getWinMergePaths() {
var out = [];
for(var i = 0, l = winMergePaths.length; i < l; ++i) {
var rawPath = winMergePaths[i];
var path = expandVariables(rawPath);
out[out.length] = path == rawPath
? path
: rawPath + " => " + path
}
return out.join("\n");
}
function getTempFile(hWndEdit, file) {
var fileName, fileExt;
var tmp = file && /[^\/\\]+$/.test(file) && RegExp.lastMatch;
if(tmp) {
fileExt = /\.[^.]+$/.test(tmp) && RegExp.lastMatch || "";
fileName = tmp.slice(0, -fileExt.length);
}
else {
fileExt = getCurrentExtension();
fileName = "akelpad-temp";
}
var tmpDir = expandVariables(tempDir);
if(!fso.FolderExists(tmpDir))
fso.CreateFolder(tmpDir);
var i = -1;
do tmp = tmpDir + "\\" + fileName + (++i ? "-" + i : "") + fileExt;
while(fso.FileExists(tmp));
var out = new String(tmp);
out.isTemp = true;
return out;
}
function getCurrentExtension() {
var alias = getCoderAlias();
if(/\.[^.]+$/.test(alias))
return RegExp.lastMatch;
return ".txt";
}
function getCoderAlias() {
if(
!AkelPad.IsPluginRunning("Coder::HighLight")
&& !AkelPad.IsPluginRunning("Coder::CodeFold")
&& !AkelPad.IsPluginRunning("Coder::AutoComplete")
)
return "";
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=19363#19363
var hWndEdit = AkelPad.GetEditWnd();
var hDocEdit = AkelPad.GetEditDoc();
var pAlias = "";
if(hWndEdit && hDocEdit) {
var lpAlias = AkelPad.MemAlloc(256 * 2 /*sizeof(wchar_t)*/);
if(lpAlias) {
AkelPad.CallW("Coder::Settings", 18 /*DLLA_CODER_GETALIAS*/, hWndEdit, hDocEdit, lpAlias, 0);
pAlias = AkelPad.MemRead(lpAlias, 1 /*DT_UNICODE*/);
AkelPad.MemFree(lpAlias);
}
}
return pAlias;
}
function expandVariables(s) {
return expandEnvironmentVariables(expandRegistryVariables(s));
}
function expandEnvironmentVariables(s) {
if(s.substr(0, 9) == "%AkelDir%")
s = AkelPad.GetAkelDir() + s.substr(9);
if(s.substr(0, 13) == "%AkelScripts%")
s = AkelPad.GetAkelDir(5 /*ADTYPE_SCRIPTS*/) + s.substr(13);
return wsh.ExpandEnvironmentStrings(s);
}
function expandRegistryVariables(s) { // <HKCU\Software\Foo\installPath>\foo.exe
return s.replace(/<(.+?)>/g, function(s, path) {
var val = getRegistryValue(path);
if(val)
return val;
return s;
});
}
function getRegistryValue(path) {
try {
return wsh.RegRead(path);
}
catch(e) {
}
return "";
}
function setRedraw(hWnd, bRedraw) {
AkelPad.SendMessage(hWnd, 11 /*WM_SETREDRAW*/, bRedraw, 0);
bRedraw && oSys.Call("user32::InvalidateRect", hWnd, 0, true);
}
function Statusbar() {
this.get = this.set = this.save = this.restore = function() {};
// Based on Instructor's code: http://akelpad.sourceforge.net/forum/viewtopic.php?p=13656#13656
var hWndStatus = oSys.Call("user32::GetDlgItem", hMainWnd, 10002 /*ID_STATUS*/);
if(!hWndStatus || !oSys.Call("user32::IsWindowVisible", hWndStatus))
return;
var nParts = AkelPad.SendMessage(hWndStatus, 1030 /*SB_GETPARTS*/, 0, 0);
if(nParts <= 5)
return;
var _origStatus, _customStatus;
var _this = this;
function buffer(callback) {
var lpTextBuffer = AkelPad.MemAlloc(1024 * _TSIZE);
if(lpTextBuffer) {
var ret = callback.call(_this, lpTextBuffer);
AkelPad.MemFree(lpTextBuffer);
return ret;
}
return undefined;
}
this.get = function() {
return buffer(function(lpTextBuffer) {
AkelPad.SendMessage(hWndStatus, _TSTR ? 1037 /*SB_GETTEXTW*/ : 1026 /*SB_GETTEXTA*/, nParts - 1, lpTextBuffer);
return AkelPad.MemRead(lpTextBuffer, _TSTR);
});
};
this.set = function(pStatusText) {
buffer(function(lpTextBuffer) {
_customStatus = pStatusText;
AkelPad.MemCopy(lpTextBuffer, pStatusText, _TSTR);
AkelPad.SendMessage(hWndStatus, _TSTR ? 1035 /*SB_SETTEXTW*/ : 1025 /*SB_SETTEXTA*/, nParts - 1, lpTextBuffer);
});
};
this.save = function() {
_origStatus = this.get();
};
this.restore = function() {
if(_origStatus != undefined && this.get() == _customStatus)
this.set(_origStatus);
};
} |
<download | mirror | development version>
Compare contents of current and next selected tab using WinMerge or any other compare tool.
Required MDI or PMDI window mode and timer.js library!
Last edited by Infocatcher on Sat Apr 12, 2014 8:41 pm; edited 2 times in total |
|
Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1929 Location: Poland
|
Posted: Sat Jun 08, 2013 9:36 pm Post subject: |
|
|
List of AkelPad methods from Scripts-Eng.txt and Scripts-Rus.txt files.
The script should be saved in Unicode format.
Required to include: BrowseForFolder_function.js and InputBox_function.js
All in one: KDJ.zip
AkelPadMethodsView.js
Code: | // http://akelpad.sourceforge.net/forum/viewtopic.php?p=22073#22073
// Version: 2016-02-06
// Author: KDJ
//
// *** List of AkelPad Scripts methods (Scripts-*.txt files) ***
//
// Usage:
// Call("Scripts::Main", 1, "AkelPadMethodsView.js")
//
// Required to include: BrowseForFolder_function.js and InputBox_function.js
//
// Keyboard and mouse:
// Tab - rigth <-> left panel
// Ctrl(+Shift)+Tab - next/previous item in methods list
// F1 - menu
// F4 - maximize/restore window (also Alt+Enter)
// right click on method name or on edit window - context menu
// double click on method name = "OK"
//
// Remark:
// The script should be saved in Unicode format.
var oSys = AkelPad.SystemFunction();
var hInstDLL = AkelPad.GetInstanceDll();
var sClass = "AkelPad::Scripts::" + WScript.ScriptName + "::" + hInstDLL;
var hDlg = oSys.Call("User32::FindWindowExW", 0, 0, sClass, 0);
if (hDlg)
{
SetForegroundWindow(hDlg);
WScript.Quit();
}
if (! (AkelPad.Include("BrowseForFolder_function.js") && AkelPad.Include("InputBox_function.js")))
WScript.Quit();
GetLangStrings();
var Scale =
{
Init: function()
{
var hDC = oSys.Call("User32::GetDC", hMainWnd);
this.ScaleX = oSys.Call("Gdi32::GetDeviceCaps", hDC, 88 /*LOGPIXELSX*/);
this.ScaleY = oSys.Call("Gdi32::GetDeviceCaps", hDC, 90 /*LOGPIXELSY*/);
oSys.Call("User32::ReleaseDC", hMainWnd, hDC);
//Align to 16 pixel
this.ScaleX += (16 - this.ScaleX % 16) % 16;
this.ScaleY += (16 - this.ScaleY % 16) % 16;
},
X: function(n) {return oSys.Call("Kernel32::MulDiv", n, this.ScaleX, 96);},
Y: function(n) {return oSys.Call("Kernel32::MulDiv", n, this.ScaleY, 96);},
UX: function(n) {return oSys.Call("Kernel32::MulDiv", n, 96, this.ScaleX);},
UY: function(n) {return oSys.Call("Kernel32::MulDiv", n, 96, this.ScaleY);}
}
Scale.Init();
var hMainWnd = AkelPad.GetMainWnd();
var hWndParent = hMainWnd;
var hGuiFont = oSys.Call("Gdi32::GetStockObject", 17 /*DEFAULT_GUI_FONT*/);
var nDlgMinW = Scale.X(640);
var nDlgMinH = Scale.Y(300);
var oDlgPos = {"X": 230, "Y": 200, "W": nDlgMinW, "H": nDlgMinH, "Max": 0};
var bSeparateWnd = false;
var nAPMSel = 0;
var bAPMSort = true;
var nAPMLang = 0;
var bMatchCase = false;
var bWordWrap = false;
var sFindName = "";
var sFindText = "";
var sAltDir = "";
var aAPM = [];
var aAESel = [{}, {}];
var aIsLang;
var sHeader;
var hSubClass;
var hFocus;
var bCloseDlg;
var nTextMax = 512;
var lpTextLV = AkelPad.MemAlloc(nTextMax * 2);
var lpLVITEM = AkelPad.MemAlloc(_X64 ? (72) : (60)); //sizeof(LVITEM)
AkelPad.MemCopy(lpLVITEM, 0x0001 /*LVIF_TEXT*/, 3 /*DT_DWORD*/);
AkelPad.MemCopy(_PtrAdd(lpLVITEM, _X64 ? 24 : 20), lpTextLV, 2 /*DT_QWORD*/);
AkelPad.MemCopy(_PtrAdd(lpLVITEM, _X64 ? 32 : 24), nTextMax, 3 /*DT_DWORD*/);
var aDlg = [];
var IDHEADERS = 1000;
var IDNAMELV = 1001;
var IDTEXT = 1002;
var IDSORTB = 1003;
var IDLANG1B = 1004;
var IDLANG2B = 1005;
var IDMENUB = 1006;
var IDOKB = 1007;
var IDCLOSEB = 1008;
AkelPad.ScriptNoMutex();
AkelPad.WindowRegisterClass(sClass);
while (! bCloseDlg)
{
bCloseDlg = true;
ReadIni();
GetArrayAPM(hMainWnd);
if (! aAPM.length)
break;
aDlg[IDHEADERS]={T: sHeader, C: "STATIC", S: 0x50000001 /*WS_VISIBLE|WS_CHILD|SS_CENTER*/};
aDlg[IDNAMELV ]={T: "", C: "SysListView32", S: 0x5080800D /*WS_VISIBLE|WS_CHILD|WS_BORDER|LVS_NOSORTHEADER|LVS_SHOWSELALWAYS|LVS_SINGLESEL|LVS_REPORT*/};
aDlg[IDTEXT ]={T: "", C: "AkelEditW", S: 0x50B00804 /*WS_VISIBLE|WS_CHILD|WS_BORDER|WS_VSCROLL|WS_HSCROLL|ES_READONLY|ES_MULTILINE*/};
aDlg[IDSORTB ]={T: sTxtSort, C: "BUTTON", S: 0x50000003 /*WS_VISIBLE|WS_CHILD|BS_AUTOCHECKBOX*/};
aDlg[IDLANG1B ]={T: sTxtEnglish, C: "BUTTON", S: 0x50000009 /*WS_VISIBLE|WS_CHILD|BS_AUTORADIOBUTTON*/};
aDlg[IDLANG2B ]={T: sTxtRussian, C: "BUTTON", S: 0x50000009 /*WS_VISIBLE|WS_CHILD|BS_AUTORADIOBUTTON*/};
aDlg[IDMENUB ]={T: sTxtMenu, C: "BUTTON", S: 0x50000000 /*WS_VISIBLE|WS_CHILD*/};
aDlg[IDOKB ]={T: sTxtOK, C: "BUTTON", S: 0x50000001 /*WS_VISIBLE|WS_CHILD|BS_DEFPUSHBUTTON*/};
aDlg[IDCLOSEB ]={T: sTxtClose, C: "BUTTON", S: 0x50000000 /*WS_VISIBLE|WS_CHILD*/};
SetForegroundWindow(hMainWnd);
oSys.Call("User32::CreateWindowExW",
0, //dwExStyle
sClass, //lpClassName
sTxtDlgTitle, //lpWindowName
0x80CF0000, //dwStyle=WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_SIZEBOX|WS_MINIMIZEBOX|WS_MAXIMIZEBOX
oDlgPos.X, //x
oDlgPos.Y, //y
oDlgPos.W, //nWidth
oDlgPos.H, //nHeight
hWndParent, //hWndParent
0, //ID
hInstDLL, //hInstance
DialogCallback); //Script function callback. To use it class must be registered by WindowRegisterClass.
oSys.Call("User32::ShowWindow", hDlg, oDlgPos.Max ? 3 /*SW_MAXIMIZE*/ : 1 /*SW_SHOWNORMAL*/);
AkelPad.WindowGetMessage();
}
AkelPad.WindowUnregisterClass(sClass);
AkelPad.MemFree(lpTextLV);
AkelPad.MemFree(lpLVITEM);
SetForegroundWindow(hMainWnd);
function DialogCallback(hWnd, uMsg, wParam, lParam)
{
if (uMsg == 1) //WM_CREATE
{
var i;
hDlg = hWnd;
for (i = IDHEADERS; i < aDlg.length; ++i)
{
aDlg[i].HWND = oSys.Call("User32::CreateWindowExW",
0, //dwExStyle
aDlg[i].C, //lpClassName
aDlg[i].T, //lpWindowName
aDlg[i].S, //dwStyle
0,0,0,0, //x, y, nWidth, nHeight
hDlg, //hWndParent
i, //ID
hInstDLL, //hInstance
0); //lpParam
SetWindowFont(aDlg[i].HWND, hGuiFont);
}
CheckButtons();
SetOptionsAE();
InsertColumnLV();
FillLV(nAPMSel, GetInputName(), true);
oSys.Call("User32::SetFocus", aDlg[IDTEXT].HWND);
oSys.Call("User32::SetFocus", aDlg[IDNAMELV].HWND);
PostMessage(hDlg, 0x8000 /*WM_APP*/, 0, 0);
}
else if (uMsg == 0x8000 /*WM_APP*/)
{
if (aAESel[nAPMLang][aAPM[nAPMSel][0]])
SetSelAE(aAESel[nAPMLang][aAPM[nAPMSel][0]][0], aAESel[nAPMLang][aAPM[nAPMSel][0]][1]);
}
else if (uMsg == 7) //WM_SETFOCUS
oSys.Call("User32::SetFocus", hFocus);
else if (uMsg == 36) //WM_GETMINMAXINFO
{
AkelPad.MemCopy(_PtrAdd(lParam, 24), nDlgMinW, 3 /*DT_DWORD*/); //ptMinTrackSize_x
AkelPad.MemCopy(_PtrAdd(lParam, 28), nDlgMinH, 3 /*DT_DWORD*/); //ptMinTrackSize_y
}
else if (uMsg == 3) //WM_MOVE
{
if (! (oSys.Call("User32::IsZoomed", hDlg) || oSys.Call("User32::IsIconic", hDlg)))
GetWindowPos(hDlg, oDlgPos);
}
else if (uMsg == 5) //WM_SIZE
{
if (wParam == 0 /*SIZE_RESTORED*/)
GetWindowPos(hDlg, oDlgPos);
ResizeDlg(LoWord(lParam), HiWord(lParam));
}
else if (uMsg == 15) //WM_PAINT
PaintSizeGrip();
else if (uMsg == 256) //WM_KEYDOWN
{
if (wParam == 9 /*VK_TAB*/)
{
if (Ctrl())
{
if (Shift())
{
if (nAPMSel > 0)
--nAPMSel;
else
nAPMSel = aAPM.length - 1;
}
else
{
if (nAPMSel < aAPM.length - 1)
++nAPMSel;
else
nAPMSel = 0;
}
SetCurSelLV(nAPMSel);
oSys.Call("User32::SetFocus", hFocus);
}
else
{
if (hFocus == aDlg[IDNAMELV].HWND)
oSys.Call("User32::SetFocus", aDlg[IDTEXT].HWND);
else
oSys.Call("User32::SetFocus", aDlg[IDNAMELV].HWND);
}
}
else if (wParam == 0x43 /*C key*/)
{
if (Ctrl() && (! Alt()))
{
if (hFocus == aDlg[IDNAMELV].HWND)
{
if (Shift())
InsertNameToAP();
else
CopytNameToCB();
}
else
InsertTextTo(! Shift());
}
}
else if (wParam == 0x46 /*F key*/)
{
if (Ctrl() && (! Alt()))
{
if (hFocus == aDlg[IDNAMELV].HWND)
FindName(Shift() ? 2 : 0);
else
FindText(Shift() ? 2 : 0);
}
}
else if (wParam == 0x55 /*U key*/)
{
if (Ctrl() && (! Shift()) && (! Alt()))
{
bWordWrap = ! bWordWrap;
SetWordWrapAE();
}
}
else if (wParam == 0x70 /*VK_F1*/)
{
if ((! Ctrl()) && (! Shift()))
MenuMain();
}
else if (wParam == 0x72 /*VK_F3*/)
{
if (! Ctrl())
{
if (hFocus == aDlg[IDNAMELV].HWND)
FindNameNext(Shift() ? 3 : 1);
else
FindTextNext(Shift() ? 3 : 1);
}
}
else if (wParam == 0x73 /*VK_F4*/)
{
if ((! Ctrl()) && (! Shift()))
oSys.Call("User32::ShowWindow", hDlg, oSys.Call("User32::IsZoomed", hDlg) ? 9 /*SW_RESTORE*/ : 3 /*SW_MAXIMIZE*/);
}
else if (wParam == 13 /*VK_RETURN*/)
{
if ((! Ctrl()) && (! Shift()) && (oSys.Call("User32::GetDlgCtrlID", oSys.Call("User32::GetFocus")) < IDMENUB))
PostMessage(hDlg, 273 /*WM_COMMAND*/, IDOKB, 0);
}
else if (wParam == 27 /*VK_ESCAPE*/)
PostMessage(hDlg, 16 /*WM_CLOSE*/, 0, 0);
}
else if (uMsg == 260) //WM_SYSKEYDOWN
{
if (wParam == 0x46 /*F key*/)
{
if (hFocus == aDlg[IDNAMELV].HWND)
FindName(Shift() ? 3 : 1);
else
FindText(Shift() ? 3 : 1);
}
else if (wParam == 13 /*VK_RETURN*/)
{
if (! Shift())
oSys.Call("User32::ShowWindow", hDlg, oSys.Call("User32::IsZoomed", hDlg) ? 9 /*SW_RESTORE*/ : 3 /*SW_MAXIMIZE*/);
}
}
else if ((uMsg == 0x004E /*WM_NOTIFY*/) && (wParam == IDNAMELV))
{
switch (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 16 : 8), 3 /*DT_DWORD*/))
{
case -101 : //LVN_ITEMCHANGED
if (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 32 : 20) /*NMLISTVIEW.uNewState*/, 3 /*DT_DWORD*/) & 0x2 /*LVIS_SELECTED*/)
{
nAPMSel = GetCurSelLV();
SetWindowText(aDlg[IDTEXT].HWND, aAPM[nAPMSel][1]);
if (aAESel[nAPMLang][aAPM[nAPMSel][0]])
SetSelAE(aAESel[nAPMLang][aAPM[nAPMSel][0]][0], aAESel[nAPMLang][aAPM[nAPMSel][0]][1]);
}
break;
case -3 : //NM_DBLCLK
if (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 24 : 12) /*NMITEMACTIVATE.iItem*/, 3 /*DT_DWORD*/) == -1)
SetCurSelLV(GetCurFocLV());
else
PostMessage(hDlg, 273 /*WM_COMMAND*/, IDOKB, 0);
break;
case -2 : //NM_CLICK
case -5 : //NM_RCLICK
case -6 : //NM_RDBLCLK
if (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 24 : 12) /*NMITEMACTIVATE.iItem*/, 3 /*DT_DWORD*/) == -1)
SetCurSelLV(GetCurFocLV());
break;
case -7 : //NM_SETFOCUS
hFocus = aDlg[IDNAMELV].HWND;
break;
}
}
else if (uMsg == 123) //WM_CONTEXTMENU
{
if (wParam == aDlg[IDNAMELV].HWND)
MenuName(LoWord(lParam), HiWord(lParam));
else if (wParam == aDlg[IDTEXT].HWND)
{
oSys.Call("User32::SetFocus", aDlg[IDTEXT].HWND);
MenuText(LoWord(lParam), HiWord(lParam));
}
}
else if (uMsg == 273) //WM_COMMAND
{
var nLowParam = LoWord(wParam);
var nHiwParam = HiWord(wParam);
var sFind;
if (nLowParam == IDTEXT)
{
if (nHiwParam == 0x0100 /*EN_SETFOCUS*/)
{
if (SendMessage(AkelPad.GetEditWnd(), 3227 /*AEM_GETOPTIONS*/, 0, 0) & 0x00000800 /*AECO_ACTIVELINE*/)
SendMessage(lParam, 3228 /*AEM_SETOPTIONS*/, 2 /*AECOOP_OR*/, 0x00000800 /*AECO_ACTIVELINE*/);
hFocus = lParam;
}
if (nHiwParam == 0x0200 /*EN_KILLFOCUS*/)
{
SendMessage(lParam, 3228 /*AEM_SETOPTIONS*/, 4 /*AECOOP_XOR*/, 0x00000800 /*AECO_ACTIVELINE*/);
aAESel[nAPMLang][aAPM[nAPMSel][0]] = [GetSelStartAE(), GetSelEndAE()];
}
}
else if ((nLowParam >= IDSORTB) && (nLowParam <= IDLANG2B))
{
sFind = aAPM[nAPMSel][0];
CheckButtons(nLowParam);
GetArrayAPM(hDlg);
if (aAPM.length)
{
CheckButtons();
SetWindowText(aDlg[IDHEADERS].HWND, sHeader);
FillLV(nAPMSel, sFind, false);
oSys.Call("User32::SetFocus", hFocus);
}
else
PostMessage(hDlg, 16 /*WM_CLOSE*/, 0, 0);
}
else if (nLowParam == IDMENUB)
{
oSys.Call("User32::DefDlgProcW", hDlg, 1025 /*DM_SETDEFID*/, IDMENUB, 0);
oSys.Call("User32::DefDlgProcW", hDlg, 1025 /*DM_SETDEFID*/, IDOKB, 0);
oSys.Call("User32::SetFocus", hFocus);
MenuMain();
}
else if (nLowParam == IDOKB)
PostMessage(hDlg, 16 /*WM_CLOSE*/, 1, 0);
else if (nLowParam == IDCLOSEB)
PostMessage(hDlg, 16 /*WM_CLOSE*/, 0, 0);
}
else if (uMsg == 16) //WM_CLOSE
{
if (wParam)
InsertNameToAP();
aAESel[nAPMLang][aAPM[nAPMSel][0]] = [GetSelStartAE(), GetSelEndAE()];
WriteIni();
AkelPad.WindowUnsubClass(aDlg[IDTEXT].HWND);
oSys.Call("User32::DestroyWindow", hDlg);
}
else if (uMsg == 2) //WM_DESTROY
oSys.Call("User32::PostQuitMessage", 0);
return 0;
}
function EditCallback(hWnd, uMsg, wParam, lParam)
{
var lpPOINT;
var lpAECHARRANGE;
var nOffset1;
var nOffset2;
var sLink;
if (uMsg == 515 /*WM_LBUTTONDBLCLK*/)
{
lpPOINT = AkelPad.MemAlloc(8 /*sizeof(POINT)*/);
lpAECHARRANGE = AkelPad.MemAlloc(_X64 ? 48 : 24 /*sizeof(AECHARRANGE)*/);
AkelPad.MemCopy(_PtrAdd(lpPOINT, 0), LoWord(lParam), 3 /*DT_DWORD*/);
AkelPad.MemCopy(_PtrAdd(lpPOINT, 4), HiWord(lParam), 3 /*DT_DWORD*/);
if (AkelPad.SendMessage(hWnd, 3196 /*AEM_POINTONURL*/, lpPOINT, lpAECHARRANGE))
{
nOffset1 = AkelPad.SendMessage(hWnd, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpAECHARRANGE);
nOffset2 = AkelPad.SendMessage(hWnd, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, _PtrAdd(lpAECHARRANGE, _X64 ? 24 : 12));
AkelPad.SetEditWnd(hWnd);
sLink = AkelPad.GetTextRange(nOffset1, nOffset2);
AkelPad.SetEditWnd(0);
oSys.Call("Shell32::ShellExecuteW", 0, "open", sLink, 0, 0, 1 /*SW_SHOWNORMAL*/);
AkelPad.WindowNoNextProc(hSubClass);
}
AkelPad.MemFree(lpPOINT);
AkelPad.MemFree(lpAECHARRANGE);
}
return 0;
}
function SendMessage(hWnd, uMsg, wParam, lParam)
{
return oSys.Call("User32::SendMessageW", hWnd, uMsg, wParam, lParam);
}
function PostMessage(hWnd, uMsg, wParam, lParam)
{
return oSys.Call("User32::PostMessageW", hWnd, uMsg, wParam, lParam);
}
function LoWord(nDwNum)
{
return nDwNum & 0xFFFF;
}
function HiWord(nDwNum)
{
return (nDwNum >> 16) & 0xFFFF;
}
function MkLong(nLoWord, nHiWord)
{
return (nLoWord & 0xFFFF) | (nHiWord << 16);
}
function Ctrl()
{
return oSys.Call("User32::GetKeyState", 0x11 /*VK_CONTROL*/) & 0x8000;
}
function Shift()
{
return oSys.Call("User32::GetKeyState", 0x10 /*VK_SHIFT*/) & 0x8000;
}
function Alt()
{
return oSys.Call("user32::GetKeyState", 0x12 /*VK_MENU*/) & 0x8000;
}
function GetInputName()
{
var hEditWnd = AkelPad.GetEditWnd();
var lpIndex1 = AkelPad.MemAlloc(_X64 ? 24 : 12 /*sizeof(AECHARINDEX)*/);
var lpIndex2 = AkelPad.MemAlloc(_X64 ? 24 : 12 /*sizeof(AECHARINDEX)*/);
var nOffset1;
var nOffset2;
SendMessage(hEditWnd, 3130 /*AEM_GETINDEX*/, 3 /*AEGI_FIRSTSELCHAR*/, lpIndex1);
SendMessage(hEditWnd, 3130 /*AEM_GETINDEX*/, 4 /*AEGI_LASTSELCHAR*/, lpIndex2);
if (SendMessage(hEditWnd, 3133 /*AEM_INDEXCOMPARE*/, lpIndex1, lpIndex2) == 0)
{
if (! SendMessage(hEditWnd, 3146 /*AEM_ISDELIMITER*/, 0x11 /*AEDLM_WORD|AEDLM_PREVCHAR*/, lpIndex1))
SendMessage(hEditWnd, 3145 /*AEM_GETPREVBREAK*/, 0x1 /*AEWB_LEFTWORDSTART*/, lpIndex1);
if (! SendMessage(hEditWnd, 3146 /*AEM_ISDELIMITER*/, 0x10 /*AEDLM_WORD*/, lpIndex2))
SendMessage(hEditWnd, 3144 /*AEM_GETNEXTBREAK*/, 0x8 /*AEWB_RIGHTWORDEND*/, lpIndex2);
}
nOffset1 = SendMessage(hEditWnd, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpIndex1);
nOffset2 = SendMessage(hEditWnd, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpIndex2);
AkelPad.MemFree(lpIndex1);
AkelPad.MemFree(lpIndex2);
return AkelPad.GetTextRange(nOffset1, nOffset2).replace(/^\s*(AkelPad)?\.?|\s+$/g, "");
}
function GetWindowPos(hWnd, oRect)
{
var lpRect = AkelPad.MemAlloc(16); //sizeof(RECT)
if (hWnd)
oSys.Call("User32::GetWindowRect", hWnd, lpRect);
else
oSys.Call("User32::SystemParametersInfoW", 0x30 /*SPI_GETWORKAREA*/, 0, lpRect, 0);
oRect.X = AkelPad.MemRead(_PtrAdd(lpRect, 0), 3 /*DT_DWORD*/);
oRect.Y = AkelPad.MemRead(_PtrAdd(lpRect, 4), 3 /*DT_DWORD*/);
oRect.W = AkelPad.MemRead(_PtrAdd(lpRect, 8), 3 /*DT_DWORD*/) - oRect.X;
oRect.H = AkelPad.MemRead(_PtrAdd(lpRect, 12), 3 /*DT_DWORD*/) - oRect.Y;
AkelPad.MemFree(lpRect);
}
function SetForegroundWindow(hWnd)
{
if (! oSys.Call("User32::IsWindowVisible", hWnd))
oSys.Call("User32::ShowWindow", hWnd, 8 /*SW_SHOWNA*/);
if (oSys.Call("User32::IsIconic", hWnd))
oSys.Call("User32::ShowWindow", hWnd, 9 /*SW_RESTORE*/);
oSys.Call("User32::SetForegroundWindow", hWnd);
}
function SetWindowText(hWnd, sText)
{
oSys.Call("User32::SetWindowTextW", hWnd, sText);
}
function SetWindowFont(hWnd, hFont)
{
SendMessage(hWnd, 48 /*WM_SETFONT*/, hFont, true);
}
function GetSelStartAE()
{
AkelPad.SetEditWnd(aDlg[IDTEXT].HWND);
var nSelStart = AkelPad.GetSelStart();
AkelPad.SetEditWnd(0);
return nSelStart;
}
function GetSelEndAE()
{
AkelPad.SetEditWnd(aDlg[IDTEXT].HWND);
var nSelEnd = AkelPad.GetSelEnd();
AkelPad.SetEditWnd(0);
return nSelEnd;
}
function SetSelAE(nSelStart, nSelEnd)
{
AkelPad.SetEditWnd(aDlg[IDTEXT].HWND);
AkelPad.SetSel(nSelStart, nSelEnd);
AkelPad.SetEditWnd(0);
}
function GetSelTextAE()
{
AkelPad.SetEditWnd(aDlg[IDTEXT].HWND);
var sText = AkelPad.GetSelText(0);
AkelPad.SetEditWnd(0);
return sText;
}
function SetWordWrapAE()
{
SendMessage(aDlg[IDTEXT].HWND, 0x0CAA /*AEM_SETWORDWRAP*/, bWordWrap ? 1 /*AEWW_WORD*/ : 0 /*AEWW_NONE*/, 0);
}
function SetOptionsAE()
{
var hEditWnd = AkelPad.GetEditWnd();
var lpRect;
var lpAECOLORS;
var lpPOINT;
hSubClass = AkelPad.WindowSubClass(aDlg[IDTEXT].HWND, EditCallback, 515 /*WM_LBUTTONDBLCLK*/);
lpRect = AkelPad.MemAlloc(16); //sizeof(RECT)
AkelPad.MemCopy(_PtrAdd(lpRect, 0), 4, 3 /*DT_DWORD*/);
AkelPad.MemCopy(_PtrAdd(lpRect, 4), 4, 3 /*DT_DWORD*/);
AkelPad.MemCopy(_PtrAdd(lpRect, 8), 4, 3 /*DT_DWORD*/);
AkelPad.MemCopy(_PtrAdd(lpRect, 12), 4, 3 /*DT_DWORD*/);
SendMessage(aDlg[IDTEXT].HWND, 3178 /*AEM_SETRECT*/, 0x03 /*AERC_MARGINS|AERC_UPDATE*/, lpRect);
AkelPad.MemFree(lpRect);
SetWindowFont(aDlg[IDTEXT].HWND, SendMessage(hMainWnd, 1233 /*AKD_GETFONTW*/, 0, 0));
SendMessage(aDlg[IDTEXT].HWND, 3228 /*AEM_SETOPTIONS*/, 2 /*AECOOP_OR*/, 0x10000000 /*AECO_DISABLEBEEP*/);
SendMessage(aDlg[IDTEXT].HWND, 3234 /*AEM_EXSETOPTIONS*/, 2 /*AECOOP_OR*/, 0x00000001 /*AECOE_DETECTURL*/);
SetWordWrapAE();
if (hEditWnd)
{
lpAECOLORS = AkelPad.MemAlloc(17 * 4);
AkelPad.MemCopy(lpAECOLORS, 0x0001FFFE /*AECLR_ALL*/, 3 /*DT_DWORD*/);
SendMessage(hEditWnd, 3231 /*AEM_GETCOLORS*/, 0, lpAECOLORS);
SendMessage(aDlg[IDTEXT].HWND, 3232 /*AEM_SETCOLORS*/, 0, lpAECOLORS);
AkelPad.MemFree(lpAECOLORS);
if (SendMessage(hEditWnd, 3227 /*AEM_GETOPTIONS*/, 0, 0) & 0x00001000 /*AECO_ACTIVELINEBORDER*/)
SendMessage(aDlg[IDTEXT].HWND, 3228 /*AEM_SETOPTIONS*/, 2 /*AECOOP_OR*/, 0x00001000 /*AECO_ACTIVELINEBORDER*/);
lpPOINT = AkelPad.MemAlloc(8);
SendMessage(hEditWnd, 3237 /*AEM_GETCARETWIDTH*/, 0, lpPOINT);
SendMessage(aDlg[IDTEXT].HWND, 3238 /*AEM_SETCARETWIDTH*/, 0, lpPOINT);
AkelPad.MemFree(lpPOINT);
SendMessage(aDlg[IDTEXT].HWND, 3260 /*AEM_SETLINEGAP*/, SendMessage(hEditWnd, 3259 /*AEM_GETLINEGAP*/, 0, 0), 0);
}
}
function GetCurFocLV()
{
return SendMessage(aDlg[IDNAMELV].HWND, 0x100C /*LVM_GETNEXTITEM*/, -1, 0x0001 /*LVNI_FOCUSED*/);
}
function GetCurSelLV()
{
return SendMessage(aDlg[IDNAMELV].HWND, 0x100C /*LVM_GETNEXTITEM*/, -1, 0x0002 /*LVNI_SELECTED*/);
}
function SetCurSelLV(nItem)
{
AkelPad.MemCopy(_PtrAdd(lpLVITEM, 12), 0x0003 /*LVIS_SELECTED|LVIS_FOCUSED*/, 3 /*DT_DWORD*/);
AkelPad.MemCopy(_PtrAdd(lpLVITEM, 16), 0x0003 /*LVIS_SELECTED|LVIS_FOCUSED*/, 3 /*DT_DWORD*/);
SendMessage(aDlg[IDNAMELV].HWND, 0x102B /*LVM_SETITEMSTATE*/, nItem, lpLVITEM);
SendMessage(aDlg[IDNAMELV].HWND, 0x1013 /*LVM_ENSUREVISIBLE*/, nItem, false);
}
function InsertColumnLV()
{
var lpLVCOLUMN = AkelPad.MemAlloc(_X64 ? 56 : 44 /*sizeof(LVCOLUMN)*/);
AkelPad.MemCopy(lpLVCOLUMN, 6, 3 /*DT_DWORD*/); //mask=LVCF_WIDTH|LVCF_TEXT
AkelPad.MemCopy(_PtrAdd(lpLVCOLUMN, 8), Scale.X(182), 3 /*DT_DWORD*/); //cx
AkelPad.MemCopy(_PtrAdd(lpLVCOLUMN, _X64 ? 16 : 12), lpTextLV, 2 /*DT_QWORD*/); //pszText
AkelPad.MemCopy(lpTextLV, sTxtName, 1 /*DT_UNICODE*/);
SendMessage(aDlg[IDNAMELV].HWND, 0x1061 /*LVM_INSERTCOLUMNW*/, 0, lpLVCOLUMN);
AkelPad.MemCopy(_PtrAdd(lpLVCOLUMN, 8), 0, 3 /*DT_DWORD*/); //cx
AkelPad.MemCopy(lpTextLV, "AX", 1 /*DT_UNICODE*/);
SendMessage(aDlg[IDNAMELV].HWND, 0x1061 /*LVM_INSERTCOLUMNW*/, 1, lpLVCOLUMN);
SendMessage(aDlg[IDNAMELV].HWND, 0x1036 /*LVM_SETEXTENDEDLISTVIEWSTYLE*/, 0, 0x0021 /*LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES*/);
AkelPad.MemFree(lpLVCOLUMN);
}
function FillLV(nSel, sFind, bFindOnStart)
{
var oRE = GetFindNameRegExp(sFind);
var i;
SendMessage(aDlg[IDNAMELV].HWND, 0x000B /*WM_SETREDRAW*/, false, 0);
SendMessage(aDlg[IDNAMELV].HWND, 0x1009 /*LVM_DELETEALLITEMS*/, 0, 0);
for (i = 0; i < aAPM.length; ++i)
{
AkelPad.MemCopy(_PtrAdd(lpLVITEM, 4), i, 3 /*DT_DWORD*/); //iItem
AkelPad.MemCopy(_PtrAdd(lpLVITEM, 8), 0, 3 /*DT_DWORD*/); //iSubItem
AkelPad.MemCopy(lpTextLV, aAPM[i][0], 1 /*DT_UNICODE*/);
SendMessage(aDlg[IDNAMELV].HWND, 0x104D /*LVM_INSERTITEMW*/, 0, lpLVITEM);
AkelPad.MemCopy(_PtrAdd(lpLVITEM, 8), 1, 3 /*DT_DWORD*/); //iSubItem
AkelPad.MemCopy(lpTextLV, aAPM[i][3], 1 /*DT_UNICODE*/);
SendMessage(aDlg[IDNAMELV].HWND, 0x1074 /*LVM_SETITEMTEXTW*/, i, lpLVITEM);
if (sFind)
{
if ((bFindOnStart && oRE.test(aAPM[i][0])) || ((! bFindOnStart) && (aAPM[i][0] == sFind)))
{
if (bFindOnStart)
sFindName = sFind;
nSel = i;
sFind = "";
}
}
}
if (nSel >= aAPM.length)
nSel = aAPM.length - 1;
if (nSel < 0)
nSel = 0;
SetCurSelLV(nSel);
SendMessage(aDlg[IDNAMELV].HWND, 0x000B /*WM_SETREDRAW*/, true, 0);
}
function GetArrayAPM(hWnd)
{
var oFSO = new ActiveXObject("Scripting.FileSystemObject");
var sDocsDir = AkelPad.GetAkelDir(2 /*ADTYPE_DOCS*/) + "\\";
var aDocFile = ["Scripts-Eng.txt", "Scripts-Rus.txt"];
var sText;
var oRE;
var aExec;
var i;
aIsLang = [false, false];
sHeader = "";
aAPM.length = 0;
while (! (aIsLang[0] || aIsLang[1]))
{
if (sAltDir)
{
for (i = 0; i < 2; ++i)
aIsLang[i] = oFSO.FileExists(sAltDir + aDocFile[i]);
}
if (aIsLang[0] || aIsLang[1])
sDocsDir = sAltDir;
else
{
for (i = 0; i < 2; ++i)
aIsLang[i] = oFSO.FileExists(sDocsDir + aDocFile[i]);
if (! (aIsLang[0] || aIsLang[1]))
{
AkelPad.MessageBox(hWnd, sTxtNoFiles + "\n" + ((sAltDir && (sAltDir.toUpperCase() != sDocsDir.toUpperCase())) ? (sAltDir + aDocFile[0] + "\n" + sAltDir + aDocFile[1] + "\n") : "") + sDocsDir + aDocFile[0] + "\n" + sDocsDir + aDocFile[1], sTxtDlgTitle, 0x30 /*MB_ICONWARNING*/);
if (! sAltDir)
sAltDir = AkelPad.GetAkelDir(1 /*ADTYPE_AKELFILES*/) + "\\";
sAltDir = BrowseForFolder(hWnd, sTxtChooseDir, sAltDir);
if (! sAltDir)
return;
else if (sAltDir.slice(-1) != "\\")
sAltDir += "\\";
}
}
}
if (! aIsLang[nAPMLang])
nAPMLang = Number(! nAPMLang);
sText = AkelPad.ReadFile(sDocsDir + aDocFile[nAPMLang], 0, 1251 /*ANSI Cyrillic*/, 0).replace(/\r\n/g, "\n");
//aAPM["name", "text", "AkelPad." if method name, "+" if ActiveX]
//methods and constants
oRE = /^((AkelPad\.)?([\w.()]+)( \(\+ActiveX\))?\n_+\n+[\s\S]+?\n)\n*(?=[\w.() +]+\n_+)|^((AkelPad\.)?([\w.()]+)( \(\+ActiveX\))?\n_+\n+[\s\S]+?\n)\n*(?=\*{3} \S.+\S \*{3}\n)/gm
while (aExec = oRE.exec(sText))
{
if (aExec[1])
aAPM.push([aExec[3], aExec[1], aExec[2], aExec[4] ? "+" : ""]);
else if (aExec[5])
aAPM.push([aExec[7], aExec[5], aExec[6], aExec[8] ? "+" : ""]);
}
if (bAPMSort)
aAPM.sort(
function(a1, a2)
{
if (a1[0] < a2[0])
return -1;
else if (a1[0] > a2[0])
return 1;
else
return 0;
});
//Scripts-*.txt
//first char in Name must be "*"
if (aExec = /(^\*{4,}\n\*{3} +(\S.+\S) +\*{3}\n\*{4,}\n+[\s\S]+?\n)/m.exec(sText))
{
sHeader = aExec[2];
aAPM.push(["*** " + aDocFile[nAPMLang] + " ***", aExec[1], "", ""]);
}
oRE = /^((\*{3} \S.+\S \*{3})\n+[\s\S]+?\n)\n*(?=\*{3} \S.+\S \*{3}\n)|(^(\*{3} \S.+\S \*{3})\n+[\s\S]+)/gm;
while (aExec = oRE.exec(sText))
{
if (aExec[1])
aAPM.push([aExec[2].replace(/ \(.+\)/, ""), aExec[1], "", ""]);
else if (aExec[3])
aAPM.push([aExec[4].replace(/ \(.+\)/, ""), aExec[3], "", ""]);
}
}
function CheckButtons(nButton)
{
if (nButton == IDSORTB)
bAPMSort = ! bAPMSort;
else if ((nButton == IDLANG1B) || (nButton == IDLANG2B))
nAPMLang = nButton - IDLANG1B;
SendMessage(aDlg[IDSORTB ].HWND, 241 /*BM_SETCHECK*/, bAPMSort, 0);
SendMessage(aDlg[IDLANG1B].HWND, 241 /*BM_SETCHECK*/, (nAPMLang == 0), 0);
SendMessage(aDlg[IDLANG2B].HWND, 241 /*BM_SETCHECK*/, (nAPMLang == 1), 0);
oSys.Call("User32::EnableWindow", aDlg[IDLANG1B].HWND, aIsLang[0]);
oSys.Call("User32::EnableWindow", aDlg[IDLANG2B].HWND, aIsLang[1]);
}
function PaintSizeGrip()
{
var lpPaint = AkelPad.MemAlloc(_X64 ? 72 : 64); //sizeof(PAINTSTRUCT)
var lpRect = AkelPad.MemAlloc(16); //sizeof(RECT)
var hDC;
if (hDC = oSys.Call("User32::BeginPaint", hDlg, lpPaint))
{
oSys.Call("User32::GetClientRect", hDlg, lpRect);
AkelPad.MemCopy(_PtrAdd(lpRect, 0), AkelPad.MemRead(_PtrAdd(lpRect, 8), 3 /*DT_DWORD*/) - oSys.Call("User32::GetSystemMetrics", 2 /*SM_CXVSCROLL*/), 3 /*DT_DWORD*/);
AkelPad.MemCopy(_PtrAdd(lpRect, 4), AkelPad.MemRead(_PtrAdd(lpRect, 12), 3 /*DT_DWORD*/) - oSys.Call("User32::GetSystemMetrics", 20 /*SM_CYVSCROLL*/), 3 /*DT_DWORD*/);
oSys.Call("User32::DrawFrameControl", hDC, lpRect, 3 /*DFC_SCROLL*/, 0x8 /*DFCS_SCROLLSIZEGRIP*/);
oSys.Call("User32::EndPaint", hDlg, lpPaint);
}
AkelPad.MemFree(lpPaint);
AkelPad.MemFree(lpRect);
}
function ResizeDlg(nW, nH)
{
var nFlags = 0x14; //SWP_NOACTIVATE|SWP_NOZORDER
var nGapW = Scale.X(10);
var nGapH = Scale.Y(10);
var nLVW = Scale.X(230);
var nAEW = nW - nLVW - 3 * nGapW;
var i;
oSys.Call("User32::SetWindowPos",
aDlg[IDHEADERS].HWND, 0,
nW - nAEW - nGapW,
nGapH,
nAEW,
Scale.Y(13),
nFlags);
oSys.Call("User32::SetWindowPos",
aDlg[IDNAMELV].HWND, 0,
nGapW,
nGapH,
nLVW,
nH - 3 * nGapH - Scale.Y(23) - Scale.Y(25) - Scale.Y(20),
nFlags);
oSys.Call("User32::SetWindowPos",
aDlg[IDTEXT].HWND, 0,
nW - nAEW - nGapW,
3 * nGapH,
nAEW,
nH - 4 * nGapH,
nFlags);
oSys.Call("User32::SetWindowPos",
aDlg[IDSORTB].HWND, 0,
nGapW,
nH - nGapH - Scale.Y(23) - Scale.Y(25) - Scale.Y(20),
Scale.X(80),
Scale.Y(16),
nFlags);
for (i = IDLANG1B; i <= IDLANG2B; ++i)
{
oSys.Call("User32::SetWindowPos",
aDlg[i].HWND, 0,
Scale.X(160),
nH - nGapH - Scale.Y(23) - Scale.Y(25) - (IDLANG2B - i) * Scale.Y(20),
Scale.X(80),
Scale.Y(16),
nFlags);
}
for (i = IDMENUB; i <= IDCLOSEB; ++i)
{
oSys.Call("User32::SetWindowPos",
aDlg[i].HWND, 0,
nGapW + Scale.X((i - IDMENUB) * 80),
nH - nGapH - Scale.Y(23),
Scale.X(70),
Scale.Y(23),
nFlags);
}
SendMessage(aDlg[IDNAMELV].HWND, 0x101E /*LVM_SETCOLUMNWIDTH*/, 1, -2 /*LVSCW_AUTOSIZE_USEHEADER*/);
SendMessage(aDlg[IDNAMELV].HWND, 0x1013 /*LVM_ENSUREVISIBLE*/, GetCurSelLV(), false);
oSys.Call("user32::InvalidateRect", hDlg, 0, true);
}
function FindName(nDirection)
{
InputBox(aDlg[IDNAMELV].HWND, sTxtFindName, [sTxtDownFromBeg, sTxtDownFromCur, sTxtUpFromEnd, sTxtUpFromCur][nDirection] + "\n\n" + sTxtName + ":", sFindName, 0, CheckFindName, nDirection, 0, (bMatchCase ? sTxtMatchCase : sTxtIgnoreCase));
}
function CheckFindName(hWnd, aName, nDirection)
{
if (aName[0])
{
sFindName = aName[0];
if (! FindNameNext(nDirection))
{
AkelPad.MessageBox(hWnd, sTxtNotFound, sTxtDlgTitle, 0x30 /*MB_ICONWARNING*/);
return 0;
}
}
else
return 0;
return -1;
}
function FindNameNext(nDirection)
{
var bFound = false;
if (sFindName)
{
var oRE = GetFindNameRegExp(sFindName);
var nStart;
var i;
if (nDirection < 2)
{
if (nDirection == 0)
nStart = 0;
else
nStart = GetCurSelLV() + 1;
for (i = nStart; i < aAPM.length; ++i)
{
if (oRE.test(aAPM[i][0]))
{
SetCurSelLV(i);
bFound = true;
break;
}
}
}
else
{
if (nDirection == 2)
nStart = aAPM.length - 1;
else
nStart = GetCurSelLV() - 1;
for (i = nStart; i >= 0; --i)
{
if (oRE.test(aAPM[i][0]))
{
SetCurSelLV(i);
bFound = true;
break;
}
}
}
}
return bFound;
}
function GetFindNameRegExp(sText)
{
return new RegExp(sText.replace(/[\\\/.^$+*?|()\[\]{}]/g, "\\$&"), (bMatchCase ? "" : "i"));
}
function FindText(nDirection)
{
var sText = GetSelTextAE();
if (! sText)
sText = sFindText;
InputBox(aDlg[IDTEXT].HWND, sTxtFindText, [sTxtDownFromBeg, sTxtDownFromCur, sTxtUpFromEnd, sTxtUpFromCur][nDirection] + "\n\n" + sTxtText + ":", sText, 0, CheckFindText, nDirection, 0, (bMatchCase ? sTxtMatchCase : sTxtIgnoreCase));
}
function CheckFindText(hWnd, aText, nDirection)
{
if (aText[0])
{
sFindText = aText[0];
if (! FindTextNext(nDirection))
{
AkelPad.MessageBox(hWnd, sTxtNotFound, sTxtDlgTitle, 0x30 /*MB_ICONWARNING*/);
return 0;
}
}
else
return 0;
return -1;
}
function FindTextNext(nDirection)
{
var bFound = false;
var nNameStart;
var nTextStart;
var nSel;
var i;
if (nDirection < 2)
{
if (nDirection == 0)
{
nNameStart = 0;
nTextStart = 0;
}
else
{
nNameStart = GetCurSelLV();
nTextStart = GetSelEndAE();
}
for (i = nNameStart; i < aAPM.length; ++i)
{
if (bMatchCase)
nSel = aAPM[i][1].indexOf(sFindText, (i == nNameStart) ? nTextStart : 0);
else
nSel = aAPM[i][1].toUpperCase().indexOf(sFindText.toUpperCase(), (i == nNameStart) ? nTextStart : 0);
if (nSel > -1)
{
SetCurSelLV(i);
SetSelAE(nSel, nSel + sFindText.length);
bFound = true;
break;
}
}
}
else
{
if (nDirection == 2)
{
nNameStart = aAPM.length - 1;
nTextStart = aAPM[nNameStart][1].length;
}
else
{
nNameStart = GetCurSelLV();
nTextStart = GetSelStartAE() - sFindText.length;
if ((nTextStart < 0) && (--nNameStart >= 0))
nTextStart = aAPM[nNameStart][1].length;
}
for (i = nNameStart; i >= 0; --i)
{
if (bMatchCase)
nSel = aAPM[i][1].lastIndexOf(sFindText, (i == nNameStart) ? nTextStart : aAPM[i][1].length);
else
nSel = aAPM[i][1].toUpperCase().lastIndexOf(sFindText.toUpperCase(), (i == nNameStart) ? nTextStart : aAPM[i][1].length);
if (nSel > -1)
{
SetCurSelLV(i);
SetSelAE(nSel, nSel + sFindText.length);
bFound = true;
break;
}
}
}
return bFound;
}
function CopytNameToCB()
{
if ((nAPMSel >= 0) && (aAPM[nAPMSel][0].charAt(0) != "*"))
AkelPad.SetClipboardText(aAPM[nAPMSel][2] + aAPM[nAPMSel][0] + (aAPM[nAPMSel][2] ? "()" : ""));
}
function InsertNameToAP()
{
if ((nAPMSel >= 0) && (aAPM[nAPMSel][0].charAt(0) != "*") && AkelPad.GetEditWnd() && (! AkelPad.GetEditReadOnly(0)))
{
if (aAPM[nAPMSel][2])
{
var sSelText = AkelPad.GetSelText(0);
AkelPad.ReplaceSel(aAPM[nAPMSel][2] + aAPM[nAPMSel][0] + "(" + sSelText + ")");
AkelPad.SetSel(AkelPad.GetSelEnd() - sSelText.length - 1, AkelPad.GetSelEnd() - 1);
}
else
AkelPad.ReplaceSel(aAPM[nAPMSel][0], -1 /*RST_SELECT*/);
}
}
function CopyListToCB()
{
var sText = "";
var i;
for (i = 0; i < aAPM.length; ++i)
{
if (aAPM[i][0].charAt(0) != "*")
sText += aAPM[i][2] + aAPM[i][0] + "\r\n";
}
AkelPad.SetClipboardText(sText);
}
function InsertTextTo(bClipboard)
{
var sText = GetSelTextAE();
if (sText)
{
if (bClipboard)
AkelPad.SetClipboardText(sText);
else
AkelPad.ReplaceSel(sText, -1 /*RST_SELECT*/);
}
}
function MenuMain()
{
var MF_STRING = 0x0000;
var MF_CHECKED = 0x0008;
var MF_POPUP = 0x0010;
var MF_SEPARATOR = 0x0800;
var hMenu1 = oSys.Call("User32::CreatePopupMenu");
var hMenu2 = oSys.Call("User32::CreatePopupMenu");
var hMenu = oSys.Call("User32::CreatePopupMenu");
var aMenu = [hMenu1, hMenu2];
var oRect = {};
var nCmd;
var nCmd1;
var i;
for (i = 1; i <= 2; ++i)
{
oSys.Call("User32::AppendMenuW", aMenu[i - 1], MF_STRING, 0x0000 | i, sTxtDownFromBeg + "\tCtrl+F");
oSys.Call("User32::AppendMenuW", aMenu[i - 1], MF_STRING, 0x0200 | i, sTxtUpFromEnd + "\tCtrl+Shift+F");
oSys.Call("user32::AppendMenuW", aMenu[i - 1], MF_SEPARATOR, 0);
oSys.Call("User32::AppendMenuW", aMenu[i - 1], MF_STRING, 0x0100 | i, sTxtDownFromCur + "\tAlt+F");
oSys.Call("User32::AppendMenuW", aMenu[i - 1], MF_STRING, 0x0300 | i, sTxtUpFromCur + "\tShift+Alt+F");
oSys.Call("user32::AppendMenuW", aMenu[i - 1], MF_SEPARATOR, 0);
oSys.Call("User32::AppendMenuW", aMenu[i - 1], MF_STRING, 0x0400 | i, sTxtNext + "\tF3");
oSys.Call("User32::AppendMenuW", aMenu[i - 1], MF_STRING, 0x0500 | i, sTxtPrevious + "\tShift+F3");
}
oSys.Call("User32::AppendMenuW", hMenu, MF_POPUP, hMenu1, sTxtFindName);
oSys.Call("User32::AppendMenuW", hMenu, MF_POPUP, hMenu2, sTxtFindText);
oSys.Call("user32::AppendMenuW", hMenu, MF_SEPARATOR, 0);
oSys.Call("User32::AppendMenuW", hMenu, (bMatchCase ? MF_CHECKED : MF_STRING), 0x0003, sTxtFindCase);
oSys.Call("User32::AppendMenuW", hMenu, (bWordWrap ? MF_CHECKED : MF_STRING), 0x0004, sTxtWrapLines + "\tCtrl+U");
oSys.Call("User32::AppendMenuW", hMenu, (bSeparateWnd ? MF_CHECKED : MF_STRING), 0x0005, sTxtSeparateWnd);
GetWindowPos(aDlg[IDMENUB].HWND, oRect);
nCmd = oSys.Call("User32::TrackPopupMenu", hMenu, 0x01A0 /*TPM_NONOTIFY|TPM_RETURNCMD|TPM_BOTTOMALIGN*/, oRect.X, oRect.Y, 0, hDlg, 0);
oSys.Call("User32::DestroyMenu", hMenu1);
oSys.Call("User32::DestroyMenu", hMenu2);
oSys.Call("User32::DestroyMenu", hMenu);
nCmd1 = (nCmd >> 8) & 0xFF;
nCmd = nCmd & 0xFF;
if (nCmd == 1)
{
oSys.Call("User32::SetFocus", aDlg[IDNAMELV].HWND);
if (nCmd1 < 4)
FindName(nCmd1);
else if (nCmd1 == 4)
FindNameNext(1);
else if (nCmd1 == 5)
FindNameNext(3);
}
else if (nCmd == 2)
{
oSys.Call("User32::SetFocus", aDlg[IDTEXT].HWND);
if (nCmd1 < 4)
FindText(nCmd1);
else if (nCmd1 == 4)
FindTextNext(1);
else if (nCmd1 == 5)
FindTextNext(3);
}
else if (nCmd == 3)
bMatchCase = ! bMatchCase;
else if (nCmd == 4)
{
bWordWrap = ! bWordWrap;
SetWordWrapAE();
}
else if (nCmd == 5)
{
bSeparateWnd = ! bSeparateWnd;
bCloseDlg = false;
PostMessage(hDlg, 16 /*WM_CLOSE*/, 0, 0);
}
}
function MenuName(nX, nY)
{
var MF_STRING = 0x0000;
var MF_SEPARATOR = 0x0800;
var lpRect;
var nX1, nY1, nY2;
var hMenu;
var nCmd;
if ((nAPMSel < 0) || (aAPM[nAPMSel][0].charAt(0) == "*"))
return;
//menu from keyboard
if (nX == 0xFFFF)
SendMessage(aDlg[IDNAMELV].HWND, 0x1013 /*LVM_ENSUREVISIBLE*/, nAPMSel, false);
lpRect = AkelPad.MemAlloc(16 /*sizeof(RECT)*/);
SendMessage(aDlg[IDNAMELV].HWND, 0x100E /*LVM_GETITEMRECT*/, nAPMSel, lpRect);
oSys.Call("User32::ClientToScreen", aDlg[IDNAMELV].HWND, lpRect);
oSys.Call("User32::ClientToScreen", aDlg[IDNAMELV].HWND, _PtrAdd(lpRect, 8));
nX1 = AkelPad.MemRead(_PtrAdd(lpRect, 0), 3 /*DT_DWORD*/);
nY1 = AkelPad.MemRead(_PtrAdd(lpRect, 4), 3 /*DT_DWORD*/);
nY2 = AkelPad.MemRead(_PtrAdd(lpRect, 12), 3 /*DT_DWORD*/);
AkelPad.MemFree(lpRect);
if (nX == 0xFFFF)
{
nX = nX1;
nY = nY2;
}
else if ((nY < nY1) || (nY > nY2))
return;
hMenu = oSys.Call("User32::CreatePopupMenu");
oSys.Call("User32::AppendMenuW", hMenu, MF_STRING, 1, sTxtCopyToCB + "\tCtrl+C");
oSys.Call("User32::AppendMenuW", hMenu, AkelPad.GetEditWnd() && (! AkelPad.GetEditReadOnly(0)) ? MF_STRING : 0x01 /*MF_GRAYED*/, 2, sTxtInsertToAP + "\tCtrl+Shift+C");
oSys.Call("user32::AppendMenuW", hMenu, MF_SEPARATOR, 0);
oSys.Call("User32::AppendMenuW", hMenu, MF_STRING, 3, sTxtCopyListToCB);
nCmd = oSys.Call("User32::TrackPopupMenu", hMenu, 0x0180 /*TPM_NONOTIFY|TPM_RETURNCMD*/, nX, nY, 0, hDlg, 0);
oSys.Call("User32::DestroyMenu", hMenu);
if (nCmd == 1)
CopytNameToCB();
else if (nCmd == 2)
InsertNameToAP();
else if (nCmd == 3)
CopyListToCB();
}
function MenuText(nX, nY)
{
var bSel = SendMessage(aDlg[IDTEXT].HWND, 3125 /*AEM_GETSEL*/, 0, 0);
var hMenu = oSys.Call("User32::CreatePopupMenu");
var lpPoint;
var nCmd;
//menu from keyboard
if (nX == 0xFFFF)
{
lpPoint = AkelPad.MemAlloc(8 /*sizeof(POINT)*/);
oSys.Call("User32::GetCaretPos", lpPoint);
oSys.Call("User32::ClientToScreen", aDlg[IDTEXT].HWND, lpPoint);
nX = AkelPad.MemRead(_PtrAdd(lpPoint, 0), 3 /*DT_DWORD*/);
nY = AkelPad.MemRead(_PtrAdd(lpPoint, 4), 3 /*DT_DWORD*/) + SendMessage(aDlg[IDTEXT].HWND, 3188 /*AEM_GETCHARSIZE*/, 0 /*AECS_HEIGHT*/, 0);
AkelPad.MemFree(lpPoint);
}
oSys.Call("User32::AppendMenuW", hMenu, bSel ? 0 /*MF_STRING*/ : 0x01 /*MF_GRAYED*/, 1, sTxtCopyToCB + "\tCtrl+C");
oSys.Call("User32::AppendMenuW", hMenu, AkelPad.GetEditWnd() && (! AkelPad.GetEditReadOnly(0)) && bSel ? 0 /*MF_STRING*/ : 0x01 /*MF_GRAYED*/, 2, sTxtInsertToAP + "\tCtrl+Shift+C");
oSys.Call("user32::AppendMenuW", hMenu, 0x0800 /*MF_SEPARATOR*/, 0);
oSys.Call("User32::AppendMenuW", hMenu, 0 /*MF_STRING*/, 3, sTxtSelectAll + "\tCtrl+A");
nCmd = oSys.Call("User32::TrackPopupMenu", hMenu, 0x0180 /*TPM_NONOTIFY|TPM_RETURNCMD*/, nX, nY, 0, hDlg, 0);
oSys.Call("User32::DestroyMenu", hMenu);
if (nCmd == 1)
InsertTextTo(true);
else if (nCmd == 2)
InsertTextTo(false);
else if (nCmd == 3)
SetSelAE(0, -1);
}
function ReadIni()
{
try
{
eval(AkelPad.ReadFile(WScript.ScriptFullName.replace(/\.js$/i, ".ini"), 0x10 /*OD_ADT_NOMESSAGES*/, 1200 /*UTF-16LE*/, true));
}
catch (oError)
{}
oDlgPos.W = Math.max(Scale.X(oDlgPos.W), nDlgMinW);
oDlgPos.H = Math.max(Scale.Y(oDlgPos.H), nDlgMinH);
hWndParent = bSeparateWnd ? 0 : hMainWnd;
}
function WriteIni()
{
var sIniTxt = "";
var i;
oDlgPos.W = Scale.UX(oDlgPos.W);
oDlgPos.H = Scale.UY(oDlgPos.H);
oDlgPos.Max = oSys.Call("User32::IsZoomed", hDlg);
for (i in oDlgPos)
sIniTxt += 'oDlgPos.' + i + '=' + oDlgPos[i] + ';\r\n';
sIniTxt +=
'bSeparateWnd=' + bSeparateWnd + ';\r\n' +
'nAPMSel=' + nAPMSel + ';\r\n' +
'bAPMSort=' + bAPMSort + ';\r\n' +
'nAPMLang=' + nAPMLang + ';\r\n' +
'bMatchCase=' + bMatchCase + ';\r\n' +
'bWordWrap=' + bWordWrap + ';\r\n' +
'sFindName="' + EscapeStr(sFindName) + '";\r\n' +
'sFindText="' + EscapeStr(sFindText) + '";\r\n' +
'sAltDir="' + EscapeStr(sAltDir) + '";\r\n' +
'aAESel[0]={';
for (i in aAESel[0])
sIniTxt += '"' + i + '":[' + aAESel[0][i] + '],';
if (sIniTxt.slice(-1) == ',')
sIniTxt = sIniTxt.slice(0, -1);
sIniTxt += '};\r\naAESel[1]={';
for (i in aAESel[1])
sIniTxt += '"' + i + '":[' + aAESel[1][i] + '],';
if (sIniTxt.slice(-1) == ',')
sIniTxt = sIniTxt.slice(0, -1);
sIniTxt += '};';
AkelPad.WriteFile(WScript.ScriptFullName.replace(/\.js$/i, ".ini"), sIniTxt, sIniTxt.length, 1200 /*UTF-16LE*/, true);
}
function EscapeStr(sText)
{
return sText.replace(/[\\"]/g, '\\$&').replace(/\n/g, '\\n').replace(/\r/g, '\\r');
}
function GetLangStrings()
{
if (AkelPad.GetLangId(0 /*LANGID_FULL*/) == 1049 /*Russian*/)
{
//translated by Andrey_A_A and Kley
sTxtDlgTitle = "Просмотр методов скриптинга AkelPad";
sTxtNoFiles = "Нет файлов:";
sTxtChooseDir = "Выберите папку с документацией для Scripts плагина:";
sTxtSort = "&Сортировать";
sTxtEnglish = "&Английский";
sTxtRussian = "&Русский";
sTxtMenu = "&Меню";
sTxtOK = "OK";
sTxtClose = "Закрыть";
sTxtName = "Имя";
sTxtText = "Текст";
sTxtFindName = "Поиск имени";
sTxtFindText = "Поиск текста";
sTxtDownFromBeg = "С начала";
sTxtDownFromCur = "Вниз";
sTxtUpFromEnd = "Снизу";
sTxtUpFromCur = "Вверх";
sTxtNext = "Следующий";
sTxtPrevious = "Предыдущий";
sTxtMatchCase = "С учётом регистра";
sTxtIgnoreCase = "Без учёта регистра";
sTxtNotFound = "Не найдено.";
sTxtFindCase = "Поиск с учетом регистра";
sTxtWrapLines = "Перенос по словам";
sTxtSeparateWnd = "Запускать в отдельном окне";
sTxtCopyToCB = "Копировать";
sTxtInsertToAP = "Вставить в AkelPad";
sTxtSelectAll = "Выделить всё";
sTxtCopyListToCB = "Копировать список";
}
else
{
sTxtDlgTitle = "AkelPad methods view";
sTxtNoFiles = "Files not found:";
sTxtChooseDir = "Choose directory with documentation of Scripts plugin:";
sTxtSort = "&Sort methods";
sTxtEnglish = "&English";
sTxtRussian = "&Russian";
sTxtMenu = "&Menu";
sTxtOK = "OK";
sTxtClose = "Close";
sTxtName = "Name";
sTxtText = "Text";
sTxtFindName = "Find name";
sTxtFindText = "Find text";
sTxtDownFromBeg = "Down from beginning";
sTxtDownFromCur = "Down from current position";
sTxtUpFromEnd = "Up from end";
sTxtUpFromCur = "Up from current position";
sTxtNext = "Next";
sTxtPrevious = "Previous";
sTxtMatchCase = "Match case";
sTxtIgnoreCase = "Ignore case";
sTxtNotFound = "Not found.";
sTxtFindCase = "Find - match case";
sTxtWrapLines = "Wrap lines";
sTxtSeparateWnd = "Run in separate window";
sTxtCopyToCB = "Copy to clipboard";
sTxtInsertToAP = "Insert to AkelPad";
sTxtSelectAll = "Select all";
sTxtCopyListToCB = "Copy list to clipboard";
}
}
|
Last edited by KDJ on Sat Feb 06, 2016 4:10 pm; edited 30 times in total |
|
Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1929 Location: Poland
|
Posted: Sat Jul 27, 2013 11:45 am Post subject: |
|
|
Bitwise calculator.
CalculatorBin.js
Code: | // http://akelpad.sourceforge.net/forum/viewtopic.php?p=22406#22406
// Version: 2016-08-05
// Author: KDJ
//
// *** Bitwise calculator ***
//
// Run in AkelPad window:
// Call("Scripts::Main", 1, "CalculatorBin.js")
// Run from command line (required registration: regsvr32.exe Scripts.dll):
// wscript.exe CalculatorBin.js
//
// Hotkeys:
// Alt+(F1,F2,F3) - set focus to binA, hexA, decA
// Alt+(1,2,3) - set focus to binB, hexB, decB
// Ctrl+Alt+(arrows,PgUp,PgDn,Home,End) - move window
if (typeof AkelPad == "undefined")
{
try
{
AkelPad = new ActiveXObject("AkelPad.Document");
_PtrAdd = function(n1, n2) {return AkelPad.Global._PtrAdd(n1, n2);};
_X64 = AkelPad.Constants._X64;
}
catch (oError)
{
WScript.Echo("You need register Scripts.dll");
WScript.Quit();
}
}
var oSys = AkelPad.SystemFunction();
var hInstDLL = AkelPad.GetInstanceDll();
var sClassName = "AkelPad::Scripts::" + WScript.ScriptName + "::" + hInstDLL;
var hDlg;
if (hDlg = oSys.Call("User32::FindWindowExW", 0, 0, sClassName, 0))
{
if (! oSys.Call("User32::IsWindowVisible", hDlg))
oSys.Call("User32::ShowWindow", hDlg, 8 /*SW_SHOWNA*/);
if (oSys.Call("User32::IsIconic", hDlg))
oSys.Call("User32::ShowWindow", hDlg, 9 /*SW_RESTORE*/);
oSys.Call("User32::SetForegroundWindow", hDlg);
}
else
{
var hIcon = oSys.Call("User32::LoadImageW",
hInstDLL, //hinst
101, //lpszName
1, //uType=IMAGE_ICON
0, //cxDesired
0, //cyDesired
0x00000040);//fuLoad=LR_DEFAULTSIZE
var hMainWnd = AkelPad.GetMainWnd();
var oFSO = new ActiveXObject("Scripting.FileSystemObject");
var aOper = [["|", "OR"], ["&", "AND"], ["^", "XOR"], ["<<", "LShift"], [">>", "RShift"], [">>>", "URShift"], ["none", ""]];
var nTextLen = 65;
var lpText = AkelPad.MemAlloc(nTextLen * 2);
var hBitmap = CreateCaretBitmap();
var hFocus;
var hSubClass;
var bCloseCB;
//.ini settings
var nDlgX = 100;
var nDlgY = 120;
var bOverType = true;
var bSigned = true;
var nBits = 32;
var nOper = 0;
var bNotA = false;
var bNotB = false;
var sDecA = "0";
var sDecB = "0";
ReadIni();
var aDlg = [];
var IDNOT = 1000;
var IDHEX = 1001;
var IDDEC = 1002;
var IDBIN = 1003;
var IDNOTA = 1004;
var IDBINA = 1005;
var IDHEXA = 1006;
var IDDECA = 1007;
var IDOPER = 1008;
var IDOPERS = 1009;
var IDOPERNAME = 1010;
var IDNOTB = 1011;
var IDBINB = 1012;
var IDHEXB = 1013;
var IDDECB = 1014;
var IDRESULT = 1015;
var IDBINR = 1016;
var IDHEXR = 1017;
var IDDECR = 1018;
var IDBITS = 1019;
var IDSIGNED = 1020;
var IDBYTES = 1021;
var IDQWORD = 1022;
var IDDWORD = 1023;
var IDWORD = 1024;
var IDBYTE = 1025;
var IDCLEAR = 1026;
var IDCLOSE = 1027;
//0x50000000 - WS_VISIBLE|WS_CHILD
//0x50000002 - WS_VISIBLE|WS_CHILD|SS_RIGHT
//0x50000007 - WS_VISIBLE|WS_CHILD|BS_GROUPBOX
//0x50010003 - WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_AUTOCHECKBOX
//0x50010003 - WS_VISIBLE|WS_CHILD|WS_TABSTOP|CBS_DROPDOWNLIST
//0x50010009 = WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_AUTORADIOBUTTON
//0x5081000A - WS_VISIBLE|WS_CHILD|WS_BORDER|WS_TABSTOP|ES_UPPERCASE|ES_RIGHT
//0x50810802 - WS_VISIBLE|WS_CHILD|WS_BORDER|WS_TABSTOP|ES_READONLY|ES_RIGHT
aDlg[IDNOT] = {Class: 'STATIC', Style: 0x50000000, X: 10, Y: 14, W: 25, H: 13, Txt: 'NOT'};
aDlg[IDBIN] = {Class: 'STATIC', Style: 0x50000002, X: 40, Y: 14, W: 387, H: 13, Txt: 'bin'};
aDlg[IDHEX] = {Class: 'STATIC', Style: 0x50000002, X: 435, Y: 14, W: 132, H: 13, Txt: 'hex'};
aDlg[IDDEC] = {Class: 'STATIC', Style: 0x50000002, X: 575, Y: 14, W: 127, H: 13, Txt: 'dec'};
aDlg[IDNOTA] = {Class: 'BUTTON', Style: 0x50010003, X: 10, Y: 30, W: 25, H: 16, Txt: '~'};
aDlg[IDBINA] = {Class: 'EDIT', Style: 0x5081000A, X: 40, Y: 30, W: 390, H: 19, Txt: ''};
aDlg[IDHEXA] = {Class: 'EDIT', Style: 0x5081000A, X: 435, Y: 30, W: 135, H: 19, Txt: ''};
aDlg[IDDECA] = {Class: 'EDIT', Style: 0x5081000A, X: 575, Y: 30, W: 130, H: 19, Txt: ''};
aDlg[IDOPER] = {Class: 'STATIC', Style: 0x50000000, X: 715, Y: 25, W: 50, H: 13, Txt: '&Operator:'};
aDlg[IDOPERS] = {Class: 'COMBOBOX', Style: 0x50010003, X: 715, Y: 41, W: 50, H: 130, Txt: ''};
aDlg[IDOPERNAME] = {Class: 'STATIC', Style: 0x50000000, X: 715, Y: 65, W: 50, H: 13, Txt: ''};
aDlg[IDNOTB] = {Class: 'BUTTON', Style: 0x50010003, X: 10, Y: 53, W: 25, H: 16, Txt: '~'};
aDlg[IDBINB] = {Class: 'EDIT', Style: 0x5081000A, X: 40, Y: 53, W: 390, H: 19, Txt: ''};
aDlg[IDHEXB] = {Class: 'EDIT', Style: 0x5081000A, X: 435, Y: 53, W: 135, H: 19, Txt: ''};
aDlg[IDDECB] = {Class: 'EDIT', Style: 0x5081000A, X: 575, Y: 53, W: 130, H: 19, Txt: ''};
aDlg[IDRESULT] = {Class: 'STATIC', Style: 0x50000000, X: 30, Y: 76, W: 55, H: 16, Txt: '='};
aDlg[IDBINR] = {Class: 'EDIT', Style: 0x50810802, X: 40, Y: 76, W: 390, H: 19, Txt: ''};
aDlg[IDHEXR] = {Class: 'EDIT', Style: 0x50810802, X: 435, Y: 76, W: 135, H: 19, Txt: ''};
aDlg[IDDECR] = {Class: 'EDIT', Style: 0x50810802, X: 575, Y: 76, W: 130, H: 19, Txt: ''};
aDlg[IDBITS] = {Class: 'STATIC', Style: 0x50000002, X: 40, Y: 98, W: 387, H: 13, Txt: ''};
aDlg[IDSIGNED] = {Class: 'BUTTON', Style: 0x50010003, X: 40, Y: 130, W: 50, H: 16, Txt: '&Signed'};
aDlg[IDBYTES] = {Class: 'BUTTON', Style: 0x50000007, X: 100, Y: 117, W: 230, H: 35, Txt: ''};
aDlg[IDQWORD] = {Class: 'BUTTON', Style: 0x50010009, X: 110, Y: 130, W: 50, H: 16, Txt: '&Qword'};
aDlg[IDDWORD] = {Class: 'BUTTON', Style: 0x50010009, X: 170, Y: 130, W: 50, H: 16, Txt: '&Dword'};
aDlg[IDWORD] = {Class: 'BUTTON', Style: 0x50010009, X: 230, Y: 130, W: 50, H: 16, Txt: '&Word'};
aDlg[IDBYTE] = {Class: 'BUTTON', Style: 0x50010009, X: 285, Y: 130, W: 40, H: 16, Txt: '&Byte'};
aDlg[IDCLEAR] = {Class: 'BUTTON', Style: 0x50010000, X: 620, Y: 130, W: 70, H: 23, Txt: '&Clear'};
aDlg[IDCLOSE] = {Class: 'BUTTON', Style: 0x50010000, X: 695, Y: 130, W: 70, H: 23, Txt: 'Close'};
AkelPad.ScriptNoMutex(0x11 /*ULT_LOCKSENDMESSAGE|ULT_UNLOCKSCRIPTSQUEUE*/);
AkelPad.WindowRegisterClass(sClassName);
hDlg = oSys.Call("User32::CreateWindowExW",
0, //dwExStyle
sClassName, //lpClassName
"CalculatorBin",//lpWindowName
0x90CA0000, //WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX
nDlgX, //x
nDlgY, //y
781, //nWidth
194, //nHeight
hMainWnd, //hWndParent
0, //ID
hInstDLL, //hInstance
DialogCallback);//Script function callback. To use it class must be registered by WindowRegisterClass.
AkelPad.WindowGetMessage();
AkelPad.WindowUnregisterClass(sClassName);
AkelPad.MemFree(lpText);
oSys.Call("User32::DestroyIcon", hIcon);
oSys.Call("Gdi32::DeleteObject", hBitmap);
}
function DialogCallback(hWnd, uMsg, wParam, lParam)
{
if (uMsg == 1) //WM_CREATE
{
var hGuiFont = oSys.Call("Gdi32::GetStockObject", 17 /*DEFAULT_GUI_FONT*/);
var i;
for (i = 1000; i < aDlg.length; ++i)
{
aDlg[i].Handle = oSys.Call("User32::CreateWindowExW",
0, //dwExStyle
aDlg[i].Class,//lpClassName
aDlg[i].Txt, //lpWindowName
aDlg[i].Style,//dwStyle
aDlg[i].X, //x
aDlg[i].Y, //y
aDlg[i].W, //nWidth
aDlg[i].H, //nHeight
hWnd, //hWndParent
i, //ID
hInstDLL, //hInstance
0); //lpParam
AkelPad.SendMessage(aDlg[i].Handle, 48 /*WM_SETFONT*/, hGuiFont, true);
}
AkelPad.SendMessage(hWnd, 0x0080 /*WM_SETICON*/, 0 /*ICON_SMALL*/, hIcon);
AkelPad.SendMessage(hWnd, 0x0080 /*WM_SETICON*/, 1 /*ICON_BIG*/, hIcon);
AkelPad.SendMessage(aDlg[IDSIGNED].Handle, 0x00F1 /*BM_SETCHECK*/, bSigned, 0);
AkelPad.SendMessage(aDlg[IDQWORD].Handle, 0x00F1 /*BM_SETCHECK*/, (nBits == 64), 0);
AkelPad.SendMessage(aDlg[IDDWORD].Handle, 0x00F1 /*BM_SETCHECK*/, (nBits == 32), 0);
AkelPad.SendMessage(aDlg[IDWORD].Handle, 0x00F1 /*BM_SETCHECK*/, (nBits == 16), 0);
AkelPad.SendMessage(aDlg[IDBYTE].Handle, 0x00F1 /*BM_SETCHECK*/, (nBits == 8), 0);
AkelPad.SendMessage(aDlg[IDNOTA].Handle, 0x00F1 /*BM_SETCHECK*/, bNotA, 0);
AkelPad.SendMessage(aDlg[IDNOTB].Handle, 0x00F1 /*BM_SETCHECK*/, bNotB, 0);
for (i = 0; i < aOper.length; ++i)
oSys.Call("User32::SendMessageW", aDlg[IDOPERS].Handle, 0x143 /*CB_ADDSTRING*/, 0, aOper[i][0]);
AkelPad.SendMessage(aDlg[IDOPERS].Handle, 0x14E /*CB_SETCURSEL*/, nOper, 0);
ShowOperator();
SetBytes();
oSys.Call("User32::SetWindowTextW", aDlg[IDDECA].Handle, sDecA);
oSys.Call("User32::SetWindowTextW", aDlg[IDDECB].Handle, sDecB);
SetValuesFromID(IDDECA);
SetValuesFromID(IDDECB);
Calculate();
hFocus = aDlg[IDBINA].Handle;
}
else if ((uMsg == 6 /*WM_ACTIVATE*/) && (! wParam))
hFocus = oSys.Call("User32::GetFocus");
else if (uMsg == 7) //WM_SETFOCUS
oSys.Call("User32::SetFocus", hFocus);
else if (uMsg == 256) //WM_KEYDOWN
{
if ((wParam >= 0x21 /*VK_PRIOR*/) && (wParam <= 0x28 /*VK_DOWN*/) && Ctrl() && !Shift() && Alt())
MoveWindow(hWnd, wParam);
else if ((wParam == 27 /*VK_ESCAPE*/) && (bCloseCB))
oSys.Call("User32::PostMessageW", hWnd, 16 /*WM_CLOSE*/, 0, 0);
}
else if (uMsg == 260) //WM_SYSKEYDOWN
{
if ((wParam >= 0x70 /*VK_F1*/) && (wParam <= 0x72 /*VK_F3*/))
oSys.Call("User32::SetFocus", aDlg[IDBINA + wParam - 0x70].Handle);
else if ((wParam >= 0x31 /*1 key*/) && (wParam <= 0x33 /*3 key*/))
oSys.Call("User32::SetFocus", aDlg[IDBINB + wParam - 0x31].Handle);
}
else if (uMsg == 273) //WM_COMMAND
{
var nLowParam = LoWord(wParam);
var nHiwParam = HiWord(wParam);
bCloseCB = true;
if ((nLowParam >= IDBINA) && (nLowParam <= IDDECA) || (nLowParam >= IDBINB) && (nLowParam <= IDDECB) || (nLowParam >= IDBINR) && (nLowParam <= IDDECR))
{
if (nHiwParam == 0x0100 /*EN_SETFOCUS*/)
{
AkelPad.SendMessage(lParam, 0x00B1 /*EM_SETSEL*/, LoWord(aDlg[nLowParam].Sel), HiWord(aDlg[nLowParam].Sel));
CreateCaret(lParam);
hSubClass = AkelPad.WindowSubClass(lParam, EditCallback, 256 /*WM_KEYDOWN*/, 258 /*WM_CHAR*/);
}
else if (nHiwParam == 0x0200 /*EN_KILLFOCUS*/)
{
aDlg[nLowParam].Sel = AkelPad.SendMessage(lParam, 0x00B0 /*EM_GETSEL*/, 0, 0);
AkelPad.WindowUnsubClass(lParam);
}
else if (nHiwParam == 0x0300 /*EN_CHANGE*/)
{
if (oSys.Call("User32::GetFocus") == lParam)
{
SetValuesFromID(nLowParam);
Calculate();
}
}
}
else if (nLowParam == IDNOTA)
{
bNotA = ! bNotA;
Calculate();
}
else if (nLowParam == IDNOTB)
{
bNotB = ! bNotB;
Calculate();
}
else if (nLowParam == IDOPERS)
{
if (nHiwParam == 1 /*CBN_SELCHANGE*/)
{
nOper = AkelPad.SendMessage(lParam, 0x147 /*CB_GETCURSEL*/, 0, 0);
ShowOperator();
Calculate();
}
else if (nHiwParam == 3 /*CBN_SETFOCUS*/)
hSubClass = AkelPad.WindowSubClass(lParam, ComboCallback, 256 /*WM_KEYDOWN*/);
else if (nHiwParam == 4 /*CBN_KILLFOCUS*/)
AkelPad.WindowUnsubClass(lParam);
else if (nHiwParam == 8 /*CBN_CLOSEUP*/)
bCloseCB = false;
}
else if (nLowParam == IDSIGNED)
{
bSigned = ! bSigned;
SetBytes();
SetValuesFromID(IDBINA);
SetValuesFromID(IDBINB);
Calculate();
}
else if ((nLowParam >= IDQWORD) && (nLowParam <= IDBYTE))
{
nBits = Math.pow(2, IDQWORD - nLowParam + 3) * 8;
SetBytes();
SetValuesFromID(IDBINA);
SetValuesFromID(IDBINB);
Calculate();
}
else if (nLowParam == IDCLEAR)
{
oSys.Call("User32::SetWindowTextW", aDlg[IDDECA].Handle, "0");
oSys.Call("User32::SetWindowTextW", aDlg[IDDECB].Handle, "0");
SetValuesFromID(IDDECA);
SetValuesFromID(IDDECB);
Calculate();
}
else if (nLowParam == IDCLOSE)
oSys.Call("User32::PostMessageW", hWnd, 16 /*WM_CLOSE*/, 0, 0);
}
else if (uMsg == 16) //WM_CLOSE
{
WriteIni();
oSys.Call("User32::DestroyWindow", hWnd);
}
else if (uMsg == 2) //WM_DESTROY
oSys.Call("User32::PostQuitMessage", 0);
return 0;
}
function EditCallback(hWnd, uMsg, wParam, lParam)
{
var nID = oSys.Call("User32::GetDlgCtrlID", hWnd);
if (uMsg == 256) //WM_KEYDOWN
{
if ((wParam == 0x2D /*VK_INSERT*/) && (! Ctrl()) && (! Shift()))
{
bOverType = ! bOverType;
CreateCaret(hWnd);
}
else if ((wParam >= 0x21 /*VK_PRIOR*/) && (wParam <= 0x28 /*VK_DOWN*/) && Ctrl() && !Shift() && Alt())
AkelPad.WindowNoNextProc(hSubClass);
}
else if (uMsg == 258) //WM_CHAR
{
if ((wParam == 3 /*Ctrl+C*/) || (wParam == 8 /*BackSpace*/) || (wParam == 22 /*Ctrl+V*/) || (wParam == 24 /*Ctrl+X*/) || (wParam == 26 /*Ctrl+Z*/))
return 0;
if (wParam == 1 /*Ctrl+A*/)
{
AkelPad.SendMessage(hWnd, 0x00B1 /*EM_SETSEL*/, 0, -1);
AkelPad.WindowNoNextProc(hSubClass);
return 0;
}
aDlg[nID].Sel = AkelPad.SendMessage(hWnd, 0x00B0 /*EM_GETSEL*/, 0, 0);
if ((nID == IDBINA) || (nID == IDBINB))
{
if ((wParam == 48 /*0*/) || (wParam == 49 /*1*/))
{
if (bOverType && (LoWord(aDlg[nID].Sel) == HiWord(aDlg[nID].Sel)))
{
AkelPad.SendMessage(hWnd, 0x00B1 /*EM_SETSEL*/, LoWord(aDlg[nID].Sel), LoWord(aDlg[nID].Sel) + 1);
oSys.Call("User32::SendMessageW", hWnd, 0x00C2 /*EM_REPLACESEL*/, true, String.fromCharCode(wParam));
AkelPad.WindowNoNextProc(hSubClass);
}
}
else
AkelPad.WindowNoNextProc(hSubClass);
}
else if ((nID == IDHEXA) || (nID == IDHEXB))
{
if ((wParam >= 48 /*0*/) && (wParam <= 57 /*9*/) || (wParam >= 65 /*A*/) && (wParam <= 70 /*F*/) || (wParam >= 97 /*a*/) && (wParam <= 102 /*f*/) || (wParam == 45 /*-*/))
{
if (bOverType && (LoWord(aDlg[nID].Sel) == HiWord(aDlg[nID].Sel)))
{
if ((wParam != 45 /*-*/) || bSigned && (LoWord(aDlg[nID].Sel) == 0))
{
AkelPad.SendMessage(hWnd, 0x00B1 /*EM_SETSEL*/, LoWord(aDlg[nID].Sel), LoWord(aDlg[nID].Sel) + 1);
oSys.Call("User32::SendMessageW", hWnd, 0x00C2 /*EM_REPLACESEL*/, true, String.fromCharCode(wParam));
}
AkelPad.WindowNoNextProc(hSubClass);
}
else if ((wParam == 45 /*-*/) && ((! bSigned) || (LoWord(aDlg[nID].Sel) > 0) || (HiWord(aDlg[nID].Sel) == 0) && (GetWindowText(hWnd).charAt(0) == "-")))
AkelPad.WindowNoNextProc(hSubClass);
}
else
AkelPad.WindowNoNextProc(hSubClass);
}
else if ((nID == IDDECA) || (nID == IDDECB))
{
if ((wParam >= 48 /*0*/) && (wParam <= 57 /*9*/) || (wParam == 45 /*-*/))
{
if (bOverType && (LoWord(aDlg[nID].Sel) == HiWord(aDlg[nID].Sel)))
{
if ((wParam != 45 /*-*/) || bSigned && (LoWord(aDlg[nID].Sel) == 0))
{
AkelPad.SendMessage(hWnd, 0x00B1 /*EM_SETSEL*/, LoWord(aDlg[nID].Sel), LoWord(aDlg[nID].Sel) + 1);
oSys.Call("User32::SendMessageW", hWnd, 0x00C2 /*EM_REPLACESEL*/, true, String.fromCharCode(wParam));
}
AkelPad.WindowNoNextProc(hSubClass);
}
else if ((wParam == 45 /*-*/) && ((! bSigned) || (LoWord(aDlg[nID].Sel) > 0) || (HiWord(aDlg[nID].Sel) == 0) && (GetWindowText(hWnd).charAt(0) == "-")))
AkelPad.WindowNoNextProc(hSubClass);
}
else
AkelPad.WindowNoNextProc(hSubClass);
}
}
return 0;
}
function ComboCallback(hWnd, uMsg, wParam, lParam)
{
if (uMsg == 256) //WM_KEYDOWN
{
if ((wParam >= 0x21 /*VK_PRIOR*/) && (wParam <= 0x28 /*VK_DOWN*/) && Ctrl() && !Shift() && Alt())
{
AkelPad.SendMessage(hWnd, 0x014F /*CB_SHOWDROPDOWN*/, false, 0);
AkelPad.WindowNoNextProc(hSubClass);
}
}
return 0;
}
function Ctrl()
{
return Boolean(oSys.Call("User32::GetKeyState", 0x11 /*VK_CONTROL*/) & 0x8000);
}
function Shift()
{
return Boolean(oSys.Call("User32::GetKeyState", 0x10 /*VK_SHIFT*/) & 0x8000);
}
function Alt()
{
return Boolean(oSys.Call("user32::GetKeyState", 0x12 /*VK_MENU*/) & 0x8000);
}
function LoWord(nDwNum)
{
return nDwNum & 0xFFFF;
}
function HiWord(nDwNum)
{
return (nDwNum >> 16) & 0xFFFF;
}
function CreateCaretBitmap()
{
var hDC = oSys.Call("Gdi32::CreateCompatibleDC", 0);
var hBitmap = oSys.Call("Gdi32::CreateBitmap", 6, 14, 1, 1, 0);
var hBmOld = oSys.Call("Gdi32::SelectObject", hDC, hBitmap);
oSys.Call("Gdi32::SelectObject", hDC, oSys.Call("Gdi32::GetStockObject", 0 /*WHITE_BRUSH*/));
oSys.Call("Gdi32::SelectObject", hDC, oSys.Call("Gdi32::GetStockObject", 6 /*WHITE_PEN*/));
oSys.Call("Gdi32::Rectangle", hDC, 0, 12, 6, 14);
oSys.Call("Gdi32::SelectObject", hDC, hBmOld);
oSys.Call("Gdi32::DeleteDC", hDC);
return hBitmap;
}
function CreateCaret(hWnd)
{
oSys.Call("User32::CreateCaret", hWnd, (bOverType ? hBitmap : 0), 1, 13);
oSys.Call("User32::ShowCaret", hWnd);
}
function GetWindowPos(hWnd, oRect)
{
var lpRect = AkelPad.MemAlloc(16); //sizeof(RECT)
if (hWnd)
oSys.Call("User32::GetWindowRect", hWnd, lpRect);
else
oSys.Call("User32::SystemParametersInfoW", 0x30 /*SPI_GETWORKAREA*/, 0, lpRect, 0);
oRect.X = AkelPad.MemRead(_PtrAdd(lpRect, 0), 3 /*DT_DWORD*/);
oRect.Y = AkelPad.MemRead(_PtrAdd(lpRect, 4), 3 /*DT_DWORD*/);
oRect.W = AkelPad.MemRead(_PtrAdd(lpRect, 8), 3 /*DT_DWORD*/) - oRect.X;
oRect.H = AkelPad.MemRead(_PtrAdd(lpRect, 12), 3 /*DT_DWORD*/) - oRect.Y;
AkelPad.MemFree(lpRect);
}
function GetWindowText(hWnd)
{
oSys.Call("User32::GetWindowTextW", hWnd, lpText, nTextLen);
return AkelPad.MemRead(lpText, 1 /*DT_UNICODE*/);
}
function MoveWindow(hWnd, nKey)
{
var oRectWA = {};
var oRect = {};
var nStep = 20;
GetWindowPos(0, oRectWA);
GetWindowPos(hWnd, oRect);
if (nKey == 0x21 /*VK_PRIOR*/)
oRect.Y = oRectWA.Y;
else if (nKey == 0x22 /*VK_NEXT*/)
oRect.Y = oRectWA.Y + oRectWA.H - oRect.H;
else if (nKey == 0x23 /*VK_END*/)
oRect.X = oRectWA.X + oRectWA.W - oRect.W;
else if (nKey == 0x24 /*VK_HOME*/)
oRect.X = oRectWA.X;
else if (nKey == 0x25 /*VK_LEFT*/)
{
if (oRect.X > oRectWA.X)
oRect.X = (oRect.X - oRectWA.X > nStep) ? oRect.X - nStep : oRectWA.X;
}
else if (nKey == 0x26 /*VK_UP*/)
{
if (oRect.Y > oRectWA.Y)
oRect.Y = (oRect.Y - oRectWA.Y > nStep) ? oRect.Y - nStep : oRectWA.Y;
}
else if (nKey == 0x27 /*VK_RIGHT*/)
{
if (oRect.X + oRect.W < oRectWA.X + oRectWA.W)
oRect.X = (oRectWA.X + oRectWA.W - oRect.X - oRect.W > nStep) ? oRect.X + nStep : oRectWA.X + oRectWA.W - oRect.W;
}
else if (nKey == 0x28 /*VK_DOWN*/)
{
if (oRect.Y + oRect.H < oRectWA.Y + oRectWA.H)
oRect.Y = (oRectWA.Y + oRectWA.H - oRect.Y - oRect.H > nStep) ? oRect.Y + nStep : oRectWA.Y + oRectWA.H - oRect.H;
}
oSys.Call("user32::SetWindowPos", hWnd, 0, oRect.X, oRect.Y, 0, 0, 0x15 /*SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE*/);
}
function ShowOperator()
{
oSys.Call("User32::SetWindowTextW", aDlg[IDOPERNAME].Handle, aOper[nOper][1]);
for (var i = IDNOTB; i <= IDDECB; ++i)
oSys.Call("User32::ShowWindow", aDlg[i].Handle, (nOper != 6));
}
function SetBytes()
{
var nHexLen = nBits / 4 + bSigned;
var nDecLen = parseInt(("FFFFFFFFFFFFFFFF").substr(0, nBits / 4), 16).toString().length + bSigned;
var aBinVal = [GetWindowText(aDlg[IDBINA].Handle), GetWindowText(aDlg[IDBINB].Handle)];
var i;
AkelPad.SendMessage(aDlg[IDBINA].Handle, 0x00C5 /*EM_LIMITTEXT*/, nBits, 0);
AkelPad.SendMessage(aDlg[IDBINB].Handle, 0x00C5 /*EM_LIMITTEXT*/, nBits, 0);
AkelPad.SendMessage(aDlg[IDHEXA].Handle, 0x00C5 /*EM_LIMITTEXT*/, nHexLen, 0);
AkelPad.SendMessage(aDlg[IDHEXB].Handle, 0x00C5 /*EM_LIMITTEXT*/, nHexLen, 0);
AkelPad.SendMessage(aDlg[IDDECA].Handle, 0x00C5 /*EM_LIMITTEXT*/, nDecLen, 0);
AkelPad.SendMessage(aDlg[IDDECB].Handle, 0x00C5 /*EM_LIMITTEXT*/, nDecLen, 0);
for (i = 0; i < 2; ++i)
{
if (aBinVal[i].length < nBits)
{
if (bSigned && (aBinVal[i].charAt(0) == "1"))
aBinVal[i] = Pad(aBinVal[i], nBits, "L", "1");
else
aBinVal[i] = Pad(aBinVal[i], nBits, "L", "0");
}
else
aBinVal[i] = aBinVal[i].slice(-nBits);
oSys.Call("User32::SetWindowTextW", aDlg[(i == 0) ? IDBINA : IDBINB].Handle, aBinVal[i]);
}
oSys.Call("User32::SetWindowTextW", aDlg[IDBITS].Handle, ("7654321076543210765432107654321076543210765432107654321076543210").substr(0, nBits));
}
function SetValuesFromID(nID)
{
var sValue = GetWindowText(aDlg[nID].Handle);
var sBin;
switch (nID)
{
case IDBINA:
case IDBINB:
oSys.Call("User32::SetWindowTextW", aDlg[nID + 1].Handle, BinToHex(sValue));
oSys.Call("User32::SetWindowTextW", aDlg[nID + 2].Handle, BinToDec(sValue));
break;
case IDHEXA:
case IDHEXB:
sBin = HexToBin(sValue);
oSys.Call("User32::SetWindowTextW", aDlg[nID - 1].Handle, sBin);
oSys.Call("User32::SetWindowTextW", aDlg[nID + 1].Handle, BinToDec(sBin));
break;
case IDDECA:
case IDDECB:
sBin = DecToBin(sValue);
oSys.Call("User32::SetWindowTextW", aDlg[nID - 2].Handle, sBin);
oSys.Call("User32::SetWindowTextW", aDlg[nID - 1].Handle, BinToHex(sBin));
break;
}
}
function NotBin(sBin)
{
return sBin.replace(/./g, function(sChar) {return (sChar == "0") ? "1": "0";});
}
function OppositeBin(sBin)
{
sBin = NotBin(sBin);
return Pad(sBin.substr(0, sBin.lastIndexOf("0")) + "1", sBin.length, "R", "0");
}
function BinToDec(sBin)
{
var sSign = "";
var sDec = "";
var i, n;
if ((sBin.length == nBits) && (! /[^01]/.test(sBin)))
{
if (bSigned && (sBin.charAt(0) == "1"))
{
sSign = "-";
sBin = OppositeBin(sBin);
}
//Horner scheme
sDec = "0";
for (i = 0; i < sBin.length; ++i)
{
sDec = MultiplyBy2(sDec);
if (sBin.charAt(i) == "1")
{
n = sDec.search(/[^9]9*$/);
if (n >= 0)
sDec = Pad(sDec.substr(0, n) + (parseInt(sDec.charAt(n), 10) + 1).toString(10), sDec.length, "R", "0");
else
sDec = Pad("1", sDec.length + 1, "R", "0");
}
}
}
return sSign + sDec;
}
function MultiplyBy2(sDec)
{
var sOut = "";
var nCarry = 0;
var nSum;
var i;
for (i = sDec.length - 1; i >= 0; --i)
{
nSum = parseInt(sDec.charAt(i), 10) * 2 + nCarry;
nCarry = Math.floor(nSum / 10);
sOut = nSum.toString(10).slice(-1) + sOut;
}
if (nCarry) sOut = "1" + sOut;
return sOut;
}
function DecToBin(sDec)
{
var sBin = "";
var nRem;
var sDiv;
var nDiv;
var bSign;
var sMax;
var i;
if (bSigned && /^-?\d+$/.test(sDec) || /^\d+$/.test(sDec))
{
if (sDec.charAt(0) == "-")
{
if (/[^0]/.test(sDec.substr(1)))
{
sDec = sDec.substr(1);
bSign = true;
}
else
sDec = "0";
}
do
{
nRem = 0;
sDiv = "";
for (i = 0; i < sDec.length; ++i)
{
nDiv = nRem * 10 + parseInt(sDec.charAt(i), 10);
nRem = nDiv % 2;
sDiv += Math.floor(nDiv / 2).toString(10);
}
if ((sDiv.charAt(0) == "0") && (sDiv.length > 1))
sDiv = sDiv.substr(1);
sDec = sDiv;
sBin = nRem.toString(10) + sBin;
}
while (sDiv != "0");
if (sBin.length > nBits)
sBin = "";
else
sBin = Pad(sBin, nBits, "L", "0");
if (bSigned && sBin)
{
sMax = Pad("1", nBits, "R", "0");
if (bSign)
{
if (sBin > sMax)
sBin = "";
else
sBin = OppositeBin(sBin);
}
else if (sBin >= sMax)
sBin = "";
}
}
return sBin;
}
function BinToHex(sBin)
{
var sSign = "";
var sHex = "";
var i;
if ((sBin.length == nBits) && (! /[^01]/.test(sBin)))
{
if (bSigned && (sBin.charAt(0) == "1"))
{
sSign = "-";
sBin = OppositeBin(sBin);
}
i = sBin.indexOf("1");
if (i >= 0)
{
i -= (i % 4);
for (i; i < sBin.length; i += 4)
sHex += parseInt(sBin.substr(i, 4), 2).toString(16).toUpperCase();
}
else
sHex = "0";
}
return sSign + sHex;
}
function HexToBin(sHex)
{
var sBin = "";
var bSign;
var sMax;
var i;
if (bSigned && /^-?[\dA-F]+$/i.test(sHex) || /^[\dA-F]+$/i.test(sHex))
{
if (sHex.charAt(0) == "-")
{
if (/[^0]/.test(sHex.substr(1)))
{
sHex = sHex.substr(1);
bSign = true;
}
else
sHex = "0";
}
for (i = sHex.length - 1; i >= 0; --i)
sBin = Pad(parseInt(sHex.charAt(i), 16).toString(2), 4, "L", "0") + sBin;
if (sBin.length > nBits)
sBin = sBin.replace(/^0+/, "");
if (sBin.length > nBits)
sBin = "";
else
sBin = Pad(sBin, nBits, "L", "0");
if (bSigned && sBin)
{
sMax = Pad("1", nBits, "R", "0");
if (bSign)
{
if (sBin > sMax)
sBin = "";
else
sBin = OppositeBin(sBin);
}
else if (sBin >= sMax)
sBin = "";
}
}
return sBin;
}
function Pad(sStr, nLen, sType, sChar)
{
if (sType == "R")
{
while (sStr.length < nLen)
sStr += sChar;
}
else if (sType == "L")
{
while (sStr.length < nLen)
sStr = sChar + sStr;
}
return sStr;
}
function Calculate()
{
var sBinA = GetWindowText(aDlg[IDBINA].Handle);
var sBinB = GetWindowText(aDlg[IDBINB].Handle);
var sBinR = "";
var sSignB;
var nShift;
var i;
sDecA = GetWindowText(aDlg[IDDECA].Handle);
sDecB = GetWindowText(aDlg[IDDECB].Handle);
if (sBinA && sDecA && ((nOper == 6) || sBinB && sDecB))
{
if (bNotA) sBinA = NotBin(sBinA);
if (bNotB) sBinB = NotBin(sBinB);
if (nOper == 6)
sBinR = sBinA;
else
{
if (nOper == 0) //OR |
{
for (i = 0; i < nBits; ++i)
sBinR += ((sBinA.charAt(i) == "1") || (sBinB.charAt(i) == "1")) ? "1" : "0";
}
else if (nOper == 1) //AND &
{
for (i = 0; i < nBits; ++i)
sBinR += ((sBinA.charAt(i) == "1") && (sBinB.charAt(i) == "1")) ? "1" : "0";
}
else if (nOper == 2) //XOR ^
{
for (i = 0; i < nBits; ++i)
sBinR += (sBinA.charAt(i) != sBinB.charAt(i)) ? "1" : "0";
}
else
{
if (sDecB.charAt(0) == "-")
{
sSignB = "-";
sDecB = sDecB.substr(1);
}
else
sSignB = "";
sDecB = sSignB + sDecB.slice(-Math.round(Math.LOG2E * Math.log(nBits)));
nShift = (parseInt(sDecB, 10) % nBits + nBits) % nBits;
if (nOper == 3) //LShift <<
sBinR = Pad(sBinA.substr(nShift), nBits, "R", "0");
else if (nOper == 4) //RShift >>
sBinR = Pad(sBinA.substr(0, nBits - nShift), nBits, "L", sBinA.charAt(0));
else if (nOper == 5) //URShift >>>
sBinR = Pad(sBinA.substr(0, nBits - nShift), nBits, "L", "0");
}
}
}
oSys.Call("User32::SetWindowTextW", aDlg[IDBINR].Handle, sBinR);
oSys.Call("User32::SetWindowTextW", aDlg[IDHEXR].Handle, BinToHex(sBinR));
oSys.Call("User32::SetWindowTextW", aDlg[IDDECR].Handle, BinToDec(sBinR));
}
function ReadIni()
{
var sIniFile = WScript.ScriptFullName.substring(0, WScript.ScriptFullName.lastIndexOf(".")) + ".ini";
var oFile;
if (oFSO.FileExists(sIniFile))
{
oFile = oFSO.OpenTextFile(sIniFile, 1, false, -1);
try
{
eval(oFile.ReadAll());
}
catch (oError)
{}
oFile.Close();
}
}
function WriteIni()
{
var oFile = oFSO.OpenTextFile(WScript.ScriptFullName.substring(0, WScript.ScriptFullName.lastIndexOf(".")) + ".ini", 2, true, -1);
var oRect = {};
var sIniTxt;
GetWindowPos(hDlg, oRect);
sDecA = GetWindowText(aDlg[IDDECA].Handle);
sDecB = GetWindowText(aDlg[IDDECB].Handle);
sIniTxt =
'nDlgX=' + oRect.X + ';\r\n' +
'nDlgY=' + oRect.Y + ';\r\n' +
'bOverType=' + bOverType + ';\r\n' +
'bSigned=' + bSigned + ';\r\n' +
'nBits=' + nBits + ';\r\n' +
'nOper=' + nOper + ';\r\n' +
'bNotA=' + bNotA + ';\r\n' +
'bNotB=' + bNotB + ';\r\n' +
'sDecA="' + sDecA + '";\r\n' +
'sDecB="' + sDecB + '";\r\n';
oFile.Write(sIniTxt);
oFile.Close();
}
|
Last edited by KDJ on Fri Aug 05, 2016 9:23 pm; edited 5 times in total |
|
Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1929 Location: Poland
|
Posted: Thu Aug 15, 2013 2:02 pm Post subject: |
|
|
GUI for manual settings - part 1.
The script should be saved in Unicode format.
Part 2 and 3 - in the next posts.
All in one: KDJ.zip
AkelPadManualSettings.js
Code: | // http://akelpad.sourceforge.net/forum/viewtopic.php?p=22567#22567
// Version: 2016-07-19
// Author: KDJ
//
// *** GUI for manual settings ***
//
// Usage:
// Call("Scripts::Main", 1, "AkelPadManualSettings.js")
//
// Note:
// The script should be saved in Unicode format
var oSys = AkelPad.SystemFunction();
var hMainWnd = AkelPad.GetMainWnd();
var hEditWnd = AkelPad.GetEditWnd();
var hInstDLL = AkelPad.GetInstanceDll();
var sClassName = "AkelPad::Scripts::" + WScript.ScriptName + "::" + hInstDLL;
var sScriptName = "AkelPad manual settings";
var nHistMax = 20;
var bSaveHist;
var bChanged;
var bCloseCB;
var hFocus;
var i;
var nTextLen = 8192;
var lpText = AkelPad.MemAlloc(nTextLen * 2);
var lpLVITEM = AkelPad.MemAlloc(_X64 ? 72 : 60); //sizeof(LVITEM)
AkelPad.MemCopy(lpLVITEM, 0x0001 /*LVIF_TEXT*/, 3 /*DT_DWORD*/);
AkelPad.MemCopy(_PtrAdd(lpLVITEM, _X64 ? 24 : 20), lpText, 2 /*DT_QWORD*/);
AkelPad.MemCopy(_PtrAdd(lpLVITEM, _X64 ? 32 : 24), nTextLen, 3 /*DT_DWORD*/);
//.ini settings
var nDlgX = 100;
var nDlgY = 120;
var nSel = 0;
var nLang = 0;
var aAkelUpdaterOptions = [];
var aCmdLineBegin = [];
var aCmdLineEnd = [];
var aDateInsertFormat = [];
var aDateLogFormat = [];
var aStatusUserFormat = [];
var aTabNameFind = [];
var aTabNameRep = [];
var aUrlCommand = [];
ReadIni();
//0x50000000=WS_VISIBLE|WS_CHILD
//0x50000001=WS_VISIBLE|WS_CHILD|BS_DEFPUSHBUTTON
//0x50000009=WS_VISIBLE|WS_CHILD|BS_AUTORADIOBUTTON
//0x50010003=WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_AUTOCHECKBOX
//0x50012403=WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_MULTILINE|BS_TOP|BS_AUTOCHECKBOX
//0x50010009=WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_AUTORADIOBUTTON
//0x50010042=WS_VISIBLE|WS_CHILD|WS_TABSTOP|CBS_AUTOHSCROLL|CBS_DROPDOWN
//0x50210003=WS_VISIBLE|WS_CHILD|WS_VSCROLL|WS_TABSTOP|CBS_DROPDOWNLIST
//0x50010800=WS_VISIBLE|WS_CHILD|WS_TABSTOP|ES_READONLY
//0x50310804=WS_VISIBLE|WS_CHILD|WS_HSCROLL|WS_VSCROLL|WS_TABSTOP|ES_READONLY|ES_MULTILINE
//0x5081800D=WS_VISIBLE|WS_CHILD|WS_BORDER|WS_TABSTOP|LVS_NOSORTHEADER|LVS_SHOWSELALWAYS|LVS_SINGLESEL|LVS_REPORT
var oAkelAdminResident =
{
Def :1,
Wnd :[],
IDTXT :2001,
IDBUT1:2002,
IDBUT2:2003,
IDDEF :2004,
Initialize:function()
{
this.Val = SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 126 /*MI_AKELADMINRESIDENT*/, 0);
this.Ini = this.Val;
this.Wnd[this.IDTXT ]={C:'STATIC', S:0x50000000, X:140, Y:15, W:640, H:13, Txt:'Defines residency of "AkelAdmin.exe":',
Rus:'Определяет будет ли AkelAdmin.exe оставаться в памяти:'};
this.Wnd[this.IDBUT1]={C:'BUTTON', S:0x50010009, X:140, Y:35, W:640, H:16, Txt:'0 - AkelAdmin.exe unloaded from memory. Password will be prompted each time to change protected file.',
Rus:'0 - AkelAdmin.exe выгружается из памяти. Каждый раз будет запрашиваться пароль на изменение защищенного файла.'};
this.Wnd[this.IDBUT2]={C:'BUTTON', S:0x50010009, X:140, Y:55, W:640, H:16, Txt:'1 - AkelAdmin.exe remains in memory. Password will be prompted only for the first time to change protected file.',
Rus:'1 - AkelAdmin.exe остается в памяти. Пароль будет запрошен только первый раз на изменение защищенного файла.'};
this.Wnd[this.IDDEF ]={C:'BUTTON', S:0x50010003, X:140, Y:81, W:640, H:16, Txt:'By default: 1',
Rus:'По умолчанию: 1'};
},
Apply:function()
{
SendMessage(hMainWnd, 1219 /*AKD_SETMAININFO*/, 126 /*MIS_AKELADMINRESIDENT*/, this.Val);
},
SetVal:function()
{
for (var i = this.IDBUT1; i <= this.IDBUT2; ++i)
SendMessage(this.Wnd[i].HWND, 241 /*BM_SETCHECK*/, this.Val == i - this.IDBUT1, 0);
SendMessage(this.Wnd[this.IDDEF].HWND, 241 /*BM_SETCHECK*/, this.Val == this.Def, 0);
},
Command:function(nID, nCode, hWnd)
{
if ((nID >= this.IDBUT1) && (nID <= this.IDBUT2))
{
bChanged = 1;
this.Val = nID - this.IDBUT1;
this.SetVal();
SendMessage(aDlg[IDENGB + nLang].HWND, 241 /*BM_SETCHECK*/, 1, 0);
}
else if ((nID == this.IDDEF) && SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
{
bChanged = 1;
this.Val = this.Def;
this.SetVal();
}
else if ((nID == IDENGB) ||(nID == IDRUSB))
this.SetVal();
}
};
var oAkelUpdaterOptions =
{
Val :'',
Def :'',
Wnd :[],
IDTXT:2001,
IDVAL:2002,
IDDEF:2003,
IDED :2004,
Initialize:function()
{
if (SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 131 /*MI_AKELUPDATEROPTIONS*/, lpText))
this.Val = AkelPad.MemRead(lpText, 1 /*DT_UNICODE*/);
this.Ini = this.Val;
this.Wnd[this.IDTXT]={C:'STATIC', S:0x50000000, X:140, Y:15, W:640, H: 13, Txt:'Defines command line options for the AkelUpdater.exe, when launched from "Help/Update..." menu item:',
Rus:'Определяет параметры командной строки для AkelUpdater.exe:'};
this.Wnd[this.IDVAL]={C:'COMBOBOX', S:0x50010042, X:140, Y:35, W:640, H: 21};
this.Wnd[this.IDDEF]={C:'BUTTON', S:0x50010003, X:140, Y:66, W:640, H: 16, Txt:'By default: ""',
Rus:'По умолчанию: ""'};
this.Wnd[this.IDED ]={C:'AkelEditW', S:0x50310804, X:140, Y:91, W:640, H:344, Txt:'/PROXY=IP:PORT\n\tCurrent proxy settings. IE settings will be used by default.\n/AUTH=LOGIN:PASSWORD\n\tProxy login and password (http only).\n/NOPROXY\n\tDisables proxy settings for this connection (if any).\n/LANG=[eng|rus]\n\tSelect language.\n/ONTOP\n\tSet dialog always on top.\n/BIT=[32|64]\n\tUpdate to 32-bit or to 64-bit version. If not specified it will be autodetected.\n/SAVEDIR=[path]\n\tSave downloads to directory.\n/DLONLY\n\tDon\'t update, download only.\n/AUTO\n\tAutomatically choose Update if possible or Cancel/Close otherwise.\n/NORUN\n\tTurn off "Run AkelPad" checkbox.\n/NOCOPIES\n\tDon\'t load DLLs to find original plugin name.\n/UNZIP=[options]\n\tnsUnzip options.\n\nExample: /PROXY=192.168.0.1:3128 /SAVEDIR="%a\\AkelFiles\\Updates"'};
},
Apply:function()
{
SendMessage(hMainWnd, 1219 /*AKD_SETMAININFO*/, 131 /*MIS_AKELUPDATEROPTIONS*/, this.Val);
},
SetVal:function()
{
oSys.Call("User32::SetWindowTextW", this.Wnd[this.IDVAL].HWND, this.Val);
SendMessage(this.Wnd[this.IDDEF].HWND, 241 /*BM_SETCHECK*/, this.Val == this.Def, 0);
},
Command:function(nID, nCode, hWnd)
{
if (nID == this.IDVAL)
ProcessCB(hWnd, nCode);
else if ((nID == this.IDDEF) && SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
{
bChanged = 1;
this.Val = this.Def;
this.SetVal();
}
}
};
var oCmdLineBegin =
{
Val :'',
Def :'',
Wnd :[],
IDTXT:2001,
IDVAL:2002,
IDDEF:2003,
IDED1:2004,
IDED2:2005,
Initialize:function()
{
if (SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 105 /*MI_CMDLINEBEGIN*/, lpText))
this.Val = AkelPad.MemRead(lpText, 1 /*DT_UNICODE*/);
this.Ini = this.Val;
this.Wnd[this.IDTXT]={C:'STATIC', S:0x50000000, X:140, Y: 15, W:640, H: 13, Txt:'Specifies code to be added to the beginning of the command line before processing it:',
Rus:'Задает код, который будет добавлен к началу командной строки, перед ее обработкой:'};
this.Wnd[this.IDVAL]={C:'COMBOBOX', S:0x50010042, X:140, Y: 35, W:640, H: 21};
this.Wnd[this.IDDEF]={C:'BUTTON', S:0x50010003, X:140, Y: 66, W:640, H: 16, Txt:'By default: ""',
Rus:'По умолчанию: ""'};
this.Wnd[this.IDED1]={C:'AkelEditW', S:0x50010800, X:140, Y: 91, W:640, H: 21, Txt:'Example: /C+',
Rus:'Пример: /C+'};
this.Wnd[this.IDED2]={C:'AkelEditW', S:0x50310804, X:140, Y:122, W:640, H:358, Txt:'*** Command line parameters ***\n\nAkelPad.exe [parameters] "file1.ext" [parameters] "file2.ext" [parameters] ...\n\n/x\t\t- don\'t use MS Notepad compatibility mode when parsing command line parameters.\n/p\t\t- print next file and close it.\n/C+\t\t- silently create new file, if it doesn\'t exist.\n/C-\t\t- don\'t create new file, if it doesn\'t exist.\n/C\t\t- ask for new file creation, if it doesn\'t exist (by default).\n/B+\t\t- silently open file, if binary.\n/B-\t\t- don\'t open file, if binary.\n/B\t\t- ask for file open, if binary (by default).\n/L+\t\t- silently save file, even if symbols will be lost in specified encoding.\n/L-\t\t- don\'t save file, if symbols will be lost in specified encoding.\n/L\t\t- ask for file save, if symbols will be lost in specified encoding (by default).\n/Z\t\t- ignore next command line parameter.\n/NewInstance\n\t\t- force create new program instance.\n/MainClass("MyAkelPad4")\n\t\t- set class name for a new program instance. Name could contain variable %d, which is replaced with process id.\n/Reassoc\t- reinstall assigned earlier associations of file types.\n/Deassoc\t- uninstall assigned earlier associations of file types.\n/Quit\t- stop parsing command line parameters and close program.\n/End\t- stop parsing command line parameters.\n\nMethods:\n/Show(MainWindowStyle)\n\tMainWindowStyle\n\t\t0 hidden window.\n\t\t1 window as is (by default).\n\t\t2 minimized window.\n\t\t3 maximized window.\n\t\t6 minimized, inactive window.\n\t\t9 non-maximized window.\n\t/Show(2)\n\t\tmethod shows main window in minimized style.\n/OpenFile("file"[, OpenCodepage][, OpenBOM])\n\t"file"\n\t\tFile to open.\n\tOpenCodepage\n\t\tOpen codepage. If -1 or not specified, it will be autodetected.\n\tOpenBOM\n\t\tFile byte order mark. If -1 or not specified, it will be autodetected.\n\t/OpenFile("C:\\File.txt", 65001, -1)\n\t\tmethod opens file in UTF-8 codepage.\n/SaveFile("file", [SaveCodepage], [SaveBOM])\n\t"file"\n\t\tSave current document to a specified file name.\n\tSaveCodepage\n\t\tSave codepage. If -1 or not specified, current codepage will be used.\n\tSaveBOM\n\t\tFile byte order mark. 1 - exist, 0 - doesn\'t exist, -1 or not specified - current BOM will be used.\n\t/SaveFile("C:\\File.txt", 65001, 0)\n\t\tmethod saves file in UTF-8 codepage without BOM.\n/Command(InternalCommand, [Parameter])\n\t/Command(4162)\n\t\tmethod calls the internal command at number 4162.\n/Call("Plugin::Function", [additional parameters])\n\t/Call("Scripts::Main")\n\t\tmethod calls Scripts plugin and Main function.\n/Exec("command line"[, "working directory"][, Wait][, WindowStyle])\n\t"command line"\n\t\tCommand line string.\n\t"working directory"\n\t\tWorking directory string. Default is "".\n\tWait\n\t\tWait until the program finishes. 1 - wait, 0 - return immediately (default).\n\tWindowStyle\n\t\tSee MainWindowStyle description of /Show() method. Note: programs could ignore this parameter.\n\t/Exec("notepad.exe")\n\t\tmethod calls notepad.\n\t/Exec(`notepad.exe`)\n\t\tmethod calls notepad.\n\t/Exec(\'notepad.exe\')\n\t\tmethod calls notepad.\n\t/Exec(\'%windir%\\notepad.exe\')\n\t\tmethod calls notepad.\n\t/Exec(`rundll32.exe shell32,ShellExec_RunDLL "%f"`, "%d")\n\t\tmethod pass an active file for opening on Windows association.\n/Font("FaceName", Style, Size)\n\t"FaceName"\n\t\tFont face, for example, "Courier". Unchanged, if "".\n\tStyle (one of the following):\n\t\t0 ignored.\n\t\t1 normal.\n\t\t2 bold.\n\t\t3 italic.\n\t\t4 bold italic.\n\tSize\n\t\tFont size. Unchanged, if 0.\n\t/Font("Courier", 4, 10)\n\t\tmethod sets Courier bold italic font with 10 pt.\n/Recode(RecodeFrom, RecodeTo)\n\tRecodeFrom\n\t\tCodepage source. If -1, it will be auto-detected.\n\tRecodeTo\n\t\tCodepage target. If -1, it will be auto-detected.\n\t/Recode(1252, 437)\n\t\tmethod recodes the text from 1252 codepage to 437.\n/Insert("text", [Esc-sequences])\n\t"text"\n\t\tInserted text.\n\tEsc-sequences:\n\t\t0 - "text" doesn\'t contain Esc-sequences (default).\n\t\t1 - "text" contains Esc-sequences. A set of sequences similar to the find/replace dialog in the program, and also:\n\t\t\t"\\s" - replaced by the selected text of the editing window;\n\t\t\t"\\|" - set the caret position after text insertion.\n\t/Insert("Some string")\n\t\tmethod replaces selection with the specified text.\n\t/Insert("<B>\\s</B>", 1)\n\t\tmethod enclose selection.\n\t/Insert("\\[0031 0032 0033]", 1)\n\t\tmethod replaces selection with "123".\n/If("expression", "IfTrue", "IfFalse")\n\t"expression"\n\t\tExpression could consist of:\n\t\t- mathematical operations: +, -, *, /, %, &, |, ^.\n\t\t- logical operations: >, <, ==, !=, >=, <=, &&, ||, x?y:z.\n\t\t- comments: /*comment*/\n\t\t- methods:\n\t\t\tSendMain(nMessage, wParam, lParam)\n\t\t\t\tnMessage\n\t\t\t\t\tSpecifies the message to be sent to the main window.\n\t\t\t\twParam\n\t\t\t\t\tSpecifies additional message-specific information.\n\t\t\t\tlParam\n\t\t\t\t\tSpecifies additional message-specific information.\n\t\t\tSendEdit(nMessage, wParam, lParam)\n\t\t\t\tnMessage\n\t\t\t\t\tSpecifies the message to be sent to the current edit window.\n\t\t\t\twParam\n\t\t\t\t\tSpecifies additional message-specific information.\n\t\t\t\tlParam\n\t\t\t\t\tSpecifies additional message-specific information.\n\t\t\tCall("Plugin::Function"[, additional parameters])\n\t\t\t\t- If a plugin is called, then exit code transfered via special parameter &nResult. &nResult must be located in a place where external call syntax requires a pointer to an integer.\n\t\t\t\t/If(`Call("Coder::CodeFold", 1, &nResult)`, `/Call("Coder::CodeFold", 1)`, ``)\n\t\t\t\t\tClose CodeFold window, if opened.\n\t\t\t\t- If a script is called, then it is necessary to use external calls 2 or 4 and also transfer exit code from script via AkelPad.ScriptExitCode.\n\t\t\t\t/If(`Call("Scripts::Main", 4, "EvalCmd.js", \'if (AkelPad.GetEditFile(0)) AkelPad.ScriptExitCode(1);\')`, ``, `/Quit`)\n\t\t\t\t\tQuit, if current document has no name.\n\t\t\t\t- It is possible to call Scripts plugin method directly.\n\t\t\t\t/If(`AkelPad.Constants._X64 == 1`, `/Quit`, ``)\n\t\t\t\t\tQuit, if program is x64.\n\t"IfTrue"\n\t\tCommand line, if expression result is true (not equal to zero).\n\t"IfFalse"\n\t\tCommand line, if expression result is false (equal to zero).\n\t/If(`SendMain(1222 /*AKD_GETMAININFO*/, 5 /*MI_SAVESETTINGS*/, 0) == 2 /*SS_INI*/`, `/OpenFile("%a\\AkelPad.ini")`, ``)\n\t\tmethod opens AkelPad.ini, if settings saved to ini file.\n/Var(Flags)\n\tFlags to use variables for the following command line methods. Set by the sum of members:\n\t\t0 don\'t expand variables.\n\t\t1 expand system variables (for example, %windir%).\n\t\t2 expand program variables %f,%d,%a. If flag set, then symbol % specified as %%.\n\t\tBy default: 1+2=3.\n\t/Var(0) /OpenFile("1%a%2.txt")\n\t\topen file "1%a%2.txt".\n\nVariables available for use in methods:\n\tNormal usage:\n\t\t%f - active file\n\t\t%d - directory of active file\n\t\t%a - AkelPad\'s directory (i.e. contains AkelPad.exe)\n\t\t%% - % symbol\n\t\t%system variable% (i.e. environment variable)\n\tBatch files (bat,cmd):\n\t\t%%f - active file\n\t\t%%d - directory of active file\n\t\t%%a - AkelPad\'s directory (i.e. contains AkelPad.exe)\n\t\t%%%% - % symbol\n\t\t%system variable% (i.e. environment variable)\n\t\t^& - & symbol\n\n\n*** Internal commands ***\n\nCan be used in command line method /Command() and also in ContextMenu, ToolBar, Hotkeys, Scripts plugins.\n\n4101\tCreate new edit window\n4102\tCreate new instance of program\n4103\tOpen file dialog. Optional parameter:\n\t\t1 - force to use last directory.\n4104\tReopen file\n4105\tSave file\n4106\tSave file dialog. Optional parameter:\n\t\t1 - force to use last directory.\n4107\tPrint setup dialog\n4108\tPrint dialog\n4109\tExit program\n4110\tSave all documents\n4111\tSave all as dialog\n4113\tPrint without dialog\n4114\tPrint preview dialog\n4121\tRedetect code page of the current file\n4122\tReopen file as ANSI\n4123\tReopen file as OEM\n4124\tReopen file as KOI-R\n4125\tReopen file as UTF16LE\n4126\tReopen file as UTF16BE\n4127\tReopen file as UTF8\n4131\tSave file as ANSI\n4132\tSave file as OEM\n4133\tSave file as KOI-R\n4134\tSave file as UTF16LE\n4135\tSave file as UTF16BE\n4136\tSave file as UTF8\n4137\tSave file as UTF8 without BOM\n4140\tShow codepages context menu\n4151\tUndo last operation\n4152\tRedo last operation\n4153\tCut\n4154\tCopy\n4155\tPaste\n4156\tDelete\n4157\tSelect all\n4158\tFind dialog\n4159\tFind last string down\n4160\tFind last string up\n4161\tReplace dialog\n4162\tGo to line dialog\n4163\tRun charmap.exe\n4164\tInsert tabulation\n4165\tInsert tabulation only if several lines selected\n4166\tDelete tabulation if several lines selected, otherwise insert tabulation. Optional parameter:\n\t\t1 - delete tabulation in single line selection.\n4167\tDelete tabulation only if several lines selected\n4168\tInsert space\n4169\tInsert space only if several lines selected\n4170\tDelete space if several lines selected, otherwise insert space. Optional parameter:\n\t\t1 - delete space in single line selection.\n4171\tDelete space only if several lines selected\n4172\tDelete first char\n4173\tDelete first char only if selection not empty\n4174\tDelete trailing whitespaces\n4175\tConvert text to "UPPERCASE". Optional parameter:\n\t\t1 - change case for all text if no selection.\n4176\tConvert text to "lowercase".Optional parameter:\n\t\t1 - change case for all text if no selection.\n4177\tConvert text to "Sentence case.". Optional parameter:\n\t\t1 - change case for all text if no selection.\n4178\tConvert text to "Title Case". Optional parameter:\n\t\t1 - change case for all text if no selection.\n4179\tConvert text to "iNVERT cASE". Optional parameter:\n\t\t1 - change case for all text if no selection.\n4180\tCycle case. Optional parameter:\n\t\t1 - change case for all text if no selection.\n4182\tRecode dialog\n4183\tInsert date\n4184\tWindows newline format\n4185\tUnix newline format\n4186\tMac newline format\n4190\tInsert/Overtype mode\n4191\tPaste as ANSI text\n4192\tPaste to column selection\n4193\tPaste text after caret\n4194\tPaste text taking into account selection case\n4195\tDelete all whitespaces in selection\n4196\tInsert new line with keeping left spaces, if option "Keep space" is off.\n\t\tInsert new line without keeping left spaces, if option "Keep space" is on.\n4197\tDelete current line. Optional parameter:\n\t\t1 - delete all wrapped line.\n4198\tMove caret to opposite end of selection\n4199\tMove caret to previous location\n4200\tMove caret to next location\n4201\tFont dialog\n4202\tColor theme dialog\n4204\tIncrease font 1pt\n4205\tDecrease font 1pt\n4206\tRestore font to size at startup\n4209\tWord wrap (on/off)\n4210\tAlways on top (on/off)\n4211\tShow status bar (on/off)\n4212\tSplit window into four panes\n4213\tSplit window into two vertical panes\n4214\tSplit window into two horizontal panes\n4215\tSplit window (on/off)\n4216\tRead only (on/off)\n4251\tExecute command\n4252\tSave file time (on/off)\n4253\tWatch file change (on/off)\n4254\tKeep left spaces (on/off)\n4255\tSingle open file (on/off)\n4256\tSingle open program (on/off)\n4259\tPlugins dialog\n4260\tOptions dialog\n4261\tSDI mode\n4262\tMDI mode\n4263\tPseudo MDI mode\n4301\tTab list window at the top of the main window\n4302\tTab list window at the bottom of the main window\n4303\tHide tab list\n4304\tStandard tab list style\n4305\tButtons tab list style\n4306\tFlat buttons tab list style\n4307\tMDI windows - horizontal tile\n4308\tMDI windows - vertical tile\n4309\tMDI windows - cascade\n4310\tSwitch tabs: next-previous.\n4311\tSwitch tabs: right-left.\n4316\tActivate next tab\n4317\tActivate previous tab\n4318\tClose current tab\n4319\tClose all tabs\n4320\tClose all tabs but active\n4321\tClose all unmodified tabs\n4322\tClone current tab\n4323\tCopy current tab file path. Optional parameter:\n\t\t0 - copy full path (default);\n\t\t1 - copy directory;\n\t\t2 - copy file name;\n\t\t3 - copy file base name;\n\t\t4 - copy file extension.\n4324\tClose file\n4325\tClose file and exit program (SDI) or close tab of a file (MDI/PMDI).\n4327\tSelect window dialog (MDI/PMDI). Same as 10019.\n4331\tRestore/Maximize main window\n4332\tActivate next dialog window\n4333\tActivate previous dialog window\n4341\tActivate next pane (split window)\n4342\tActivate previous pane (split window)\n4351\tAbout dialog\n4352\tOpen user\'s manual (this file)\n4353\tCheck updates (AkelUpdater), uses AkelUpdaterOptions string\n5001\tDelete dead recent files from "Recent files" list\n5001+n\tOpen recent file n\n6001\tActivate internal language\n6001+n\tActivate language n\n7001\tReopen file in first codepage of codepage list\n7001+n\tReopen file in codepage n of codepage list\n8001\tSave file in first codepage of codepage list\n8001+n\tSave file in codepage n of codepage list\n10019\tSelect window dialog (MDI/PMDI). Same as 4327.',
Rus:'*** Параметры командной строки ***\n\nAkelPad.exe [параметры] "file1.ext" [параметры] "file2.ext" [параметры] ...\n\n/x\t\t- не использовать режим совместимости с MS Notepad при обработке параметров командной строки.\n/p\t\t- напечатать следующий файл и закрыть его.\n/C+\t\t- молча создавать новый файл, если он не существует.\n/C-\t\t- не создавать новый файл, если он не существует.\n/C\t\t- спрашивать о создании нового файла, если он не существует (по умолчанию).\n/B+\t\t- молча открывать файл, если он бинарный.\n/B-\t\t- не открывать файл, если он бинарный.\n/B\t\t- спрашивать об открытии файла, если он бинарный (по умолчанию).\n/L+\t\t- молча сохранить файл, даже если потеряются символы в указанной кодировке.\n/L-\t\t- не сохранять файл, если потеряются символы в указанной кодировке.\n/L\t\t- спрашивать о сохранении файла, если потеряются символы в указанной кодировке (по умолчанию).\n/Z\t\t- игнорировать следующий параметр командной строки.\n/NewInstance\n\t\t- форсировать создание нового экземпляра программы.\n/MainClass("MyAkelPad4")\n\t\t- задать имя класса для нового экземпляра программы. При этом имя может содержать переменную %d, которая заменяется на идентификатор процесса.\n/Reassoc\t- переустановить ранее назначенные ассоциации типов файлов.\n/Deassoc\t- снять ранее назначенные ассоциации типов файлов.\n/Quit\t- закончить обработку параметров командной строки и выйти из программы.\n/End\t- закончить обработку параметров командной строки.\n\nМетоды:\n/Show(СтильГлавногоОкна)\n\tСтильГлавногоОкна\n\t\t0 скрытое окно.\n\t\t1 окно как есть (по умолчанию).\n\t\t2 свернутое окно.\n\t\t3 развернутое окно.\n\t\t6 свернутое, не активное окно.\n\t\t9 не развернутое окно.\n\t/Show(2)\n\t\tметод отображает главное окно в свернутом режиме.\n/OpenFile("файл"[, Кодировка][, СигнатураBOM])\n\t"файл"\n\t\tФайл для открытия.\n\tКодировка\n\t\tКодировка открытия. Если -1 либо не указана, она будет определена автоматически.\n\tСигнатураBOM\n\t\tСигнатура BOM файла. Если -1 либо не указана, она будет определена автоматически.\n\t/OpenFile("C:\\File.txt", 65001, -1)\n\t\tметод открывает файл в кодировке UTF-8.\n/SaveFile("файл", [Кодировка], [СигнатураBOM])\n\t"файл"\n\t\tСохранение текущего документа в указанный файл.\n\tКодировка\n\t\tКодировка сохранения. Если -1 либо не указана, будет использована текущая кодировка.\n\tСигнатураBOM\n\t\tСигнатура BOM файла. 1 - присутствует, 0 - отсутствует, -1 либо не указана - используется текущий BOM.\n\t/SaveFile("C:\\File.txt", 65001, 0)\n\t\tметод сохраняет файл в кодировке UTF-8 без BOM.\n/Command(ВнутренняяКоманда, [Параметр])\n\t/Command(4162)\n\t\tметод вызывает внутреннюю команду под номером 4162.\n/Call("Плагин::Функция", [дополнительные параметры])\n\t/Call("Scripts::Main")\n\t\tметод вызывает плагин Scripts и функцию Main.\n/Exec("командная строка"[, "рабочая директория"][, Ожидать][, СтильОкна])\n\t"командная строка"\n\t\tКомандная строка.\n\t"рабочая директория"\n\t\tРабочая директория. По умолчанию "".\n\tОжидать\n\t\tОжидать завершения программы. 1 - ожидать, 0 - не ожидать (по умолчанию).\n\tСтильОкна\n\t\tСм. описание СтильГлавногоОкна метода /Show(). Замечание: программы могут игнорировать данный параметр.\n\t/Exec("notepad.exe")\n\t\tметод вызывает блокнот.\n\t/Exec(`notepad.exe`)\n\t\tметод вызывает блокнот.\n\t/Exec(\'notepad.exe\')\n\t\tметод вызывает блокнот.\n\t/Exec(\'%windir%\\notepad.exe\')\n\t\tметод вызывает блокнот.\n\t/Exec(`rundll32.exe shell32,ShellExec_RunDLL "%f"`, "%d")\n\t\tметод передает активный файл для открытия по ассоциации Windows.\n/Font("Шрифт", Начертание, Размер)\n\t"Шрифт"\n\t\tИмя шрифта, например, "Courier". Не изменяется, если "".\n\tНачертание (одно из следующих):\n\t\t0 игнорировать.\n\t\t1 обычный шрифт.\n\t\t2 жирный шрифт.\n\t\t3 курсивный шрифт.\n\t\t4 жирный курсивный шрифт.\n\tРазмер\n\t\tРазмер шрифта. Не изменяется, если 0.\n\t/Font("Courier", 4, 10)\n\t\tметод устанавливает жирный курсив Courier шрифт размером 10 pt.\n/Recode(ПерекодироватьИз, ПерекодироватьВ)\n\tПерекодироватьИз\n\t\tКодировка источник. Если -1, она будет определена автоматически.\n\tПерекодироватьВ\n\t\tКодировка приемник. Если -1, она будет определена автоматически.\n\t/Recode(1251, 866)\n\t\tметод перекодирует текст из кодировки 1251 в 866.\n/Insert("текст", [Esc-последовательности])\n\t"текст"\n\t\tВставляемый текст.\n\tEsc-последовательности:\n\t\t0 - "текст" не содержит Esc-последовательностей (по умолчанию).\n\t\t1 - "текст" содержит Esc-последовательности. Набор последовательностей аналогичен диалогу поиска/замены в программе, а также:\n\t\t\t"\\s" - заменяется на выделенный в окне редактирования текст;\n\t\t\t"\\|" - указывает на положение каретки после вставки текста.\n\t/Insert("Некая строка")\n\t\tметод заменяет выделение на указанный текст.\n\t/Insert("<B>\\s</B>", 1)\n\t\tметод добавляет к выделению текст по краям.\n\t/Insert("\\[0031 0032 0033]", 1)\n\t\tметод заменяет выделение на "123".\n/If("выражение", "ЕслиИстина", "ЕслиЛожь")\n\t"выражение"\n\t\tВыражение может содержать:\n\t\t- математические операции: +, -, *, /, %, &, |, ^.\n\t\t- логические операции: >, <, ==, !=, >=, <=, &&, ||, x?y:z.\n\t\t- комментарии: /*комментарий*/\n\t\t- методы:\n\t\t\tSendMain(nMessage, wParam, lParam)\n\t\t\t\tnMessage\n\t\t\t\t\tСообщение, которое посылается главному окну программы.\n\t\t\t\twParam\n\t\t\t\t\tДополнительная информация.\n\t\t\t\tlParam\n\t\t\t\t\tДополнительная информация.\n\t\t\tSendEdit(nMessage, wParam, lParam)\n\t\t\t\tnMessage\n\t\t\t\t\tСообщение, которое посылается текущему окну редактирования.\n\t\t\t\twParam\n\t\t\t\t\tДополнительная информация.\n\t\t\t\tlParam\n\t\t\t\t\tДополнительная информация.\n\t\t\tCall("Плагин::Функция"[, дополнительные параметры])\n\t\t\t\t- Если вызывается плагин, то код выхода передаётся через специальный параметр &nResult. &nResult должен находится на месте, где синтаксис внешнего вызова требует указатель на число.\n\t\t\t\t/If(`Call("Coder::CodeFold", 1, &nResult)`, `/Call("Coder::CodeFold", 1)`, ``)\n\t\t\t\t\tЗакрыть окно CodeFold, если открыто.\n\t\t\t\t- Если вызывается скрипт, то необходимо использовать внешние вызовы 2 или 4, а также передавать код выхода из скрипта через AkelPad.ScriptExitCode.\n\t\t\t\t/If(`Call("Scripts::Main", 4, "EvalCmd.js", \'if (AkelPad.GetEditFile(0)) AkelPad.ScriptExitCode(1);\')`, ``, `/Quit`)\n\t\t\t\t\tВыйти, если текущий документ не имеет имени.\n\t\t\t\t- Возможно вызывать метод Scripts плагина напрямую.\n\t\t\t\t/If(`AkelPad.Constants._X64 == 1`, `/Quit`, ``)\n\t\t\t\t\tВыйти, если программа имеет битность x64.\n\t"ЕслиИстина"\n\t\tКомандная строка, если результат выражения - истина (не равен нулю).\n\t"ЕслиЛожь"\n\t\tКомандная строка, если результат выражения - ложь (равен нулю).\n\t/If(`SendMain(1222 /*AKD_GETMAININFO*/, 5 /*MI_SAVESETTINGS*/, 0) == 2 /*SS_INI*/`, `/OpenFile("%a\\AkelPad.ini")`, ``)\n\t\tметод открывает AkelPad.ini, если настройки сохраняются в ini файл.\n/Var(Флаги)\n\tФлаги использования переменных для методов следующих далее в командной строке. Задается суммой членов:\n\t\t0 не разворачивать переменные.\n\t\t1 разворачивать системные переменные (например, %windir%).\n\t\t2 разворачивать переменные программы %f,%d,%a. Если флаг задан, то символ % указывается как %%.\n\t\tПо умолчанию: 1+2=3.\n\t/Var(0) /OpenFile("1%a%2.txt")\n\t\tоткрыть файл "1%a%2.txt".\n\nПеременные в методах:\n\tОбычное использование:\n\t\t%f - активный файл\n\t\t%d - директория активного файла\n\t\t%a - директория AkelPad\'а\n\t\t%% - символ %\n\t\t%системная переменная%\n\tПакетные файлы (bat,cmd):\n\t\t%%f - активный файл\n\t\t%%d - директория активного файла\n\t\t%%a - директория AkelPad\'а\n\t\t%%%% - символ %\n\t\t%системная переменная%\n\t\t^& - символ &\n\n\n*** Внутренние команды ***\n\nМогут быть использованы в параметрах командной строки, а также в ContextMenu, ToolBar, Hotkeys, Scripts плагинах.\n\n4101\tСоздать новое окно редактирования\n4102\tСоздать новую копию программы\n4103\tДиалог открытия файлов. Необязательный параметр:\n\t\t1 - форсировать использование последней директории.\n4104\tПереоткрыть файл\n4105\tСохранить файл\n4106\tДиалог сохранения файлов. Необязательный параметр:\n\t\t1 - форсировать использование последней директории.\n4107\tДиалог настроек печати\n4108\tДиалог печати\n4109\tВыход из программы\n4110\tСохранить все документы\n4111\tДиалог сохранения всех документов\n4113\tПечать без диалога\n4114\tДиалог предпросмотра печати\n4121\tОпределить кодировку текущего документа заново\n4122\tПереоткрыть файл как ANSI\n4123\tПереоткрыть файл как OEM\n4124\tПереоткрыть файл как KOI-R\n4125\tПереоткрыть файл как UTF16LE\n4126\tПереоткрыть файл как UTF16BE\n4127\tПереоткрыть файл как UTF8\n4131\tСохранить файл как ANSI\n4132\tСохранить файл как OEM\n4133\tСохранить файл как KOI-R\n4134\tСохранить файл как UTF16LE\n4135\tСохранить файл как UTF16BE\n4136\tСохранить файл как UTF8\n4137\tСохранить файл как UTF8 без BOM\n4140\tПоказать контекстное меню кодировок\n4151\tОтменить последнюю операцию (Undo)\n4152\tПовторить последнюю операцию (Redo)\n4153\tВырезать\n4154\tСкопировать\n4155\tВставить\n4156\tУдалить\n4157\tВыделить все\n4158\tДиалог поиска\n4159\tНайти далее вниз\n4160\tНайти далее вверх\n4161\tДиалог замены\n4162\tДиалог перехода к строке\n4163\tЗапуск charmap.exe\n4164\tВставить табуляцию\n4165\tВставить табуляцию, только если выделено несколько строк\n4166\tУдалить табуляцию, если выделено несколько строк, в противном случае вставить табуляцию. Необязательный параметр:\n\t\t1 - удалять табуляцию при однострочном выделении.\n4167\tУдалить табуляцию, только если выделено несколько строк\n4168\tВставить пробел\n4169\tВставить пробел, только если выделено несколько строк\n4170\tУдалить пробел, если выделено несколько строк, в противном случае вставить пробел. Необязательный параметр:\n\t\t1 - удалять пробел при однострочном выделении.\n4171\tУдалить пробел, только если выделено несколько строк\n4172\tУдалить первый символ\n4173\tУдалить первый символ, только если есть выделение\n4174\tУдалить табы и пробелы в конце\n4175\tПреобразовать в "ВСЕ ПРОПИСНЫЕ". Необязательный параметр:\n\t\t1 - изменить регистр для всего текста, если нет выделения.\n4176\tПреобразовать в "все строчные". Необязательный параметр:\n\t\t1 - изменить регистр для всего текста, если нет выделения.\n4177\tПреобразовать в "Как в предложениях.". Необязательный параметр:\n\t\t1 - изменить регистр для всего текста, если нет выделения.\n4178\tПреобразовать в "Начинать С Прописных".Необязательный параметр:\n\t\t1 - изменить регистр для всего текста, если нет выделения.\n4179\tПреобразовать в "иНВЕРТИРОВАТЬ". Необязательный параметр:\n\t\t1 - изменить регистр для всего текста, если нет выделения.\n4180\tПреобразовать по кругу. Необязательный параметр:\n\t\t1 - изменить регистр для всего текста, если нет выделения.\n4182\tДиалог перекодирования\n4183\tВставить дату\n4184\tФормат новой строки Windows\n4185\tФормат новой строки Unix\n4186\tФормат новой строки Mac\n4190\tРежим вставки/замены\n4191\tВставить текст как ANSI\n4192\tВставить из буфера обмена в вертикальное выделение\n4193\tВставить текст из буфера обмена после каретки\n4194\tВставить текст из буфера обмена с учетом регистра выделения\n4195\tУдалить все табы и пробелы в выделении\n4196\tВставить новую строку с сохранением отступов слева, если отключено "Сохранять отступы слева".\n\t\tВставить новую строку без сохранения отступов слева, если включено "Сохранять отступы слева".\n4197\tУдалить текущую строку. Необязательный параметр:\n\t\t1 - удалить всю перенесённую строку.\n4198\tПеревести каретку на другой конец выделения\n4199\tПеревести каретку на предыдущую позицию\n4200\tПеревести каретку на следующую позицию\n4201\tДиалог выбора шрифта\n4202\tДиалог выбора цветовой темы\n4204\tУвеличить шрифт на 1pt\n4205\tУменьшить шрифт на 1pt\n4206\tВосстановить размер шрифта\n4209\tПеренос по словам (вкл/выкл)\n4210\tПоверх всех окон (вкл/выкл)\n4211\tПоказать строку состояния (вкл/выкл)\n4212\tРазделить окно на четыре части\n4213\tРазделить окно на две вертикальные части\n4214\tРазделить окно на две горизонтальные части\n4215\tРазделить окно (вкл/выкл)\n4216\tТолько чтение (вкл/выкл)\n4251\tВыполнить\n4252\tСохранять время файла (вкл/выкл)\n4253\tСледить за изменением файла (вкл/выкл)\n4254\tСохранять отступы слева (вкл/выкл)\n4255\tНе открывать файл дважды (вкл/выкл)\n4256\tНе открывать программу дважды (вкл/выкл)\n4259\tДиалог плагинов\n4260\tДиалог настроек\n4261\tОднооконный (SDI) режим\n4262\tМногооконный (MDI) режим\n4263\tПсевдо-многооконный (PMDI) режим\n4301\tВкладки сверху\n4302\tВкладки снизу\n4303\tСкрыть вкладки\n4304\tСтандартные вкладки\n4305\tВкладки как кнопки\n4306\tВкладки как плоские кнопки\n4307\tВыстроить горизонтально MDI окна\n4308\tВыстроить вертикально MDI окна\n4309\tВыстроить каскадом MDI окна\n4310\tПереключение вкладок: следующая-предыдущая.\n4311\tПереключение вкладок: правая-левая.\n4316\tАктивировать следующую вкладку\n4317\tАктивировать предыдущую вкладку\n4318\tЗакрыть текущую вкладку\n4319\tЗакрыть все вкладки\n4320\tЗакрыть все вкладки, кроме активной\n4321\tЗакрыть все неизмененные вкладки\n4322\tКлонировать вкладку\n4323\tКопировать путь файла текущей вкладки. Необязательный параметр:\n\t\t0 - копировать полный путь (по умолчанию);\n\t\t1 - копировать директорию;\n\t\t2 - копировать имя файла;\n\t\t3 - копировать имя файла без расширения;\n\t\t4 - копировать расширение файла.\n4324\tЗакрыть файл\n4325\tЗакрыть файл и выйти из программы (SDI) или закрыть вкладку файла (MDI/PMDI).\n4327\tДиалог выбора окна (MDI/PMDI). Тоже что и 10019.\n4331\tВосстановить/Развернуть главное окно программы\n4332\tПерейти к следующему диалогу\n4333\tПерейти к предыдущему диалогу\n4341\tПерейти к следующей части разделенного окна\n4342\tПерейти к предыдущей части разделенного окна\n4351\tДиалог о программе\n4352\tОткрыть руководство пользователя\n4353\tПроверить обновления (AkelUpdater)\n5001\tВ списке последних файлов удалить несуществующие\n5001+n\tИз списка последних файлов, открыть файл n\n6001\tВыбрать внутренний язык\n6001+n\tИз списка языков, выбрать язык n\n7001\tИз списка кодировок, открыть в первой кодировке\n7001+n\tИз списка кодировок, открыть в кодировке n\n8001\tИз списка кодировок, сохранить в первой кодировке\n8001+n\tИз списка кодировок, сохранить в кодировке n\n10019\tДиалог выбора окна (MDI/PMDI). Тоже что и 4327.'};
},
Apply:function()
{
SendMessage(hMainWnd, 1219 /*AKD_SETMAININFO*/, 105 /*MIS_CMDLINEBEGIN*/, this.Val);
},
SetVal:function()
{
oSys.Call("User32::SetWindowTextW", this.Wnd[this.IDVAL].HWND, this.Val);
SendMessage(this.Wnd[this.IDDEF].HWND, 241 /*BM_SETCHECK*/, this.Val == this.Def, 0);
},
Command:function(nID, nCode, hWnd)
{
if (nID == this.IDVAL)
ProcessCB(hWnd, nCode);
else if ((nID == this.IDDEF) && SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
{
bChanged = 1;
this.Val = this.Def;
this.SetVal();
}
}
};
var oCmdLineEnd =
{
Val :'',
Def :'',
Wnd :[],
IDTXT:2001,
IDVAL:2002,
IDDEF:2003,
IDED1:2004,
IDED2:2005,
Initialize:function()
{
if (SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 106 /*MI_CMDLINEEND*/, lpText))
this.Val = AkelPad.MemRead(lpText, 1 /*DT_UNICODE*/);
this.Ini = this.Val;
this.Wnd[this.IDTXT]={C:'STATIC', S:0x50000000, X:140, Y: 15, W:640, H: 13, Txt:'Specifies code to be added to the end of the command line before processing it:',
Rus:'Задает код, который будет добавлен к концу командной строки, перед ее обработкой:'};
this.Wnd[this.IDVAL]={C:'COMBOBOX', S:0x50010042, X:140, Y: 35, W:640, H: 21};
this.Wnd[this.IDDEF]={C:'BUTTON', S:0x50010003, X:140, Y: 66, W:640, H: 16, Txt:'By default: ""',
Rus:'По умолчанию: ""'};
this.Wnd[this.IDED1]={C:'AkelEditW', S:0x50010800, X:140, Y: 91, W:640, H: 21, Txt:'Example: /Call("Scripts::Main", 1, "InsertDate.js", "") /C /B /L',
Rus:'Пример: /Call("Scripts::Main", 1, "InsertDate.js", "") /C /B /L'};
this.Wnd[this.IDED2]={C:'AkelEditW', S:0x50310804, X:140, Y:122, W:640, H:358, Txt:oCmdLineBegin.Wnd[oCmdLineBegin.IDED2].Txt,
Rus:oCmdLineBegin.Wnd[oCmdLineBegin.IDED2].Rus};
},
Apply:function()
{
SendMessage(hMainWnd, 1219 /*AKD_SETMAININFO*/, 106 /*MIS_CMDLINEEND*/, this.Val);
},
SetVal:function()
{
oSys.Call("User32::SetWindowTextW", this.Wnd[this.IDVAL].HWND, this.Val);
SendMessage(this.Wnd[this.IDDEF].HWND, 241 /*BM_SETCHECK*/, this.Val == this.Def, 0);
},
Command:function(nID, nCode, hWnd)
{
if (nID == this.IDVAL)
ProcessCB(hWnd, nCode);
else if ((nID == this.IDDEF) && SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
{
bChanged = 1;
this.Val = this.Def;
this.SetVal();
}
}
};
var oDateInsertFormat =
{
Val :'',
Def :'',
Wnd :[],
IDTXT:2001,
IDVAL:2002,
IDDEF:2003,
IDED :2004,
Initialize:function()
{
if (SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 130 /*MI_DATEINSERTFORMAT*/, lpText))
this.Val = AkelPad.MemRead(lpText, 1 /*DT_UNICODE*/);
this.Ini = this.Val;
this.Wnd[this.IDTXT]={C:'STATIC', S:0x50000000, X:140, Y:15, W:640, H: 13, Txt:'Defines insert date and time format:',
Rus:'Определяет формат вставляемой даты:'};
this.Wnd[this.IDVAL]={C:'COMBOBOX', S:0x50010042, X:140, Y:35, W:640, H: 21};
this.Wnd[this.IDDEF]={C:'BUTTON', S:0x50010003, X:140, Y:66, W:640, H: 16, Txt:'By default: "" - program defined date and time format.',
Rus:'По умолчанию: "" - формат определяется программой.'};
this.Wnd[this.IDED ]={C:'AkelEditW', S:0x50310804, X:140, Y:91, W:640, H:357, Txt:'Time:\nh\t\tHours with no leading zero for single-digit hours; 12-hour clock.\nhh\t\tHours with leading zero for single-digit hours; 12-hour clock.\nH\t\tHours with no leading zero for single-digit hours; 24-hour clock.\nHH\t\tHours with leading zero for single-digit hours; 24-hour clock.\nm\t\tMinutes with no leading zero for single-digit minutes.\nmm\t\tMinutes with leading zero for single-digit minutes.\ns\t\tSeconds with no leading zero for single-digit seconds.\nss\t\tSeconds with leading zero for single-digit seconds.\nt\t\tOne character time-marker string, such as A or P.\ntt\t\tMulticharacter time-marker string, such as AM or PM.\n\nDate:\nd\t\tDay of month as digits with no leading zero for single-digit days.\ndd\t\tDay of month as digits with leading zero for single-digit days.\nddd\t\tDay of week as a three-letter abbreviation.\ndddd\tDay of week as its full name.\nM\t\tMonth as digits with no leading zero for single-digit months.\nMM\t\tMonth as digits with leading zero for single-digit months.\nMMM\tMonth as a three-letter abbreviation.\nMMMM\tMonth as its full name.\ny\t\tYear as last two digits, but with no leading zero for years less than 10.\nyy\t\tYear as last two digits, but with leading zero for years less than 10.\nyyyy\t\tYear represented by full four digits.\ngg\t\tPeriod/era string (e.g. B.C., A.D.).\n\nExample: "H:mm:ss dd MMMM yyyy" -> "12:50:24 01 September 2010"',
Rus:'Время:\nh\t\tЧасы без ведущего нуля в 12-часовом формате.\nhh\t\tЧасы с ведущим нулем в 12-часовом формате.\nH\t\tЧасы без ведущего нуля в 24-часовом формате.\nHH\t\tЧасы с ведущим нулем в 24-часовом формате.\nm\t\tМинуты без ведущего нуля.\nmm\t\tМинуты с ведущим нулем.\ns\t\tСекунды без ведущего нуля.\nss\t\tСекунды с ведущим нулем.\nt\t\tМаркер (такой как A или P).\ntt\t\tМногосимвольный маркер (такой как AM или PM).\n\nДата:\nd\t\tДень месяца без ведущего нуля.\ndd\t\tДень месяца с ведущим нулем.\nddd\t\tТрехбуквенное сокращение дня недели.\ndddd\tПолное название дня недели.\nM\t\tНомер месяца без ведущего нуля.\nMM\t\tНомер месяца с ведущим нулем.\nMMM\tТрехбуквенное сокращение названия месяца.\nMMMM\tПолное название месяца.\ny\t\tДвухзначное обозначение года без ведущего нуля (последние две цифры года).\nyy\t\tДвухзначное обозначение года с ведущим нулем.\nyyyy\t\tПолный номер года.\ngg\t\tНазвание периода или эры.\n\nПример: "H:mm:ss dd MMMM yyyy" -> "12:50:24 01 сентября 2010"'};
},
Apply:function()
{
SendMessage(hMainWnd, 1219 /*AKD_SETMAININFO*/, 130 /*MIS_DATEINSERTFORMAT*/, this.Val);
},
SetVal:function()
{
oSys.Call("User32::SetWindowTextW", this.Wnd[this.IDVAL].HWND, this.Val);
SendMessage(this.Wnd[this.IDDEF].HWND, 241 /*BM_SETCHECK*/, this.Val == this.Def, 0);
},
Command:function(nID, nCode, hWnd)
{
if (nID == this.IDVAL)
ProcessCB(hWnd, nCode);
else if ((nID == this.IDDEF) && SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
{
bChanged = 1;
this.Val = this.Def;
this.SetVal();
}
}
};
|
Last edited by KDJ on Tue Jul 19, 2016 4:31 pm; edited 30 times in total |
|
Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1929 Location: Poland
|
Posted: Thu Aug 15, 2013 2:03 pm Post subject: |
|
|
GUI for manual settings - part 2.
AkelPadManualSettings_part2.js
Code: | var oDateLogFormat =
{
Val :'',
Def :'',
Wnd :[],
IDTXT :2001,
IDVAL :2002,
IDDEF :2003,
IDENABLE:2004,
IDED :2005,
Initialize:function()
{
if (SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 129 /*MI_DATELOGFORMAT*/, lpText))
this.Val = AkelPad.MemRead(lpText, 1 /*DT_UNICODE*/);
this.Ini = this.Val;
this.Enable = SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 217 /*MI_DATELOG*/, 0);
this.EnableIni = this.Enable;
this.Wnd[this.IDTXT ]={C:'STATIC', S:0x50000000, X:140, Y: 15, W:640, H: 13, Txt:'Defines date and time format for files containing ".LOG" at the beginning:',
Rus:'Определяет формат даты для файлов содержащих ".LOG" в начале:'};
this.Wnd[this.IDVAL ]={C:'COMBOBOX', S:0x50010042, X:140, Y: 35, W:640, H: 21};
this.Wnd[this.IDDEF ]={C:'BUTTON', S:0x50010003, X:140, Y: 66, W:640, H: 16, Txt:oDateInsertFormat.Wnd[oDateInsertFormat.IDDEF].Txt,
Rus:oDateInsertFormat.Wnd[oDateInsertFormat.IDDEF].Rus};
this.Wnd[this.IDENABLE]={C:'BUTTON', S:0x50010003, X:140, Y: 86, W:640, H: 16, Txt:'Works only if enabled "Insert date if file has .LOG at the beginning" in settings (DateLog=1).',
Rus:'Работает только при отмеченном пункте в настройках "Вставить дату, если файл содержит .LOG в начале" (DateLog=1).'};
this.Wnd[this.IDED ]={C:'AkelEditW', S:0x50310804, X:140, Y:112, W:640, H:357, Txt:oDateInsertFormat.Wnd[oDateInsertFormat.IDED].Txt,
Rus:oDateInsertFormat.Wnd[oDateInsertFormat.IDED].Rus};
},
Apply:function()
{
SendMessage(hMainWnd, 1219 /*AKD_SETMAININFO*/, 129 /*MIS_DATELOGFORMAT*/, this.Val);
SendMessage(hMainWnd, 1219 /*AKD_SETMAININFO*/, 217 /*MIS_DATELOG*/, this.Enable);
},
SetVal:function()
{
oSys.Call("User32::SetWindowTextW", this.Wnd[this.IDVAL].HWND, this.Val);
SendMessage(this.Wnd[this.IDDEF ].HWND, 241 /*BM_SETCHECK*/, this.Val == this.Def, 0);
SendMessage(this.Wnd[this.IDENABLE].HWND, 241 /*BM_SETCHECK*/, this.Enable, 0);
},
Command:function(nID, nCode, hWnd)
{
if (nID == this.IDVAL)
ProcessCB(hWnd, nCode);
else if ((nID == this.IDDEF) && SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
{
bChanged = 1;
this.Val = this.Def;
this.SetVal();
}
else if (nID == this.IDENABLE)
{
bChanged = 1;
this.Enable = SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0);
}
}
};
var oEditStyle =
{
Def :0,
Wnd :[],
IDTXT :2001,
IDBUT1:2002,
IDDEF :2003,
IDSUM :2004,
Initialize:function()
{
this.Val = SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 122 /*MI_EDITSTYLE*/, 0);
this.Ini = this.Val;
this.Wnd[this.IDTXT ]={C:'STATIC', S:0x50000000, X:140, Y:15, W:640, H:13, Txt:'Defines some edit window creation flags. Sets by the sum of members:',
Rus:'Определяет некоторые флаги создания окна редактирования. Задается суммой членов:'};
this.Wnd[this.IDBUT1]={C:'BUTTON', S:0x50012403, X:140, Y:35, W:640, H:26, Type:1 /*EDS_GLOBALUNDO*/, Txt:'1 - Use process heap for Undo buffer instead of window heap. This flag required for work of AEM_DETACHUNDO and AEM_ATTACHUNDO messages, but when closing edit window the memory releasing will be slower.',
Rus:'1 - Буфер отмен использует кучу процесса, вместо кучи окна. Данный флаг необходим для работы сообщений AEM_DETACHUNDO и AEM_ATTACHUNDO, но при закрытии окна освобождение памяти будет происходить медленнее.'};
this.Wnd[this.IDDEF ]={C:'BUTTON', S:0x50010003, X:140, Y:93, W:640, H:16, Txt:'By default: 0',
Rus:'По умолчанию: 0'};
this.Wnd[this.IDSUM ]={C:'STATIC', S:0x50000000, X:150, Y:67, W: 70, H:13};
},
Apply:function()
{
SendMessage(hMainWnd, 1219 /*AKD_SETMAININFO*/, 122 /*MIS_EDITSTYLE*/, this.Val);
},
SetVal:function()
{
for (var i = this.IDBUT1; i <= this.IDBUT1; ++i)
SendMessage(this.Wnd[i].HWND, 241 /*BM_SETCHECK*/, this.Val & this.Wnd[i].Type, 0);
oSys.Call("User32::SetWindowTextW", this.Wnd[this.IDSUM].HWND, '=' + this.Val);
SendMessage(this.Wnd[this.IDDEF].HWND, 241 /*BM_SETCHECK*/, this.Val == this.Def, 0);
},
Command:function(nID, nCode, hWnd)
{
if ((nID >= this.IDBUT1) && (nID <= this.IDBUT1))
{
bChanged = 1;
this.Val = 0;
for (var i = this.IDBUT1; i <= this.IDBUT1; ++i)
{
if (SendMessage(this.Wnd[i].HWND, 240 /*BM_GETCHECK*/, 0, 0))
this.Val |= this.Wnd[i].Type;
}
this.SetVal();
}
else if ((nID == this.IDDEF) && SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
{
bChanged = 1;
this.Val = this.Def;
this.SetVal();
}
}
};
var oFixedCharWidth =
{
Def :0,
Wnd :[],
IDTXT :2001,
IDVAL :2002,
IDDEF :2003,
IDNOTE:2004,
Initialize:function()
{
this.Val = SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 120 /*MI_FIXEDCHARWIDTH*/, 0);
if ((this.Val < -1) && (this.Val != -4) && (this.Val != -6))
this.Val = 0;
this.Ini = this.Val;
this.Wnd[this.IDTXT ]={C:'STATIC', S:0x50000000, X:140, Y: 15, W:640, H:78, Txt:'Defines fixed character width. All symbols, including proportional fonts, will be paint in this width.\nSpecial values:\n-1 - font latin character average width.\n-4 - font space width.\n-6 - font latin character maximum width.\n0 - disable fixed width.',
Rus:'Определяет фиксированную ширину символа. Все символы, включая пропорциональные шрифты, будут рисоваться в заданной ширине. Специальные значения:\n-1 - средняя ширина латинских символов в шрифте.\n-4 - ширина пробела в шрифте.\n-6 - максимальная ширина латинских символов в шрифте.\n0 - отключить фиксацию ширины.'};
this.Wnd[this.IDVAL ]={C:'COMBOBOX', S:0x50210003, X:140, Y:100, W: 50, H:21};
this.Wnd[this.IDDEF ]={C:'BUTTON', S:0x50010003, X:140, Y:131, W:640, H:16, Txt:'By default: 0',
Rus:'По умолчанию: 0'};
this.Wnd[this.IDNOTE]={C:'STATIC', S:0x50000000, X:140, Y:157, W:640, H:13, Txt:'Note: changes are applied for a new edit windows.',
Rus:'Замечание: изменения будут применены для новых окон редактирования.'};
},
Apply:function()
{
SendMessage(hMainWnd, 1219 /*AKD_SETMAININFO*/, 120 /*MIS_FIXEDCHARWIDTH*/, this.Val);
},
SetVal:function()
{
SendMessage(this.Wnd[this.IDVAL].HWND, 0x014E /*CB_SETCURSEL*/, SendMessage(this.Wnd[this.IDVAL].HWND, 0x0158 /*CB_FINDSTRINGEXACT*/, -1, this.Val.toString()), 0);
SendMessage(this.Wnd[this.IDDEF].HWND, 241 /*BM_SETCHECK*/, this.Val == this.Def, 0);
},
InitDialog:function()
{
SendMessage(this.Wnd[this.IDVAL].HWND, 0x0143 /*CB_ADDSTRING*/, 0, "-6");
SendMessage(this.Wnd[this.IDVAL].HWND, 0x0143 /*CB_ADDSTRING*/, 0, "-4");
SendMessage(this.Wnd[this.IDVAL].HWND, 0x0143 /*CB_ADDSTRING*/, 0, "-1");
for (var i = 0; i < 201; ++i)
SendMessage(this.Wnd[this.IDVAL].HWND, 0x0143 /*CB_ADDSTRING*/, 0, i.toString());
if (this.Ini > 200)
SendMessage(this.Wnd[this.IDVAL].HWND, 0x0143 /*CB_ADDSTRING*/, 0, this.Ini.toString());
},
Command:function(nID, nCode, hWnd)
{
if (nID == this.IDVAL)
{
if (nCode == 1 /*CBN_SELCHANGE*/)
{
bChanged = 1;
SendMessage(hWnd, 0x0148 /*CB_GETLBTEXT*/, SendMessage(hWnd, 0x0147 /*CB_GETCURSEL*/, 0, 0), lpText);
this.Val = parseInt(AkelPad.MemRead(lpText, 1 /*DT_UNICODE*/));
SendMessage(this.Wnd[this.IDDEF].HWND, 241 /*BM_SETCHECK*/, this.Val == this.Def, 0);
}
else if (nCode == 8 /*CBN_CLOSEUP*/)
bCloseCB = 0;
}
else if ((nID == this.IDDEF) && SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
{
bChanged = 1;
this.Val = this.Def;
this.SetVal();
}
}
};
var oMouseOptions =
{
Def :7,
Wnd :[],
IDTXT :2001,
IDBUT1 :2002,
IDBUT2 :2003,
IDBUT3 :2004,
IDBUT4 :2005,
IDBUT5 :2006,
IDBUT6 :2007,
IDBUT7 :2008,
IDBUT8 :2009,
IDBUT9 :2010,
IDBUT10:2011,
IDDEF :2012,
IDSUM :2013,
Initialize:function()
{
if (! hEditWnd)
SendMessage(hMainWnd, 273 /*WM_COMMAND*/, 4101 /*wParam=MAKEWPARAM(0,IDM_FILE_NEW)*/, 1 /*lParam=TRUE*/);
this.Val = SendMessage(hMainWnd, 1223 /*AKD_GETFRAMEINFO*/, 87 /*FI_MOUSEOPTIONS*/, 0);
this.Ini = this.Val;
if (! hEditWnd)
AkelPad.Command(4318 /*IDM_WINDOW_FRAMECLOSE*/);
this.Wnd[this.IDTXT ]={C:'STATIC', S:0x50000000, X:140, Y: 15, W:640, H:13, Txt:'Defines mouse settings. Set by the sum of members:',
Rus:'Определяет настройки мыши. Задается суммой членов:'};
this.Wnd[this.IDBUT1 ]={C:'BUTTON', S:0x50010003, X:140, Y: 35, W:640, H:16, Type: 1 /*MO_LEFTMARGINSELECTION*/, Txt:'1 - GUI (left click on margin selects line).',
Rus:'1 - GUI (левый клик в отступ выделяет строку).'};
this.Wnd[this.IDBUT2 ]={C:'BUTTON', S:0x50010003, X:140, Y: 55, W:640, H:16, Type: 2 /*MO_RICHEDITMOUSE*/, Txt:'2 - GUI (use RichEdit mouse selection).',
Rus:'2 - GUI (RichEdit выделение мышью).'};
this.Wnd[this.IDBUT3 ]={C:'BUTTON', S:0x50010003, X:140, Y: 75, W:640, H:16, Type: 4 /*MO_MOUSEDRAGGING*/, Txt:'4 - GUI (enable mouse dragging).',
Rus:'4 - GUI (перетаскивание мышью).'};
this.Wnd[this.IDBUT4 ]={C:'BUTTON', S:0x50010003, X:140, Y: 95, W:640, H:16, Type: 8 /*MO_RCLICKMOVECARET*/, Txt:'8 - GUI (right click moves caret).',
Rus:'8 - GUI (правый клик смещает каретку).'};
this.Wnd[this.IDBUT5 ]={C:'BUTTON', S:0x50010003, X:140, Y:115, W:640, H:16, Type: 16 /*MO_NONEWLINEMOUSESELECT*/, Txt:'16 - Triple click and left margin click selects line without newline character(s).',
Rus:'16 - Не выделять новую строку при клике в зону левого отступа, а также при тройном клике.'};
this.Wnd[this.IDBUT6 ]={C:'BUTTON', S:0x50010003, X:140, Y:135, W:640, H:16, Type: 32 /*MO_NOWHEELFONTCHANGE*/, Txt:'32 - Disable font size change using Ctrl+mouse scroll wheel.',
Rus:'32 - Не менять размер шрифта посредством колесика мыши и клавиши Ctrl.'};
this.Wnd[this.IDBUT7 ]={C:'BUTTON', S:0x50010003, X:140, Y:155, W:640, H:16, Type: 64 /*MO_SELUNWRAPLINE*/, Txt:'64 - Line selection with mouse selects all wrapped line.',
Rus:'64 - Выделять мышью всю, разделенную переносами, строку.'};
this.Wnd[this.IDBUT8 ]={C:'BUTTON', S:0x50010003, X:140, Y:175, W:640, H:16, Type:128 /*MO_MBUTTONDOWNNOSCROLL*/, Txt:'128 - No scrolling after middle mouse click.',
Rus:'128 - Не прокручивать окно после клика средней клавишей мыши.'};
this.Wnd[this.IDBUT9 ]={C:'BUTTON', S:0x50010003, X:140, Y:195, W:640, H:16, Type:256 /*MO_INVERTHORZWHEEL*/, Txt:'256 - Invert mouse horizontal wheel.',
Rus:'256 - Инвертировать горизонтальную прокрутку колесиком мыши.'};
this.Wnd[this.IDBUT10]={C:'BUTTON', S:0x50010003, X:140, Y:215, W:640, H:16, Type:512 /*MO_INVERTVERTWHEEL*/, Txt:'512 - Invert mouse vertical wheel.',
Rus:'512 - Инвертировать вертикальную прокрутку колесиком мыши.'};
this.Wnd[this.IDDEF ]={C:'BUTTON', S:0x50010003, X:140, Y:261, W:640, H:16, Txt:'By default: 1+2+4=7',
Rus:'По умолчанию: 1+2+4=7'};
this.Wnd[this.IDSUM ]={C:'STATIC', S:0x50000000, X:150, Y:235, W: 70, H:13};
},
Apply:function()
{
if (! hEditWnd)
SendMessage(hMainWnd, 273 /*WM_COMMAND*/, 4101 /*wParam=MAKEWPARAM(0,IDM_FILE_NEW)*/, 1 /*lParam=TRUE*/);
AkelPad.SetFrameInfo(0, 34 /*FIS_MOUSEOPTIONS*/, this.Val);
if (! hEditWnd)
AkelPad.Command(4318 /*IDM_WINDOW_FRAMECLOSE*/);
},
SetVal:function()
{
for (var i = this.IDBUT1; i <= this.IDBUT10; ++i)
SendMessage(this.Wnd[i].HWND, 241 /*BM_SETCHECK*/, this.Val & this.Wnd[i].Type, 0);
oSys.Call("User32::SetWindowTextW", this.Wnd[this.IDSUM].HWND, '=' + this.Val);
SendMessage(this.Wnd[this.IDDEF].HWND, 241 /*BM_SETCHECK*/, this.Val == this.Def, 0);
},
Command:function(nID, nCode, hWnd)
{
if ((nID >= this.IDBUT1) && (nID <= this.IDBUT10))
{
bChanged = 1;
this.Val = 0;
for (var i = this.IDBUT1; i <= this.IDBUT10; ++i)
{
if (SendMessage(this.Wnd[i].HWND, 240 /*BM_GETCHECK*/, 0, 0))
this.Val |= this.Wnd[i].Type;
}
this.SetVal();
}
else if ((nID == this.IDDEF) && SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
{
bChanged = 1;
this.Val = this.Def;
this.SetVal();
}
}
};
var oPaintOptions =
{
Def :0,
Wnd :[],
IDTXT :2001,
IDBUT1:2002,
IDBUT2:2003,
IDBUT3:2004,
IDBUT4:2005,
IDBUT5:2006,
IDBUT6:2007,
IDBUT7:2008,
IDBUT8:2009,
IDBUT9:2010,
IDDEF :2011,
IDSUM :2012,
IDNOTE:2013,
Initialize:function()
{
this.Val = SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 121 /*MI_PAINTOPTIONS*/, 0);
this.Ini = this.Val;
this.Wnd[this.IDTXT ]={C:'STATIC', S:0x50000000, X:140, Y: 15, W:640, H:13, Txt:'Defines, some text draw settings. Sets by the sum of members:',
Rus:'Определяет некоторые установки по рисованию текста. Задается суммой членов:'};
this.Wnd[this.IDBUT1]={C:'BUTTON', S:0x50012403, X:140, Y: 35, W:640, H:52, Type: 1 /*PAINT_PAINTGROUP*/, Txt:'1 - Paint text by groups of characters (default is character by character). With this flag some text recognition programs could start to work, printer could print faster, but highlighted symbols and combined unicode symbols can be drawn differently and editing of whose characters may become uncomfortable.',
Rus:'1 - Рисование текста по группам символов (по умолчанию посимвольная прорисовка). С этим флагом некоторые программы, использующие графическое распознавание текста, могут начать работать (если не работали), принтер может печатать быстрее, но подсвеченные символы и комбинированные символы юникода могут рисоваться иначе, а также редактирование этих символов может стать некомфортным.'};
this.Wnd[this.IDBUT2]={C:'BUTTON', S:0x50010003, X:140, Y: 93, W:640, H:16, Type: 2 /*PAINT_NONEWLINEDRAW*/, Txt:'2 - Disable drawing new line selection as space character.',
Rus:'2 - Не рисовать выделение перевода строки как пробела.'};
this.Wnd[this.IDBUT3]={C:'BUTTON', S:0x50010003, X:140, Y:113, W:640, H:16, Type: 4 /*PAINT_ENTIRENEWLINEDRAW*/, Txt:'4 - Draw newline selection to right edge of text area.',
Rus:'4 - Рисовать выделение перевода строки до правой границы.'};
this.Wnd[this.IDBUT4]={C:'BUTTON', S:0x50010003, X:140, Y:133, W:640, H:16, Type: 8 /*PAINT_HIDESEL*/, Txt:'8 - Hides the selection when the control loses the input focus.',
Rus:'8 - Скрывать выделение при потере фокуса.'};
this.Wnd[this.IDBUT5]={C:'BUTTON', S:0x50010003, X:140, Y:153, W:640, H:16, Type: 16 /*PAINT_NOMARKERAFTERLASTLINE*/, Txt:'16 - Disable marker painting after last line.',
Rus:'16 - Не рисовать вертикальный маркер после последней строки.'};
this.Wnd[this.IDBUT6]={C:'BUTTON', S:0x50010003, X:140, Y:173, W:640, H:16, Type: 128 /*PAINT_VSCROLLBYLINE*/, Txt:'128 - Unit of vertical scrolling is line (default is pixel).',
Rus:'128 - Высота строки как единица для вертикальной прокрутки (по умолчанию пиксел).'};
this.Wnd[this.IDBUT7]={C:'BUTTON', S:0x50010003, X:140, Y:193, W:640, H:16, Type: 256 /*PAINT_HIDENOSCROLL*/, Txt:'256 - Show scroll bars only when needed.',
Rus:'256 - Скрывать прокрутку текста у окна редактирования, если она не требуется.'};
this.Wnd[this.IDBUT8]={C:'BUTTON', S:0x50010003, X:140, Y:213, W:640, H:16, Type: 512 /*PAINT_STATICEDGE*/, Txt:'512 - Draw thin edit window border.',
Rus:'512 - Рисовать тонкую границу у окна редактирования.'};
this.Wnd[this.IDBUT9]={C:'BUTTON', S:0x50010003, X:140, Y:233, W:640, H:16, Type:1024 /*PAINT_NOEDGE*/, Txt:'1024 - Draw no edit window border.',
Rus:'1024 - Не рисовать границу у окна редактирования.'};
this.Wnd[this.IDDEF ]={C:'BUTTON', S:0x50010003, X:140, Y:279, W:640, H:16, Txt:'By default: 0',
Rus:'По умолчанию: 0'};
this.Wnd[this.IDSUM ]={C:'STATIC', S:0x50000000, X:150, Y:253, W: 70, H:13};
this.Wnd[this.IDNOTE]={C:'STATIC', S:0x50000000, X:140, Y:305, W:640, H:13, Txt:oFixedCharWidth.Wnd[oFixedCharWidth.IDNOTE].Txt,
Rus:oFixedCharWidth.Wnd[oFixedCharWidth.IDNOTE].Rus};
},
Apply:function()
{
SendMessage(hMainWnd, 1219 /*AKD_SETMAININFO*/, 121 /*MIS_PAINTOPTIONS*/, this.Val);
},
SetVal:function()
{
for (var i = this.IDBUT1; i <= this.IDBUT9; ++i)
SendMessage(this.Wnd[i].HWND, 241 /*BM_SETCHECK*/, this.Val & this.Wnd[i].Type, 0);
oSys.Call("User32::SetWindowTextW", this.Wnd[this.IDSUM].HWND, '=' + this.Val);
SendMessage(this.Wnd[this.IDDEF].HWND, 241 /*BM_SETCHECK*/, this.Val == this.Def, 0);
},
Command:function(nID, nCode, hWnd)
{
if ((nID >= this.IDBUT1) && (nID <= this.IDBUT9))
{
bChanged = 1;
this.Val = 0;
for (var i = this.IDBUT1; i <= this.IDBUT9; ++i)
{
if (SendMessage(this.Wnd[i].HWND, 240 /*BM_GETCHECK*/, 0, 0))
this.Val |= this.Wnd[i].Type;
}
this.SetVal();
}
else if ((nID == this.IDDEF) && SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
{
bChanged = 1;
this.Val = this.Def;
this.SetVal();
}
}
};
var oRichEditClass =
{
Def :0,
Wnd :[],
IDTXT :2001,
IDBUT1:2002,
IDBUT2:2003,
IDDEF :2004,
IDNOTE:2005,
Initialize:function()
{
this.Val = SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 125 /*MI_RICHEDITCLASS*/, 0);
this.Ini = this.Val;
this.Wnd[this.IDTXT ]={C:'STATIC', S:0x50000000, X:140, Y: 15, W:640, H:13, Txt:'Defines edit control class name:',
Rus:'Определяет какое имя класса будет у окна редактирования:'};
this.Wnd[this.IDBUT1]={C:'BUTTON', S:0x50010009, X:140, Y: 35, W:640, H:16, Txt:'0 - "AkelEdit".'};
this.Wnd[this.IDBUT2]={C:'BUTTON', S:0x50010009, X:140, Y: 55, W:640, H:16, Txt:'1 - "RichEdit20".'};
this.Wnd[this.IDDEF ]={C:'BUTTON', S:0x50010003, X:140, Y: 81, W:640, H:16, Txt:'By default: 0',
Rus:'По умолчанию: 0'};
this.Wnd[this.IDNOTE]={C:'STATIC', S:0x50000000, X:140, Y:110, W:640, H:13, Txt:oFixedCharWidth.Wnd[oFixedCharWidth.IDNOTE].Txt,
Rus:oFixedCharWidth.Wnd[oFixedCharWidth.IDNOTE].Rus};
},
Apply:function()
{
SendMessage(hMainWnd, 1219 /*AKD_SETMAININFO*/, 125 /*MIS_RICHEDITCLASS*/, this.Val);
},
SetVal:function()
{
for (var i = this.IDBUT1; i <= this.IDBUT2; ++i)
SendMessage(this.Wnd[i].HWND, 241 /*BM_SETCHECK*/, this.Val == i - this.IDBUT1, 0);
SendMessage(this.Wnd[this.IDDEF].HWND, 241 /*BM_SETCHECK*/, this.Val == this.Def, 0);
},
Command:function(nID, nCode, hWnd)
{
if ((nID >= this.IDBUT1) && (nID <= this.IDBUT2))
{
bChanged = 1;
this.Val = nID - this.IDBUT1;
this.SetVal();
SendMessage(aDlg[IDENGB + nLang].HWND, 241 /*BM_SETCHECK*/, 1, 0);
}
else if ((nID == this.IDDEF) && SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
{
bChanged = 1;
this.Val = this.Def;
this.SetVal();
}
else if ((nID == IDENGB) ||(nID == IDRUSB))
this.SetVal();
}
};
var oShowModify =
{
Def :9,
ShowAll:15,
Wnd :[],
IDTXT :2001,
IDBUT1 :2002,
IDBUT2 :2003,
IDBUT3 :2004,
IDBUT4 :2005,
IDDEF :2006,
IDALL :2007,
IDSUM :2008,
Initialize:function()
{
this.Val = SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 110 /*MI_SHOWMODIFY*/, 0);
this.Ini = this.Val;
this.Wnd[this.IDTXT ]={C:'STATIC', S:0x50000000, X:140, Y: 15, W:640, H:13, Txt:'Determines where document changed status will be displayed. Set by the sum of members:',
Rus:'Определяет, где можно будет увидеть, что документ изменен. Задается суммой членов:'};
this.Wnd[this.IDBUT1]={C:'BUTTON', S:0x50010003, X:140, Y: 35, W:640, H:16, Type:1 /*SM_STATUSBAR*/, Txt:'1 - Display "Modified" in status bar.',
Rus:'1 - Отображение "Изменен" в строке состояния.'};
this.Wnd[this.IDBUT2]={C:'BUTTON', S:0x50010003, X:140, Y: 55, W:640, H:16, Type:2 /*SM_MAINTITLE_SDI*/, Txt:'2 - Display asterisk * in main window title (SDI).',
Rus:'2 - Отображение звездочки * в заголовке главного окна (SDI).'};
this.Wnd[this.IDBUT3]={C:'BUTTON', S:0x50010003, X:140, Y: 75, W:640, H:16, Type:4 /*SM_FRAMETITLE_MDI*/, Txt:'4 - Display asterisk * in main window title and in frame window title (MDI/PMDI).',
Rus:'4 - Отображение звездочки * в заголовке главного окна и в заголовке окна вкладки (MDI/PMDI).'};
this.Wnd[this.IDBUT4]={C:'BUTTON', S:0x50010003, X:140, Y: 95, W:640, H:16, Type:8 /*SM_TABTITLE_MDI*/, Txt:'8 - Display asterisk * in tab button name (MDI/PMDI).',
Rus:'8 - Отображение звездочки * в имени кнопки вкладки (MDI/PMDI).'};
this.Wnd[this.IDDEF ]={C:'BUTTON', S:0x50010003, X:140, Y:141, W:640, H:16, Txt:'By default: 1+8=9',
Rus:'По умолчанию: 1+8=9'};
this.Wnd[this.IDALL ]={C:'BUTTON', S:0x50010003, X:140, Y:161, W:640, H:16, Txt:'Show all: 1+2+4+8=15',
Rus:'Отображать везде: 1+2+4+8=15'};
this.Wnd[this.IDSUM ]={C:'STATIC', S:0x50000000, X:150, Y:115, W: 70, H:13};
},
Apply:function()
{
SendMessage(hMainWnd, 1219 /*AKD_SETMAININFO*/, 110 /*MIS_SHOWMODIFY*/, this.Val);
},
SetVal:function()
{
for (var i = this.IDBUT1; i <= this.IDBUT4; ++i)
SendMessage(this.Wnd[i].HWND, 241 /*BM_SETCHECK*/, this.Val & this.Wnd[i].Type, 0);
oSys.Call("User32::SetWindowTextW", this.Wnd[this.IDSUM].HWND, '=' + this.Val);
SendMessage(this.Wnd[this.IDDEF].HWND, 241 /*BM_SETCHECK*/, this.Val == this.Def, 0);
SendMessage(this.Wnd[this.IDALL].HWND, 241 /*BM_SETCHECK*/, this.Val == this.ShowAll, 0);
},
Command:function(nID, nCode, hWnd)
{
if ((nID >= this.IDBUT1) && (nID <= this.IDBUT4))
{
bChanged = 1;
this.Val = 0;
for (var i = this.IDBUT1; i <= this.IDBUT4; ++i)
{
if (SendMessage(this.Wnd[i].HWND, 240 /*BM_GETCHECK*/, 0, 0))
this.Val |= this.Wnd[i].Type;
}
this.SetVal();
}
else if (((nID == this.IDDEF) || (nID == this.IDALL)) && (SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0)))
{
bChanged = 1;
this.Val = (nID == this.IDDEF) ? this.Def : this.ShowAll;
this.SetVal();
}
}
};
var oSingleOpenProgram =
{
Def :1,
Wnd :[],
IDTXT :2001,
IDBUT1:2002,
IDBUT2:2003,
IDDEF :2004,
IDSUM :2005,
Initialize:function()
{
this.Val = SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 153 /*MI_SINGLEOPENPROGRAM*/, 0);
this.Ini = this.Val;
this.Wnd[this.IDTXT ]={C:'STATIC', S:0x50000000, X:140, Y: 15, W:640, H:13, Txt:'Option "Don\'t open a program twice" in MDI/PMDI mode. Set by the sum of members:',
Rus:'Опция "Не открывать программу дважды" в режиме MDI/PMDI. Задается суммой членов:'};
this.Wnd[this.IDBUT1]={C:'BUTTON', S:0x50010003, X:140, Y: 35, W:640, H:16, Type:1 /*SOP_ON*/, Txt:'1 - GUI (option is on).',
Rus:'1 - GUI (опция включена).'};
this.Wnd[this.IDBUT2]={C:'BUTTON', S:0x50010003, X:140, Y: 55, W:640, H:16, Type:2 /*SOP_SAMEEXE*/, Txt:'2 - option works only for the same exe file. Requires run as administrator (UAC).',
Rus:'2 - опция работает только для совпадающего exe файла. Требует запуска от имени администратора (UAC).'};
this.Wnd[this.IDDEF ]={C:'BUTTON', S:0x50010003, X:140, Y:101, W:640, H:16, Txt:'By default: 1',
Rus:'По умолчанию: 1'};
this.Wnd[this.IDSUM ]={C:'STATIC', S:0x50000000, X:150, Y: 75, W: 70, H:13};
},
Apply:function()
{
SendMessage(hMainWnd, 1219 /*AKD_SETMAININFO*/, 153 /*MIS_SINGLEOPENPROGRAM*/, this.Val);
},
SetVal:function()
{
for (var i = this.IDBUT1; i <= this.IDBUT2; ++i)
SendMessage(this.Wnd[i].HWND, 241 /*BM_SETCHECK*/, this.Val & this.Wnd[i].Type, 0);
oSys.Call("User32::SetWindowTextW", this.Wnd[this.IDSUM].HWND, '=' + this.Val);
SendMessage(this.Wnd[this.IDDEF].HWND, 241 /*BM_SETCHECK*/, this.Val == this.Def, 0);
},
Command:function(nID, nCode, hWnd)
{
if ((nID >= this.IDBUT1) && (nID <= this.IDBUT2))
{
bChanged = 1;
this.Val = 0;
for (var i = this.IDBUT1; i <= this.IDBUT2; ++i)
{
if (SendMessage(this.Wnd[i].HWND, 240 /*BM_GETCHECK*/, 0, 0))
this.Val |= this.Wnd[i].Type;
}
this.SetVal();
}
else if ((nID == this.IDDEF) && SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
{
bChanged = 1;
this.Val = this.Def;
this.SetVal();
}
}
};
var oStatusPosType =
{
Def :0,
Wnd :[],
IDTXT :2001,
IDBUT1:2002,
IDBUT2:2003,
IDDEF :2004,
IDSUM :2005,
Initialize:function()
{
this.Val = SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 111 /*MI_STATUSPOSTYPE*/, 0);
this.Ini = this.Val;
this.Wnd[this.IDTXT ]={C:'STATIC', S:0x50000000, X:140, Y: 15, W:640, H:13, Txt:'Defines how status bar statistics will be displayed. Set by the sum of members:',
Rus:'Определяет, как будет отражаться статистика в строке статуса. Задается суммой членов:'};
this.Wnd[this.IDBUT1]={C:'BUTTON', S:0x50010003, X:140, Y: 35, W:640, H:16, Type:1 /*SPT_COLUMN*/, Txt:'1 - "Line:Column". By default: "Line:Symbol".',
Rus:'1 - "Строка:Столбец". По умолчанию: "Строка:Символ".'};
this.Wnd[this.IDBUT2]={C:'BUTTON', S:0x50010003, X:140, Y: 55, W:640, H:16, Type:2 /*SPT_LINEWRAP*/, Txt:'2 - Wrap line numbers. By default: Non-wrap line numbers.',
Rus:'2 - Перенесённые номера строк. По умолчанию: неперенесённые номера строк.'};
this.Wnd[this.IDDEF ]={C:'BUTTON', S:0x50010003, X:140, Y:101, W:640, H:16, Txt:'By default: 0',
Rus:'По умолчанию: 0'};
this.Wnd[this.IDSUM ]={C:'STATIC', S:0x50000000, X:150, Y: 75, W: 70, H:13};
},
Apply:function()
{
SendMessage(hMainWnd, 1219 /*AKD_SETMAININFO*/, 111 /*MIS_STATUSPOSTYPE*/, this.Val);
},
SetVal:function()
{
for (var i = this.IDBUT1; i <= this.IDBUT2; ++i)
SendMessage(this.Wnd[i].HWND, 241 /*BM_SETCHECK*/, this.Val & this.Wnd[i].Type, 0);
oSys.Call("User32::SetWindowTextW", this.Wnd[this.IDSUM].HWND, '=' + this.Val);
SendMessage(this.Wnd[this.IDDEF].HWND, 241 /*BM_SETCHECK*/, this.Val == this.Def, 0);
},
Command:function(nID, nCode, hWnd)
{
if ((nID >= this.IDBUT1) && (nID <= this.IDBUT2))
{
bChanged = 1;
this.Val = 0;
for (var i = this.IDBUT1; i <= this.IDBUT2; ++i)
{
if (SendMessage(this.Wnd[i].HWND, 240 /*BM_GETCHECK*/, 0, 0))
this.Val |= this.Wnd[i].Type;
}
this.SetVal();
}
else if ((nID == this.IDDEF) && SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
{
bChanged = 1;
this.Val = this.Def;
this.SetVal();
}
}
};
var oStatusUserFormat =
{
Val :'',
Def :'',
Wnd :[],
IDTXT:2001,
IDVAL:2002,
IDDEF:2003,
IDED :2004,
Initialize:function()
{
if (SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 112 /*MI_STATUSUSERFORMAT*/, lpText))
this.Val = AkelPad.MemRead(lpText, 1 /*DT_UNICODE*/).replace(/\t/g, '\\t');
this.Ini = this.Val;
this.Wnd[this.IDTXT]={C:'STATIC', S:0x50000000, X:140, Y:15, W:640, H: 13, Txt:'Defines user status bar format:',
Rus:'Определяет формат пользователя для строки состояния:'};
this.Wnd[this.IDVAL]={C:'COMBOBOX', S:0x50010042, X:140, Y:35, W:640, H: 21};
this.Wnd[this.IDDEF]={C:'BUTTON', S:0x50010003, X:140, Y:66, W:640, H: 16, Txt:'By default: "" - format is not defined, additional status bar section is not displayed.',
Rus:'По умолчанию: "" - формат не определен, дополнительная секция строки состояния не отображается.'};
this.Wnd[this.IDED ]={C:'AkelEditW', S:0x50310804, X:140, Y:91, W:640, H:383, Txt:'%[width]\t\tAdd status bar delimiter.\n%Ch\t\t\tCurrent character hex code in file codepage (lowercase).\n%CH\t\t\tCurrent character hex code in file codepage (uppercase).\n%ch\t\t\tCurrent character hex code (lowercase).\n%cH\t\t\tCurrent character hex code (uppercase).\n%cd\t\t\tCurrent character decimal code.\n%cl\t\t\tCurrent character letter.\n%or\t\t\tOffset in symbols. Any newline breaks counted as one symbol (RichEdit).\n%ob\t\t\tOffset in symbols. Newline breaks: \\r\\r\\n - three symbols, \\r\\n - two symbols, \\r - one symbol, \\n - one symbol. Use only if necessary because on large files can cause slowdown.\n%al\t\t\tCount of lines in document.\n%ar\t\t\tCount of symbols in document (RichEdit).\n%lb\t\t\tNumber of first selected line.\n%le\t\t\tNumber of last selected line.\n%ls\t\t\tCount of lines in selection.\n%f\t\t\tFont size.\n%t\t\t\tTabulation size.\n%m\t\t\tColumn marker position.\n%cap[text]\tText displayed when "Caps Lock" is on.\n%num[text]\tText displayed when "Num Lock" is on.\n%se[text]\t\tText displayed when end of the document reached during search.\n%r\t\t\tReplace count after "Replace all".\n%dc\t\t\tCount of all documents (MDI/PMDI).\n%dm\t\t\tCount of modified documents (MDI/PMDI).\n%ds\t\t\tCount of unmodified documents (MDI/PMDI).\n%di\t\t\tActive document index (MDI/PMDI).\n%%\t\t\t% symbol.\nTabulation\tOne tabulation aligns text to center, second tabulation to right edge (use \\t or \\t\\t).\n\nExample: "Symbol:0x%ch%[85]Font:%f%[48]Tab:%t%[38]Marker:%m%[60]Docs:%dm*/%dc"',
Rus:'%[ширина]\tДобавить разделитель в строку состояния.\n%Ch\t\t\tШестнадцатеричный код текущего символа в кодировке файла (нижний регистр).\n%CH\t\t\tШестнадцатеричный код текущего символа в кодировке файла (верхний регистр).\n%ch\t\t\tШестнадцатеричный код текущего символа (нижний регистр).\n%cH\t\t\tШестнадцатеричный код текущего символа (верхний регистр).\n%cd\t\t\tДесятеричный код текущего символа.\n%cl\t\t\tБуква текущего символа.\n%or\t\t\tСмещение в символах. Любые переводы строки считаются за один символ (RichEdit).\n%ob\t\t\tСмещение в символах. Переводы строки: \\r\\r\\n - три символа, \\r\\n - два символа, \\r - один символ, \\n - один символ. Используйте только при необходимости, т.к. на больших файлах может вызывать замедление работы.\n%al\t\t\tКоличество строк в документе.\n%ar\t\t\tКоличество символов в документе (RichEdit).\n%lb\t\t\tНомер первой строки выделения.\n%le\t\t\tНомер последней строки выделения.\n%ls\t\t\tКоличество выделенных строк.\n%f\t\t\tРазмер шрифта.\n%t\t\t\tРазмер табуляции.\n%m\t\t\tРазмер вертикального маркера.\n%cap[текст]\tТекст отображающийся при включенной клавише CapsLock.\n%num[текст]\tТекст отображающийся при включенной клавише NumLock.\n%se[текст]\tТекст отображающийся по достижению конца документа при поиске.\n%r\t\t\tКоличество замен после "Заменить все".\n%dc\t\t\tКоличество всех документов (MDI/PMDI).\n%dm\t\t\tКоличество измененных документов (MDI/PMDI).\n%ds\t\t\tКоличество неизмененных документов (MDI/PMDI).\n%di\t\t\tИндекс активного документа (MDI/PMDI).\n%%\t\t\tСимвол %.\nТабуляция\tПервая табуляция выравнивает текст по центру, вторая по правому краю (\\t или \\t\\t).\n\nПример: "Символ:0x%ch%[88]Шрифт:%f%[62]Таб:%t%[38]Маркер:%m%[64]Док:%dm*/%dc"'};
},
Apply:function()
{
SendMessage(hMainWnd, 1219 /*AKD_SETMAININFO*/, 112 /*MIS_STATUSUSERFORMAT*/, this.Val.replace(/\\t/g, '\t'));
},
SetVal:function()
{
oSys.Call("User32::SetWindowTextW", this.Wnd[this.IDVAL].HWND, this.Val);
SendMessage(this.Wnd[this.IDDEF].HWND, 241 /*BM_SETCHECK*/, this.Val == this.Def, 0);
},
Command:function(nID, nCode, hWnd)
{
if (nID == this.IDVAL)
ProcessCB(hWnd, nCode);
else if ((nID == this.IDDEF) && SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
{
bChanged = 1;
this.Val = this.Def;
this.SetVal();
}
}
};
var oTabNameFind =
{
Val :'',
Def :'',
Wnd :[],
IDTXT :2001,
IDVAL :2002,
IDDEF :2003,
IDED :2004,
IDNOTE:2005,
IDLINK:2006,
Initialize:function()
{
if (SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 133 /*MI_TABNAMEFIND*/, lpText))
this.Val = AkelPad.MemRead(lpText, 1 /*DT_UNICODE*/);
this.Ini = this.Val;
this.Wnd[this.IDTXT ]={C:'STATIC', S:0x50000000, X:140, Y: 15, W:640, H:26, Txt:'Defines regular expression search pattern for tab name in MDI/PMDI mode.\nIf pattern not found, file name displayed without changes. Used with TabNameRep.',
Rus:'Определяет шаблон поиска регулярного выражения для имени вкладки в режиме MDI/PMDI.\nЕсли шаблон не найден, имя файла отображается без изменений. Используется совместно с TabNameRep.'};
this.Wnd[this.IDVAL ]={C:'COMBOBOX', S:0x50010042, X:140, Y: 48, W:640, H:21};
this.Wnd[this.IDDEF ]={C:'BUTTON', S:0x50010003, X:140, Y: 79, W:640, H:16, Txt:'By default: ""',
Rus:'По умолчанию: ""'};
this.Wnd[this.IDED ]={C:'AkelEditW', S:0x50010800, X:140, Y:104, W:640, H:21, Txt:'Example: (.{20}).{3,}(?:\\.([^.]*))?',
Rus:'Пример: (.{20}).{3,}(?:\\.([^.]*))?'};
this.Wnd[this.IDNOTE]={C:'STATIC', S:0x50000000, X:140, Y:138, W:640, H:13, Txt:oFixedCharWidth.Wnd[oFixedCharWidth.IDNOTE].Txt,
Rus:oFixedCharWidth.Wnd[oFixedCharWidth.IDNOTE].Rus};
this.Wnd[this.IDLINK]={C:'SysLink', S:0x50000000, X:140, Y:164, W:640, H:13, Txt:'<a>TabNameRep</a>'};
},
Apply:function()
{
SendMessage(hMainWnd, 1219 /*AKD_SETMAININFO*/, 133 /*MIS_TABNAMEFIND*/, this.Val);
},
SetVal:function()
{
oSys.Call("User32::SetWindowTextW", this.Wnd[this.IDVAL].HWND, this.Val);
SendMessage(this.Wnd[this.IDDEF].HWND, 241 /*BM_SETCHECK*/, this.Val == this.Def, 0);
},
Notify:function(wParam, lParam)
{
if ((wParam == this.IDLINK) && (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 16 : 8), 3 /*DT_DWORD*/) == -2 /*NM_CLICK*/))
{
SetCurSelLV(FindInArray(aParam, "TabNameRep"));
oSys.Call("User32::SetFocus", oTabNameRep.Wnd[oTabNameRep.IDVAL].HWND);
}
},
Command:function(nID, nCode, hWnd)
{
if (nID == this.IDVAL)
ProcessCB(hWnd, nCode);
else if ((nID == this.IDDEF) && SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
{
bChanged = 1;
this.Val = this.Def;
this.SetVal();
}
}
};
var oTabNameRep =
{
Val :'',
Def :'',
Wnd :[],
IDTXT :2001,
IDVAL :2002,
IDDEF :2003,
IDED :2004,
IDNOTE:2005,
IDLINK:2006,
Initialize:function()
{
if (SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 134 /*MI_TABNAMEREP*/, lpText))
this.Val = AkelPad.MemRead(lpText, 1 /*DT_UNICODE*/);
this.Ini = this.Val;
this.Wnd[this.IDTXT ]={C:'STATIC', S:0x50000000, X:140, Y: 15, W:640, H:26, Txt:'Defines regular expression replace pattern for tab name in MDI/PMDI mode.\nUsed with TabNameFind.',
Rus:'Определяет шаблон замены регулярного выражения для имени вкладки в режиме MDI/PMDI.\nИспользуется совместно с TabNameFind.'};
this.Wnd[this.IDVAL ]={C:'COMBOBOX', S:0x50010042, X:140, Y: 48, W:640, H:21};
this.Wnd[this.IDDEF ]={C:'BUTTON', S:0x50010003, X:140, Y: 79, W:640, H:16, Txt:'By default: ""',
Rus:'По умолчанию: ""'};
this.Wnd[this.IDED ]={C:'AkelEditW', S:0x50010800, X:140, Y:104, W:640, H:21, Txt:'Example: \\1...\\2',
Rus:'Пример: \\1...\\2'};
this.Wnd[this.IDNOTE]={C:'STATIC', S:0x50000000, X:140, Y:138, W:640, H:13, Txt:oFixedCharWidth.Wnd[oFixedCharWidth.IDNOTE].Txt,
Rus:oFixedCharWidth.Wnd[oFixedCharWidth.IDNOTE].Rus};
this.Wnd[this.IDLINK]={C:'SysLink', S:0x50000000, X:140, Y:164, W:640, H:13, Txt:'<a>TabNameFind</a>'};
},
Apply:function()
{
SendMessage(hMainWnd, 1219 /*AKD_SETMAININFO*/, 134 /*MIS_TABNAMEREP*/, this.Val);
},
SetVal:function()
{
oSys.Call("User32::SetWindowTextW", this.Wnd[this.IDVAL].HWND, this.Val);
SendMessage(this.Wnd[this.IDDEF].HWND, 241 /*BM_SETCHECK*/, this.Val == this.Def, 0);
},
Notify:function(wParam, lParam)
{
if ((wParam == this.IDLINK) && (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 16 : 8), 3 /*DT_DWORD*/) == -2 /*NM_CLICK*/))
{
SetCurSelLV(FindInArray(aParam, "TabNameFind"));
oSys.Call("User32::SetFocus", oTabNameFind.Wnd[oTabNameFind.IDVAL].HWND);
}
},
Command:function(nID, nCode, hWnd)
{
if (nID == this.IDVAL)
ProcessCB(hWnd, nCode);
else if ((nID == this.IDDEF) && SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
{
bChanged = 1;
this.Val = this.Def;
this.SetVal();
}
}
};
|
Last edited by KDJ on Tue Jul 19, 2016 4:32 pm; edited 21 times in total |
|
Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1929 Location: Poland
|
Posted: Fri Aug 16, 2013 11:14 am Post subject: |
|
|
GUI for manual settings - part 3.
AkelPadManualSettings_part3.js
Code: | var oTabOptionsMDI =
{
Def :131330,
Wnd :[],
IDTXT :2001,
IDBUT1 :2002,
IDBUT2 :2003,
IDBUT3 :2004,
IDBUT4 :2005,
IDBUT5 :2006,
IDBUT6 :2007,
IDBUT7 :2008,
IDBUT8 :2009,
IDBUT9 :2010,
IDBUT10:2011,
IDBUT11:2012,
IDBUT12:2013,
IDBUT13:2014,
IDDEF :2015,
IDSUM :2016,
Initialize:function()
{
this.Val = SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 157 /*MI_TABOPTIONSMDI*/, 0);
this.Ini = this.Val;
this.Wnd[this.IDTXT ]={C:'STATIC', S:0x50000000, X:140, Y: 15, W:640, H:13, Txt:'Defines tabs settings in MDI/PMDI mode. Set by the sum of members:',
Rus:'Определяет настройки вкладок в режиме MDI/PMDI. Задается суммой членов:'};
this.Wnd[this.IDBUT1 ]={C:'BUTTON', S:0x50010003, X:140, Y: 35, W:640, H:16, Type:1 /*TAB_VIEW_NONE*/, Txt:'1 - GUI (tabs are hidden).',
Rus:'1 - GUI (скрыть вкладки).'};
this.Wnd[this.IDBUT2 ]={C:'BUTTON', S:0x50010003, X:140, Y: 55, W:640, H:16, Type:2 /*TAB_VIEW_TOP*/, Txt:'2 - GUI (tabs shown at top of edit window).',
Rus:'2 - GUI (отобразить вкладки сверху).'};
this.Wnd[this.IDBUT3 ]={C:'BUTTON', S:0x50010003, X:140, Y: 75, W:640, H:16, Type:4 /*TAB_VIEW_BOTTOM*/, Txt:'4 - GUI (tabs shown at bottom of edit window).',
Rus:'4 - GUI (отобразить вкладки снизу).'};
this.Wnd[this.IDBUT4 ]={C:'BUTTON', S:0x50010003, X:140, Y: 95, W:640, H:16, Type:256 /*TAB_TYPE_STANDARD*/, Txt:'256 - GUI (standard tab style).',
Rus:'256 - GUI (стандартный стиль).'};
this.Wnd[this.IDBUT5 ]={C:'BUTTON', S:0x50010003, X:140, Y:115, W:640, H:16, Type:512 /*TAB_TYPE_BUTTONS*/, Txt:'512 - GUI (button tab style).',
Rus:'512 - GUI (стиль кнопки).'};
this.Wnd[this.IDBUT6 ]={C:'BUTTON', S:0x50010003, X:140, Y:135, W:640, H:16, Type:1024 /*TAB_TYPE_FLATBUTTONS*/, Txt:'1024 - GUI (flat button tab style).',
Rus:'1024 - GUI (стиль плоской кнопки).'};
this.Wnd[this.IDBUT7 ]={C:'BUTTON', S:0x50010003, X:140, Y:155, W:640, H:16, Type:65536 /*TAB_SWITCH_NEXTPREV*/, Txt:'65536 - GUI (hotkeys transfer focus as next-prev).',
Rus:'65536 - GUI (переключаться между вкладками как Следующая-Предыдущая).'};
this.Wnd[this.IDBUT8 ]={C:'BUTTON', S:0x50010003, X:140, Y:175, W:640, H:16, Type:131072 /*TAB_SWITCH_RIGHTLEFT*/, Txt:'131072 - GUI (hotkeys transfer focus as right-left).',
Rus:'131072 - GUI (переключаться между вкладками как Правая-Левая).'};
this.Wnd[this.IDBUT9 ]={C:'BUTTON', S:0x50010003, X:140, Y:195, W:640, H:16, Type:524288 /*TAB_ADD_AFTERCURRENT*/, Txt:'524288 - create tabs after the current one.',
Rus:'524288 - создавать вкладки сразу после текущей.'};
this.Wnd[this.IDBUT10]={C:'BUTTON', S:0x50010003, X:140, Y:215, W:640, H:16, Type:1048576 /*TAB_NOADD_LBUTTONDBLCLK*/, Txt:'1048576 - disable new tab creation using left button double click on the tab bar.',
Rus:'1048576 - не создавать вкладки двойным кликом левой кнопки по панели вкладок.'};
this.Wnd[this.IDBUT11]={C:'BUTTON', S:0x50010003, X:140, Y:235, W:640, H:16, Type:2097152 /*TAB_NOADD_MBUTTONDOWN*/, Txt:'2097152 - disable new tab creation using middle button click on the tab bar.',
Rus:'2097152 - не создавать вкладки кликом средней кнопки по панели вкладок.'};
this.Wnd[this.IDBUT12]={C:'BUTTON', S:0x50010003, X:140, Y:255, W:640, H:16, Type:4194304 /*TAB_NODEL_LBUTTONDBLCLK*/, Txt:'4194304 - disable close tab using left button double click on the tab.',
Rus:'4194304 - не закрывать вкладки двойным кликом левой кнопки по вкладке.'};
this.Wnd[this.IDBUT13]={C:'BUTTON', S:0x50010003, X:140, Y:275, W:640, H:16, Type:8388608 /*TAB_NODEL_MBUTTONDOWN*/, Txt:'8388608 - disable close tab using middle button click on the tab.',
Rus:'8388608 - не закрывать вкладки кликом средней кнопки по вкладке.'};
this.Wnd[this.IDDEF ]={C:'BUTTON', S:0x50010003, X:140, Y:321, W:640, H:16, Txt:'By default: 2+256+131072=131330',
Rus:'По умолчанию: 2+256+131072=131330'};
this.Wnd[this.IDSUM ]={C:'STATIC', S:0x50000000, X:150, Y:295, W: 70, H:13};
},
Apply:function()
{
SendMessage(hMainWnd, 1219 /*AKD_SETMAININFO*/, 157 /*MIS_TABOPTIONSMDI*/, this.Val);
},
SetVal:function()
{
for (var i = this.IDBUT1; i <= this.IDBUT13; ++i)
SendMessage(this.Wnd[i].HWND, 241 /*BM_SETCHECK*/, this.Val & this.Wnd[i].Type, 0);
oSys.Call("User32::SetWindowTextW", this.Wnd[this.IDSUM].HWND, '=' + this.Val);
SendMessage(this.Wnd[this.IDDEF].HWND, 241 /*BM_SETCHECK*/, this.Val == this.Def, 0);
},
Command:function(nID, nCode, hWnd)
{
if ((nID >= this.IDBUT1) && (nID <= this.IDBUT13))
{
if (nID == this.IDBUT1)
{
if (SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
{
SendMessage(this.Wnd[this.IDBUT2].HWND, 241 /*BM_SETCHECK*/, 0, 0);
SendMessage(this.Wnd[this.IDBUT3].HWND, 241 /*BM_SETCHECK*/, 0, 0);
}
else
SendMessage(this.Wnd[this.IDBUT2].HWND, 241 /*BM_SETCHECK*/, 1, 0);
}
else if (nID == this.IDBUT2)
{
if (SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
{
SendMessage(this.Wnd[this.IDBUT1].HWND, 241 /*BM_SETCHECK*/, 0, 0);
SendMessage(this.Wnd[this.IDBUT3].HWND, 241 /*BM_SETCHECK*/, 0, 0);
}
else
SendMessage(this.Wnd[this.IDBUT3].HWND, 241 /*BM_SETCHECK*/, 1, 0);
}
else if (nID == this.IDBUT3)
{
if (SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
{
SendMessage(this.Wnd[this.IDBUT1].HWND, 241 /*BM_SETCHECK*/, 0, 0);
SendMessage(this.Wnd[this.IDBUT2].HWND, 241 /*BM_SETCHECK*/, 0, 0);
}
else
SendMessage(this.Wnd[this.IDBUT2].HWND, 241 /*BM_SETCHECK*/, 1, 0);
}
else if (nID == this.IDBUT4)
{
if (SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
{
SendMessage(this.Wnd[this.IDBUT5].HWND, 241 /*BM_SETCHECK*/, 0, 0);
SendMessage(this.Wnd[this.IDBUT6].HWND, 241 /*BM_SETCHECK*/, 0, 0);
}
else
SendMessage(this.Wnd[this.IDBUT5].HWND, 241 /*BM_SETCHECK*/, 1, 0);
}
else if (nID == this.IDBUT5)
{
if (SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
{
SendMessage(this.Wnd[this.IDBUT4].HWND, 241 /*BM_SETCHECK*/, 0, 0);
SendMessage(this.Wnd[this.IDBUT6].HWND, 241 /*BM_SETCHECK*/, 0, 0);
}
else
SendMessage(this.Wnd[this.IDBUT6].HWND, 241 /*BM_SETCHECK*/, 1, 0);
}
else if (nID == this.IDBUT6)
{
if (SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
{
SendMessage(this.Wnd[this.IDBUT4].HWND, 241 /*BM_SETCHECK*/, 0, 0);
SendMessage(this.Wnd[this.IDBUT5].HWND, 241 /*BM_SETCHECK*/, 0, 0);
}
else
SendMessage(this.Wnd[this.IDBUT5].HWND, 241 /*BM_SETCHECK*/, 1, 0);
}
else if (nID == this.IDBUT7)
SendMessage(this.Wnd[this.IDBUT8].HWND, 241 /*BM_SETCHECK*/, (! SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0)), 0);
else if (nID == this.IDBUT8)
SendMessage(this.Wnd[this.IDBUT7].HWND, 241 /*BM_SETCHECK*/, (! SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0)), 0);
bChanged = 1;
this.Val = 0;
for (var i = this.IDBUT1; i <= this.IDBUT13; ++i)
{
if (SendMessage(this.Wnd[i].HWND, 240 /*BM_GETCHECK*/, 0, 0))
this.Val |= this.Wnd[i].Type;
}
this.SetVal();
}
else if ((nID == this.IDDEF) && SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
{
bChanged = 1;
this.Val = this.Def;
this.SetVal();
}
}
};
var oUrlCommand =
{
Val :'',
Def :'',
Wnd :[],
IDTXT:2001,
IDVAL:2002,
IDDEF:2003,
IDED :2004,
Initialize:function()
{
if (SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 132 /*MI_URLCOMMAND*/, lpText))
this.Val = AkelPad.MemRead(lpText, 1 /*DT_UNICODE*/);
this.Ini = this.Val;
this.Wnd[this.IDTXT]={C:'STATIC', S:0x50000000, X:140, Y:15, W:640, H:13, Txt:'Defines command for hyperlink click. Herewith variable %u denotes hyperlink text:',
Rus:'Определяет команду для запуска при клике по гиперссылке. При этом переменная %u обозначает текст гиперссылки:'};
this.Wnd[this.IDVAL]={C:'COMBOBOX', S:0x50010042, X:140, Y:35, W:640, H:21};
this.Wnd[this.IDDEF]={C:'BUTTON', S:0x50010003, X:140, Y:66, W:640, H:16, Txt:'By default: "" - hyperlink opens by operating system.',
Rus:'По умолчанию: "" - гиперссылка открывается операционной системой.'};
this.Wnd[this.IDED ]={C:'AkelEditW', S:0x50010800, X:140, Y:91, W:640, H:21, Txt:'Example: Exec(`"%ProgramFiles%\\Mozilla Firefox\\firefox.exe" "%u"`)',
Rus:'Пример: Exec(`"%ProgramFiles%\\Mozilla Firefox\\firefox.exe" "%u"`)'};
},
Apply:function()
{
SendMessage(hMainWnd, 1219 /*AKD_SETMAININFO*/, 132 /*MIS_URLCOMMAND*/, this.Val);
},
SetVal:function()
{
oSys.Call("User32::SetWindowTextW", this.Wnd[this.IDVAL].HWND, this.Val);
SendMessage(this.Wnd[this.IDDEF].HWND, 241 /*BM_SETCHECK*/, this.Val == this.Def, 0);
},
Command:function(nID, nCode, hWnd)
{
if (nID == this.IDVAL)
ProcessCB(hWnd, nCode);
else if ((nID == this.IDDEF) && SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
{
bChanged = 1;
this.Val = this.Def;
this.SetVal();
}
}
};
var oWordBreak =
{
Def :9,
DefAE :111,
Wnd :[],
IDTXT :2001,
IDBUT1 :2002,
IDBUT2 :2003,
IDBUT3 :2004,
IDBUT4 :2005,
IDBUT5 :2006,
IDBUT6 :2007,
IDBUT7 :2008,
IDBUT8 :2009,
IDBUT9 :2010,
IDDEF :2011,
IDDEFAE :2012,
IDENABLE:2013,
IDSUM :2014,
IDNOTE :2015,
Initialize:function()
{
if (! hEditWnd)
SendMessage(hMainWnd, 273 /*WM_COMMAND*/, 4101 /*wParam=MAKEWPARAM(0,IDM_FILE_NEW)*/, 1 /*lParam=TRUE*/);
this.Val = SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 117 /*MI_WORDBREAKCUSTOM*/, 0);
this.Ini = this.Val;
this.Enable = SendMessage(hMainWnd, 1223 /*AKD_GETFRAMEINFO*/, 107 /*FI_WORDDELIMITERSENABLE*/, 0);
this.EnableIni = this.Enable;
if (! hEditWnd)
AkelPad.Command(4318 /*IDM_WINDOW_FRAMECLOSE*/);
this.Wnd[this.IDTXT ]={C:'STATIC', S:0x50000000, X:140, Y: 15, W:640, H:13, Txt:'Defines how the caret on Ctrl+Left/Ctrl+Right will move. Set by the sum of members:',
Rus:'Определяет, как будет перемещаться каретка по Ctrl+Left/Ctrl+Right. Задается суммой членов:'};
this.Wnd[this.IDBUT1 ]={C:'BUTTON', S:0x50010003, X:140, Y: 35, W:640, H:16, Type: 1 /*AEWB_LEFTWORDSTART*/, Txt:'1 - Left movement is stopped, when word start is found.',
Rus:'1 - Движение влево прекращается, когда встречается начало слова.'};
this.Wnd[this.IDBUT2 ]={C:'BUTTON', S:0x50010003, X:140, Y: 55, W:640, H:16, Type: 2 /*AEWB_LEFTWORDEND*/, Txt:'2 - Left movement is stopped, when word end is found.',
Rus:'2 - Движение влево прекращается, когда встречается конец слова.'};
this.Wnd[this.IDBUT3 ]={C:'BUTTON', S:0x50010003, X:140, Y: 75, W:640, H:16, Type: 4 /*AEWB_RIGHTWORDSTART*/, Txt:'4 - Right movement is stopped, when word start is found.',
Rus:'4 - Движение вправо прекращается, когда встречается начало слова.'};
this.Wnd[this.IDBUT4 ]={C:'BUTTON', S:0x50010003, X:140, Y: 95, W:640, H:16, Type: 8 /*AEWB_RIGHTWORDEND*/, Txt:'8 - Right movement is stopped, when word end is found.',
Rus:'8 - Движение вправо прекращается, когда встречается конец слова.'};
this.Wnd[this.IDBUT5 ]={C:'BUTTON', S:0x50010003, X:140, Y:115, W:640, H:16, Type: 16 /*AEWB_STOPSPACESTART*/, Txt:'16 - Movement is stopped, when spacing start is found. Cannot be combined with 64.',
Rus:'16 - Движение прекращается, когда встречается начало серии пробелов. Не может быть использовано совместно с 64.'};
this.Wnd[this.IDBUT6 ]={C:'BUTTON', S:0x50010003, X:140, Y:135, W:640, H:16, Type: 32 /*AEWB_STOPSPACEEND*/, Txt:'32 - Movement is stopped, when spacing end is found. Cannot be combined with 128.',
Rus:'32 - Движение прекращается, когда встречается конец серии пробелов. Не может быть использовано совместно с 128.'};
this.Wnd[this.IDBUT7 ]={C:'BUTTON', S:0x50010003, X:140, Y:155, W:640, H:16, Type: 64 /*AEWB_SKIPSPACESTART*/, Txt:'64 - Movement is continued, when spacing start is found. Cannot be combined with 16.',
Rus:'64 - Движение продолжается, когда встречается начало серии пробелов. Не может быть использовано совместно с 16.'};
this.Wnd[this.IDBUT8 ]={C:'BUTTON', S:0x50010003, X:140, Y:175, W:640, H:16, Type:128 /*AEWB_SKIPSPACEEND*/, Txt:'128 - Movement is continued, when spacing end is found. Cannot be combined with 32.',
Rus:'128 - Движение продолжается, когда встречается конец серии пробелов. Не может быть использовано совместно с 32.'};
this.Wnd[this.IDBUT9 ]={C:'BUTTON', S:0x50010003, X:140, Y:195, W:640, H:16, Type:256 /*AEWB_STOPNEWLINE*/, Txt:'256 - Movement is stopped, when new line is found.',
Rus:'256 - Движение прекращается, когда встречается конец строки.'};
this.Wnd[this.IDDEF ]={C:'BUTTON', S:0x50010003, X:140, Y:241, W:640, H:16, Txt:'By default: 1+8=9 (AkelPad)',
Rus:'По умолчанию: 1+8=9 (AkelPad)'};
this.Wnd[this.IDDEFAE ]={C:'BUTTON', S:0x50010003, X:140, Y:261, W:640, H:16, Txt:'By default: 1+2+4+8+32+64=111 (AkelEdit)',
Rus:'По умолчанию: 1+2+4+8+32+64=111 (AkelEdit)'};
this.Wnd[this.IDENABLE]={C:'BUTTON', S:0x50010003, X:140, Y:281, W:640, H:16, Txt:'Works only if enabled "Word delimiters" in settings (WordDelimitersEnable=1).',
Rus:'Работает только при отмеченном пункте в настройках "Разделители слов" (WordDelimitersEnable=1).'};
this.Wnd[this.IDSUM ]={C:'STATIC', S:0x50000000, X:150, Y:215, W: 70, H:13};
this.Wnd[this.IDNOTE ]={C:'STATIC', S:0x50000000, X:140, Y:310, W:640, H:13, Txt:oFixedCharWidth.Wnd[oFixedCharWidth.IDNOTE].Txt,
Rus:oFixedCharWidth.Wnd[oFixedCharWidth.IDNOTE].Rus};
},
Apply:function()
{
if (! hEditWnd)
SendMessage(hMainWnd, 273 /*WM_COMMAND*/, 4101 /*wParam=MAKEWPARAM(0,IDM_FILE_NEW)*/, 1 /*lParam=TRUE*/);
SendMessage(hMainWnd, 1219 /*AKD_SETMAININFO*/, 117 /*MIS_WORDBREAKCUSTOM*/, this.Val);
AkelPad.SetFrameInfo(0, 54 /*FIS_WORDDELIMITERSENABLE*/, this.Enable);
if (! hEditWnd)
AkelPad.Command(4318 /*IDM_WINDOW_FRAMECLOSE*/);
},
SetVal:function()
{
for (var i = this.IDBUT1; i <= this.IDBUT9; ++i)
SendMessage(this.Wnd[i].HWND, 241 /*BM_SETCHECK*/, this.Val & this.Wnd[i].Type, 0);
oSys.Call("User32::SetWindowTextW", this.Wnd[this.IDSUM].HWND, '=' + this.Val);
SendMessage(this.Wnd[this.IDDEF ].HWND, 241 /*BM_SETCHECK*/, this.Val == this.Def, 0);
SendMessage(this.Wnd[this.IDDEFAE ].HWND, 241 /*BM_SETCHECK*/, this.Val == this.DefAE, 0);
SendMessage(this.Wnd[this.IDENABLE].HWND, 241 /*BM_SETCHECK*/, this.Enable, 0);
},
Command:function(nID, nCode, hWnd)
{
if ((nID >= this.IDBUT1) && (nID <= this.IDBUT9))
{
if ((nID == this.IDBUT5) && SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
SendMessage(this.Wnd[this.IDBUT7].HWND, 241 /*BM_SETCHECK*/, 0, 0);
else if ((nID == this.IDBUT7) && SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
SendMessage(this.Wnd[this.IDBUT5].HWND, 241 /*BM_SETCHECK*/, 0, 0);
else if ((nID == this.IDBUT6) && SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
SendMessage(this.Wnd[this.IDBUT8].HWND, 241 /*BM_SETCHECK*/, 0, 0);
else if ((nID == this.IDBUT8) && SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0))
SendMessage(this.Wnd[this.IDBUT6].HWND, 241 /*BM_SETCHECK*/, 0, 0);
bChanged = 1;
this.Val = 0;
for (var i = this.IDBUT1; i <= this.IDBUT9; ++i)
{
if (SendMessage(this.Wnd[i].HWND, 240 /*BM_GETCHECK*/, 0, 0))
this.Val |= this.Wnd[i].Type;
}
this.SetVal();
}
else if (((nID == this.IDDEF) || (nID == this.IDDEFAE)) && (SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0)))
{
bChanged = 1;
this.Val = (nID == this.IDDEF) ? this.Def : this.DefAE;
this.SetVal();
}
else if (nID == this.IDENABLE)
{
bChanged = 1;
this.Enable = SendMessage(hWnd, 240 /*BM_GETCHECK*/, 0, 0);
}
}
};
var aParam =
[
["AkelAdminResident", oAkelAdminResident],
["AkelUpdaterOptions", oAkelUpdaterOptions, aAkelUpdaterOptions],
["CmdLineBegin", oCmdLineBegin, aCmdLineBegin],
["CmdLineEnd", oCmdLineEnd, aCmdLineEnd],
["DateInsertFormat", oDateInsertFormat, aDateInsertFormat],
["DateLogFormat", oDateLogFormat, aDateLogFormat],
["EditStyle", oEditStyle],
["FixedCharWidth", oFixedCharWidth],
["MouseOptions", oMouseOptions],
["PaintOptions", oPaintOptions],
["RichEditClass", oRichEditClass],
["ShowModify", oShowModify],
["SingleOpenProgram", oSingleOpenProgram],
["StatusPosType", oStatusPosType],
["StatusUserFormat", oStatusUserFormat, aStatusUserFormat],
["TabNameFind", oTabNameFind, aTabNameFind],
["TabNameRep", oTabNameRep, aTabNameRep],
["TabOptionsMDI", oTabOptionsMDI],
["UrlCommand", oUrlCommand, aUrlCommand],
["WordBreak", oWordBreak]
];
for (i = 0; i < aParam.length; ++i)
aParam[i][1].Initialize();
var Scale =
{
Init:function()
{
var hDC = oSys.Call("User32::GetDC", hMainWnd);
this.ScaleX = oSys.Call("Gdi32::GetDeviceCaps", hDC, 88 /*LOGPIXELSX*/);
this.ScaleY = oSys.Call("Gdi32::GetDeviceCaps", hDC, 90 /*LOGPIXELSY*/);
oSys.Call("User32::ReleaseDC", hMainWnd, hDC);
//Align to 16 pixel
this.ScaleX += (16 - this.ScaleX % 16) % 16;
this.ScaleY += (16 - this.ScaleY % 16) % 16;
},
X:function(n) {return oSys.Call("Kernel32::MulDiv", n, this.ScaleX, 96);},
Y:function(n) {return oSys.Call("Kernel32::MulDiv", n, this.ScaleY, 96);}
}
Scale.Init();
var aDlg = [];
var IDNAMELV = 1001;
var IDENGB = 1002;
var IDRUSB = 1003;
var IDRESETB = 1004;
var IDUNDOB = 1005;
var IDAPPLYB = 1006;
var IDOKB = 1007;
var IDCLOSEB = 1008;
aDlg[IDNAMELV]={C:'SysListView32', S:0x5081800D, X: 5, Y: 5, W:120, H:327};
aDlg[IDENGB ]={C:'BUTTON', S:0x50000009, X: 5, Y:342, W: 55, H: 16, Txt:'&English'};
aDlg[IDRUSB ]={C:'BUTTON', S:0x50000009, X:70, Y:342, W: 55, H: 16, Txt:'&Russian'};
aDlg[IDRESETB]={C:'BUTTON', S:0x50000000, X: 5, Y:367, W:120, H: 23, Txt:'&Default all'};
aDlg[IDUNDOB ]={C:'BUTTON', S:0x50000000, X: 5, Y:392, W:120, H: 23, Txt:'&Undo changes'};
aDlg[IDAPPLYB]={C:'BUTTON', S:0x50000000, X: 5, Y:417, W:120, H: 23, Txt:'&Apply'};
aDlg[IDOKB ]={C:'BUTTON', S:0x50000001, X: 5, Y:442, W:120, H: 23, Txt:'OK'};
aDlg[IDCLOSEB]={C:'BUTTON', S:0x50000000, X: 5, Y:467, W:120, H: 23, Txt:'Close'};
var nFX = oSys.Call("User32::GetSystemMetrics", 7 /*SM_CXDLGFRAME*/) * 2;
var nFY = oSys.Call("User32::GetSystemMetrics", 8 /*SM_CYDLGFRAME*/) * 2 + oSys.Call("User32::GetSystemMetrics", 4 /*SM_CYCAPTION*/);
AkelPad.WindowRegisterClass(sClassName);
var hDlg = oSys.Call("User32::CreateWindowExW",
0, //dwExStyle
sClassName, //lpClassName
sScriptName, //lpWindowName
0x90C80000, //dwStyle=WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU
nDlgX, //x
nDlgY, //y
Scale.X(795) + nFX, //nWidth
Scale.Y(495) + nFY, //nHeight
hMainWnd, //hWndParent
0, //hMenu
hInstDLL, //hInstance
DialogCallback); //Script function callback. To use it class must be registered by WindowRegisterClass.
oSys.Call("User32::EnableWindow", hMainWnd, 0);
AkelPad.WindowGetMessage();
AkelPad.WindowUnregisterClass(sClassName);
AkelPad.MemFree(lpText);
AkelPad.MemFree(lpLVITEM);
function DialogCallback(hWnd, uMsg, wParam, lParam)
{
var nID, nCode;
if (uMsg == 1 /*WM_CREATE*/)
{
CreateWindows(hWnd, aDlg, IDNAMELV);
SendMessage(aDlg[IDENGB + nLang].HWND, 241 /*BM_SETCHECK*/, 1, 0);
FillLV();
EnableButtons();
hFocus = aDlg[IDNAMELV].HWND;
}
else if ((uMsg == 6 /*WM_ACTIVATE*/) && (! wParam))
hFocus = oSys.Call("User32::GetFocus");
else if (uMsg == 7 /*WM_SETFOCUS*/)
oSys.Call("User32::SetFocus", hFocus);
else if (uMsg == 15 /*WM_PAINT*/)
PaintFrame();
else if (uMsg == 256 /*WM_KEYDOWN*/)
{
if (wParam == 9 /*VK_TAB*/)
{
hFocus = oSys.Call("User32::GetFocus");
if (Ctrl())
{
oSys.Call("User32::SetFocus", aDlg[IDNAMELV].HWND);
if (Shift())
{
if (nSel > 0)
SetCurSelLV(nSel - 1);
else
SetCurSelLV(aParam.length - 1);
}
else
{
if (nSel < aParam.length - 1)
SetCurSelLV(nSel + 1);
else
SetCurSelLV(0);
}
}
else if ((hFocus == aDlg[IDENGB].HWND) || (hFocus == aDlg[IDRUSB].HWND))
oSys.Call("User32::SetFocus", oSys.Call("User32::GetNextDlgTabItem", hWnd, hFocus, Shift()));
}
else if ((wParam == 13 /*VK_RETURN*/) && IsCloseCB())
PostMessage(hWnd, 273 /*WM_COMMAND*/, IDOKB, 0);
}
else if (uMsg == 260 /*WM_SYSKEYDOWN*/)
{
if ((wParam == 0x2E /*VK_DELETE*/) && aParam[nSel][2] && (! IsCloseCB()))
DeleteFromHistory();
}
else if (uMsg == 0x004E /*WM_NOTIFY*/)
{
if (wParam > 2001)
{
if (aParam[nSel][1].Notify)
aParam[nSel][1].Notify(wParam, lParam);
}
else if (wParam == IDNAMELV)
{
switch (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 16 : 8), 3 /*DT_DWORD*/))
{
case -101: //LVN_ITEMCHANGED
if (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 32 : 20) /*NMLISTVIEW.uNewState*/, 3 /*DT_DWORD*/) & 0x2 /*LVIS_SELECTED*/)
{
DestroyWindows(aParam[nSel][1].Wnd, 2001);
nSel = GetCurSelLV();
CreateWindows(hWnd, aParam[nSel][1].Wnd, 2001);
if (aParam[nSel][2])
FillCB();
if (aParam[nSel][1].InitDialog)
aParam[nSel][1].InitDialog();
aParam[nSel][1].SetVal();
}
break;
case -2: //NM_CLICK
case -3: //NM_DBLCLK
case -5: //NM_RCLICK
case -6: //NM_RDBLCLK
if (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 24 : 12) /*NMITEMACTIVATE.iItem*/, 3 /*DT_DWORD*/) == -1)
SetCurSelLV(GetCurFocLV());
break;
}
}
}
else if (uMsg == 273 /*WM_COMMAND*/)
{
nID = LoWord(wParam);
nCode = HiWord(wParam);
bCloseCB = 1;
if (nID > 2001)
{
if (nCode == 0x0100 /*EN_SETFOCUS*/)
SendMessage(lParam, 3228 /*AEM_SETOPTIONS*/, 2 /*AECOOP_OR*/, 0x00000800 /*AECO_ACTIVELINE*/);
else if (nCode == 0x0200 /*EN_KILLFOCUS*/)
SendMessage(lParam, 3228 /*AEM_SETOPTIONS*/, 4 /*AECOOP_XOR*/, 0x00000800 /*AECO_ACTIVELINE*/);
aParam[nSel][1].Command(nID, nCode, lParam);
EnableButtons();
}
else if ((nID == IDENGB) || (nID == IDRUSB))
{
nLang = nID - IDENGB;
aParam[nSel][1].Command(nID, nCode, lParam);
SetTextInWindows(aParam[nSel][1].Wnd, 2001);
oSys.Call("User32::SetFocus", aDlg[IDNAMELV].HWND);
}
else if (nID == IDRESETB)
{
SetDefPushButton(nID);
ResetAll();
}
else if (nID == IDUNDOB)
{
SetDefPushButton(nID);
UndoAll();
}
else if (nID == IDAPPLYB)
{
SetDefPushButton(nID);
ApplyAll();
}
else if (nID == IDOKB)
{
bSaveHist = 1;
ApplyAll();
PostMessage(hWnd, 16 /*WM_CLOSE*/, 0, 0);
}
else if ((nID == IDCLOSEB) || (nID == 2 /*IDCANCEL*/))
PostMessage(hWnd, 16 /*WM_CLOSE*/, 0, 0);
}
else if (uMsg == 16 /*WM_CLOSE*/)
{
WriteIni();
oSys.Call("User32::EnableWindow", hMainWnd, 1);
oSys.Call("User32::DestroyWindow", hWnd);
}
else if (uMsg == 2 /*WM_DESTROY*/)
oSys.Call("User32::PostQuitMessage", 0);
return 0;
}
function LoWord(nDwNum)
{
return nDwNum & 0xFFFF;
}
function HiWord(nDwNum)
{
return (nDwNum >> 16) & 0xFFFF;
}
function MkLong(nLoWord, nHiWord)
{
return (nLoWord & 0xFFFF) | (nHiWord << 16);
}
function Ctrl()
{
return oSys.Call("User32::GetKeyState", 0x11 /*VK_CONTROL*/) & 0x8000;
}
function Shift()
{
return oSys.Call("User32::GetKeyState", 0x10 /*VK_SHIFT*/) & 0x8000;
}
function SendMessage(hWnd, uMsg, wParam, lParam)
{
return AkelPad.SendMessage(hWnd, uMsg, wParam, lParam);
}
function PostMessage(hWnd, uMsg, wParam, lParam)
{
return oSys.Call("User32::PostMessageW", hWnd, uMsg, wParam, lParam);
}
function GetWindowText(hWnd)
{
oSys.Call("User32::GetWindowTextW", hWnd, lpText, nTextLen);
return AkelPad.MemRead(lpText, 1 /*DT_UNICODE*/);
}
function GetCurFocLV()
{
return SendMessage(aDlg[IDNAMELV].HWND, 0x100C /*LVM_GETNEXTITEM*/, -1, 0x0001 /*LVNI_FOCUSED*/);
}
function GetCurSelLV()
{
return SendMessage(aDlg[IDNAMELV].HWND, 0x100C /*LVM_GETNEXTITEM*/, -1, 0x0002 /*LVNI_SELECTED*/);
}
function SetCurSelLV(nItem)
{
AkelPad.MemCopy(_PtrAdd(lpLVITEM, 12), 0x0003 /*LVIS_SELECTED|LVIS_FOCUSED*/, 3 /*DT_DWORD*/);
AkelPad.MemCopy(_PtrAdd(lpLVITEM, 16), 0x0003 /*LVIS_SELECTED|LVIS_FOCUSED*/, 3 /*DT_DWORD*/);
SendMessage(aDlg[IDNAMELV].HWND, 0x102B /*LVM_SETITEMSTATE*/, nItem, lpLVITEM);
SendMessage(aDlg[IDNAMELV].HWND, 0x1013 /*LVM_ENSUREVISIBLE*/, nItem, 0);
}
function FillLV()
{
var lpLVCOLUMN = AkelPad.MemAlloc(_X64 ? 56 : 44); //sizeof(LVCOLUMN)
var i;
AkelPad.MemCopy(lpLVCOLUMN, 4 /*mask=LVCF_TEXT*/, 3 /*DT_DWORD*/);
AkelPad.MemCopy(_PtrAdd(lpLVCOLUMN, _X64 ? 16 : 12), lpText, 2 /*DT_QWORD*/);
AkelPad.MemCopy(lpText, "Parameter", 1 /*DT_UNICODE*/);
SendMessage(aDlg[IDNAMELV].HWND, 0x1061 /*LVM_INSERTCOLUMNW*/, 0, lpLVCOLUMN);
AkelPad.MemFree(lpLVCOLUMN);
for (i = 0; i < aParam.length; ++i)
{
AkelPad.MemCopy(_PtrAdd(lpLVITEM, 4), i, 3 /*DT_DWORD*/);
AkelPad.MemCopy(lpText, aParam[i][0], 1 /*DT_UNICODE*/);
SendMessage(aDlg[IDNAMELV].HWND, 0x104D /*LVM_INSERTITEMW*/, 0, lpLVITEM);
}
if (nSel < 0)
nSel = 0;
else if (nSel >= aParam.length)
nSel = aParam.length - 1;
SetCurSelLV(nSel);
SendMessage(aDlg[IDNAMELV].HWND, 0x101E /*LVM_SETCOLUMNWIDTH*/, 0, -2 /*LVSCW_AUTOSIZE_USEHEADER*/);
SendMessage(aDlg[IDNAMELV].HWND, 0x1036 /*LVM_SETEXTENDEDLISTVIEWSTYLE*/, 0x0020 /*LVS_EX_FULLROWSELECT*/, 0x0020);
}
function FillCB()
{
var hWndCB = aParam[nSel][1].Wnd[aParam[nSel][1].IDVAL].HWND;
var i;
SendMessage(hWndCB, 321 /*CB_LIMITTEXT*/, nTextLen, 0);
SendMessage(hWndCB, 341 /*CB_SETEXTENDEDUI*/, 1, 0);
for (i = 0; i < aParam[nSel][2].length; ++i)
SendMessage(hWndCB, 0x0143 /*CB_ADDSTRING*/, 0, aParam[nSel][2][i]);
}
function ProcessCB(hWndCB, nCode)
{
var i;
if (nCode == 5 /*CBN_EDITCHANGE*/)
{
bChanged = 1;
aParam[nSel][1].Val = GetWindowText(hWndCB);
SendMessage(aParam[nSel][1].Wnd[aParam[nSel][1].IDDEF].HWND, 241 /*BM_SETCHECK*/, aParam[nSel][1].Val == aParam[nSel][1].Def, 0);
}
else if (nCode == 7 /*CBN_DROPDOWN*/)
{
for (i = 0; i < aParam[nSel][2].length; ++i)
{
if (aParam[nSel][2][i] == aParam[nSel][1].Val)
{
PostMessage(hWndCB, 0x014E /*CB_SETCURSEL*/, i, 0);
break;
}
}
}
else if (nCode == 8 /*CBN_CLOSEUP*/)
{
if ((SendMessage(hWndCB, 0x0148 /*CB_GETLBTEXT*/, SendMessage(hWndCB, 0x0147 /*CB_GETCURSEL*/, 0, 0), lpText) > -1 /*CB_ERR*/) && (aParam[nSel][1].Val != AkelPad.MemRead(lpText, 1 /*DT_UNICODE*/)))
{
bChanged = 1;
aParam[nSel][1].Val = AkelPad.MemRead(lpText, 1 /*DT_UNICODE*/);
oSys.Call("User32::SetWindowTextW", hWndCB, lpText);
SendMessage(hWndCB, 0x0142 /*CB_SETEDITSEL*/, 0, MkLong(0, -1));
SendMessage(aParam[nSel][1].Wnd[aParam[nSel][1].IDDEF].HWND, 241 /*BM_SETCHECK*/, aParam[nSel][1].Val == aParam[nSel][1].Def, 0);
}
}
}
function IsCloseCB()
{
if (aParam[nSel][2])
return (! SendMessage(aParam[nSel][1].Wnd[aParam[nSel][1].IDVAL].HWND, 343 /*CB_GETDROPPEDSTATE*/, 0, 0));
return bCloseCB;
}
function DeleteFromHistory()
{
if (aParam[nSel][2].length)
{
var hWndCB = aParam[nSel][1].Wnd[aParam[nSel][1].IDVAL].HWND;
var nPos = SendMessage(hWndCB, 0x0147 /*CB_GETCURSEL*/, 0, 0);
aParam[nSel][2].splice(nPos, 1);
SendMessage(hWndCB, 0x0144 /*CB_DELETESTRING*/, nPos, 0);
if (aParam[nSel][2].length)
{
if (nPos > aParam[nSel][2].length - 1)
nPos = aParam[nSel][2].length - 1;
SendMessage(hWndCB, 0x014E /*CB_SETCURSEL*/, nPos, 0);
}
else
{
aParam[nSel][1].Val = "";
oSys.Call("User32::SetWindowTextW", hWndCB, "");
SendMessage(aParam[nSel][1].Wnd[aParam[nSel][1].IDDEF].HWND, 241 /*BM_SETCHECK*/, aParam[nSel][1].Val == aParam[nSel][1].Def, 0);
}
}
}
function CreateWindows(hWndParent, aWnd, nFirst)
{
var hGuiFont = oSys.Call("Gdi32::GetStockObject", 17 /*DEFAULT_GUI_FONT*/);
var lpRect = AkelPad.MemAlloc(16); //sizeof(RECT)
var i;
AkelPad.MemCopy(_PtrAdd(lpRect, 0), 2, 3 /*DT_DWORD*/);
AkelPad.MemCopy(_PtrAdd(lpRect, 4), 2, 3 /*DT_DWORD*/);
AkelPad.MemCopy(_PtrAdd(lpRect, 8), 2, 3 /*DT_DWORD*/);
AkelPad.MemCopy(_PtrAdd(lpRect, 12), 2, 3 /*DT_DWORD*/);
for (i = nFirst; i < aWnd.length; ++i)
{
aWnd[i].HWND = oSys.Call("User32::CreateWindowExW",
0, //dwExStyle
aWnd[i].C, //lpClassName
0, //lpWindowName
aWnd[i].S, //dwStyle
Scale.X(aWnd[i].X), //x
Scale.Y(aWnd[i].Y), //y
Scale.X(aWnd[i].W), //nWidth
Scale.Y(aWnd[i].H), //nHeight
hWndParent, //hWndParent
i, //ID
hInstDLL, //hInstance
0); //lpParam
SendMessage(aWnd[i].HWND, 48 /*WM_SETFONT*/, hGuiFont, 1);
if (aWnd[i].C == "AkelEditW")
{
oSys.Call("User32::SetWindowLongW", aWnd[i].HWND, -20 /*GWL_EXSTYLE*/, 0x20000 /*WS_EX_STATICEDGE*/);
oSys.Call("User32::SetWindowPos", aWnd[i].HWND, 0, 0, 0, 0, 0, 0x37 /*SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE*/);
SendMessage(aWnd[i].HWND, 3178 /*AEM_SETRECT*/, 0x02 /*AERC_MARGINS*/, lpRect);
SendMessage(aWnd[i].HWND, 1091 /*EM_SETBKGNDCOLOR*/, 0, oSys.Call("User32::GetSysColor", 15 /*COLOR_BTNFACE*/));
}
}
SetTextInWindows(aWnd, nFirst);
AkelPad.MemFree(lpRect);
}
function SetTextInWindows(aWnd, nFirst)
{
var nPos;
var i;
for (i = nFirst; i < aWnd.length; ++i)
{
if (aWnd[i].Txt)
oSys.Call("User32::SetWindowTextW", aWnd[i].HWND, ((nLang == 1) && aWnd[i].Rus) ? aWnd[i].Rus : aWnd[i].Txt);
if ((aWnd[i].C == "AkelEditW") && (! (aWnd[i].S & 0x4 /*ES_MULTILINE*/)))
{
nPos = aWnd[i].Txt.indexOf(": ");
if (nPos > -1)
{
SendMessage(aWnd[i].HWND, 177 /*EM_SETSEL*/, nPos + 2, -1);
SendMessage(aWnd[i].HWND, 8 /*WM_KILLFOCUS*/, 0, 0);
}
}
}
}
function DestroyWindows(aWnd, nFirst)
{
for (var i = nFirst; i < aWnd.length; ++i)
{
oSys.Call("User32::DestroyWindow", aWnd[i].HWND);
aWnd[i].HWND = 0;
}
}
function ResetAll()
{
if (AkelPad.MessageBox(hDlg, "Set all parameters to default values?", sScriptName, 0x21 /*MB_ICONQUESTION|MB_OKCANCEL*/) == 1 /*IDOK*/)
{
for (var i = 0; i < aParam.length; ++i)
aParam[i][1].Val = aParam[i][1].Def;
aParam[nSel][1].SetVal();
bChanged = 1;
EnableButtons();
}
}
function UndoAll()
{
if (AkelPad.MessageBox(hDlg, "Undo all changes?", sScriptName, 0x21 /*MB_ICONQUESTION|MB_OKCANCEL*/) == 1 /*IDOK*/)
{
for (var i = 0; i < aParam.length; ++i)
{
aParam[i][1].Val = aParam[i][1].Ini;
if ("Enable" in aParam[i][1])
aParam[i][1].Enable = aParam[i][1].EnableIni;
}
aParam[nSel][1].SetVal();
bChanged = 1;
EnableButtons();
}
}
function ApplyAll()
{
hFocus = oSys.Call("User32::GetFocus");
oSys.Call("User32::EnableWindow", hDlg, 0);
oSys.Call("User32::EnableWindow", hMainWnd, 1);
AkelPad.ScriptNoMutex(0x20 /*ULT_UNLOCKSENDMESSAGE*/);
for (var i = 0; i < aParam.length; ++i)
aParam[i][1].Apply();
AkelPad.ScriptNoMutex(0x10 /*ULT_LOCKSENDMESSAGE*/);
oSys.Call("User32::RedrawWindow", hMainWnd, 0, 0, 0x0485 /*RDW_ERASE|RDW_FRAME|RDW_INVALIDATE|RDW_ALLCHILDREN*/);
oSys.Call("User32::EnableWindow", hMainWnd, 0);
oSys.Call("User32::EnableWindow", hDlg, 1);
oSys.Call("User32::SetFocus", hFocus);
bChanged = 0;
EnableButtons();
}
function EnableButtons()
{
var bDefault = 1;
var bInitial = 1;
var i;
for (i = 0; i < aParam.length; ++i)
{
if (aParam[i][1].Val != aParam[i][1].Def)
{
bDefault = 0;
break;
}
}
for (i = 0; i < aParam.length; ++i)
{
if ((aParam[i][1].Val != aParam[i][1].Ini) || (("Enable" in aParam[i][1]) && (aParam[i][1].Enable != aParam[i][1].EnableIni)))
{
bInitial = 0;
break;
}
}
oSys.Call("User32::EnableWindow", aDlg[IDRESETB].HWND, ! bDefault);
oSys.Call("User32::EnableWindow", aDlg[IDUNDOB ].HWND, ! bInitial);
oSys.Call("User32::EnableWindow", aDlg[IDAPPLYB].HWND, bChanged);
}
function SetDefPushButton(nID)
{
if (oSys.Call("User32::GetFocus") == aDlg[nID].HWND)
{
oSys.Call("User32::SetFocus", aDlg[IDNAMELV].HWND);
SendMessage(aDlg[nID ].HWND, 0xF4 /*BM_SETSTYLE*/, 0 /*BS_PUSHBUTTON*/, 1);
SendMessage(aDlg[IDOKB].HWND, 0xF4 /*BM_SETSTYLE*/, 1 /*BS_DEFPUSHBUTTON*/, 1);
}
}
function PaintFrame()
{
var lpPaint = AkelPad.MemAlloc(_X64 ? 72 : 64); //sizeof(PAINTSTRUCT)
var lpRect = AkelPad.MemAlloc(16); //sizeof(RECT)
var hDC = oSys.Call("User32::BeginPaint", hDlg, lpPaint);
AkelPad.MemCopy(_PtrAdd(lpRect, 0), Scale.X(130), 3 /*DT_DWORD*/);
AkelPad.MemCopy(_PtrAdd(lpRect, 4), Scale.Y( 5), 3 /*DT_DWORD*/);
AkelPad.MemCopy(_PtrAdd(lpRect, 8), Scale.X(790), 3 /*DT_DWORD*/);
AkelPad.MemCopy(_PtrAdd(lpRect, 12), Scale.Y(490), 3 /*DT_DWORD*/);
oSys.Call("User32::DrawEdge", hDC, lpRect, 0x9 /*EDGE_BUMP*/, 0x800F /*BF_MONO|BF_RECT*/);
oSys.Call("User32::EndPaint", hDlg, lpPaint);
AkelPad.MemFree(lpPaint);
AkelPad.MemFree(lpRect);
}
function FindInArray(aArray, sText)
{
for (var i = 0; i < aArray.length; ++i)
{
if (aArray[i][0] == sText)
return i;
}
return -1;
}
function ReadIni()
{
try
{
eval(AkelPad.ReadFile(WScript.ScriptFullName.replace(/\.js$/i, ".ini"), 0x10 /*OD_ADT_NOMESSAGES*/, 1200 /*UTF-16LE*/, 1));
}
catch (oError)
{}
}
function WriteIni()
{
var lpRect = AkelPad.MemAlloc(16 /*sizeof(RECT)*/);
var sIniTxt;
var i, n;
oSys.Call("User32::GetWindowRect", hDlg, lpRect);
sIniTxt =
'nDlgX=' + AkelPad.MemRead(_PtrAdd(lpRect, 0), 3 /*DT_DWORD*/) + ';\r\n' +
'nDlgY=' + AkelPad.MemRead(_PtrAdd(lpRect, 4), 3 /*DT_DWORD*/) + ';\r\n' +
'nSel=' + nSel + ';\r\n' +
'nLang=' + nLang + ';\r\n';
for (i = 0; i < aParam.length; ++i)
{
if (aParam[i][2])
{
//add to history
if (bSaveHist && aParam[i][1].Val)
{
for (n = aParam[i][2].length - 1; n >= 0; --n)
{
if (aParam[i][2][n] == aParam[i][1].Val)
aParam[i][2].splice(n, 1);
}
aParam[i][2].unshift(aParam[i][1].Val);
if (aParam[i][2].length > nHistMax)
aParam[i][2].length = nHistMax;
}
sIniTxt += 'a' + aParam[i][0] + '=[';
for (n = 0; n < aParam[i][2].length; ++n)
sIniTxt += '"' + aParam[i][2][n].replace(/[\\"]/g, '\\$&') + '"' + ((n < aParam[i][2].length - 1) ? ',' : '');
sIniTxt += '];\r\n';
}
}
AkelPad.MemFree(lpRect);
AkelPad.WriteFile(WScript.ScriptFullName.replace(/\.js$/i, ".ini"), sIniTxt, sIniTxt.length, 1200 /*UTF-16LE*/, 1);
}
|
Last edited by KDJ on Tue Jul 19, 2016 4:33 pm; edited 20 times in total |
|
Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1929 Location: Poland
|
Posted: Fri Oct 11, 2013 6:37 pm Post subject: |
|
|
Changes AkelPad main window title.
AkelPadTitle.js
Code: | // http://akelpad.sourceforge.net/forum/viewtopic.php?p=22834#22834
// Version: 2016-01-23
// Author: KDJ
//
// *** Changes main window title ***
//
// Usage:
// Call("Scripts::Main", 1, "AkelPadTitle.js", '-t="NoEditMDIPattern" -t0="NoFilePattern" -t1="FilePattern" -m="ModifiedString"')
// Call("Scripts::Main", 1, "AkelPadTitle.js", "1") - run script with default all arguments
// Call("Scripts::Main", 1, "AkelPadTitle.js") - without arguments - closes the script
//
// Arguments:
// -t - title pattern for MDI mode without edit window, default is: -t="%%e"
// -t0 - title pattern for empty tab without opened file, default is: -t0="%%mnew - %%e"
// -t1 - title pattern for tab with opened file, default is: -t1="%%m%%F - %%e"
// -m - modified flag string, default is asterisk: -m="*"
// -a - text displayed, if AkelPad is running as administrator (Win-Vista+), default is: -a="Admin"
//
// -t, -t0, -t1 can contain:
// %%f - current file name without the path
// %%F - full file name with the path (eg: "C:\Programs\TextEditors\AkelPad\AkelFiles\Plugs\Scripts\Include\ShowMenu.js")
// %%F{n} - last n elements in file path (for example: %%F{-3} shows "...\Scripts\Include\ShowMenu.js")
// %%F{k-n} - first k elements and last n elements in file path (for example: %%F{1-3} shows "C:\...\Scripts\Include\ShowMenu.js")
// %%d - directory of current file (eg: "C:\Programs\TextEditors\AkelPad\AkelFiles\Plugs\Scripts\Include\")
// %%d{n} - last n levels of directory (for example: %%d{-3} shows "...\Plugs\Scripts\Include\")
// %%d{k-n} - first k levels and last n levels of directory (for example: %%d{1-3} shows "C:\...\Plugs\Scripts\Include\")
// %%D - disk, eg. "C:"
// %%m - modified flag
// %%e - exe file base name (eg: "AkelPad", "AkelPad_test")
// %%v - AkelPad version (eg: "4.9.7")
// %%b - AkelPad bit version ("x86" or "x64")
// %%w - windows mode ("SDI", "MDI" or "PMDI")
// %%a - AkelPad is running in administrator mode (Win-Vista+)
//
// Notes:
// After first call with any argument, the script resides in the memory.
// Second script call without arguments, restores standard title and closes the script.
//
// For autostart, in AkelPad.ini or registry CmdLineBegin/CmdLineEnd key, need to add eg:
// /Call("Scripts::Main", 1, "AkelPadTitle.js", '-t0="no file%%m - AkelPad" -t1="%%f%%m - AkelPad" -m=" [modified]"')
// /Call("Scripts::Main", 1, "AkelPadTitle.js", '-t="%%e %%v (%%b) - %%w" -t0="%%mnew - %%e %%v (%%b) - %%w" -t1="%%m%%f - %%e %%v (%%b) - %%w"')
var hScript = AkelPad.ScriptHandle(WScript.ScriptName, 3 /*SH_FINDSCRIPT*/);
//script already is running
if (hScript && AkelPad.ScriptHandle(hScript, 13 /*SH_GETMESSAGELOOP*/))
{
if (! WScript.Arguments.length)
AkelPad.ScriptHandle(hScript, 33 /*SH_CLOSESCRIPT*/);
}
else if (WScript.Arguments.length)
{
var oSys = AkelPad.SystemFunction();
var nMDI = AkelPad.IsMDI();
var hMainWnd = AkelPad.GetMainWnd();
var sTitlePat = AkelPad.GetArgValue("t", "%e");
var sTitlePat0 = AkelPad.GetArgValue("t0", "%mnew - %e");
var sTitlePat1 = AkelPad.GetArgValue("t1", "%m%F - %e");
var sModified = AkelPad.GetArgValue("m", "*");
var sAdmin = IsRunningAsAdmin() ? AkelPad.GetArgValue("a", "Admin") : "";
var sExeName = GetExeName();
var sAPVersion = GetAkelPadVersion();
var sBitVersion = _X64 ? "x64" : "x86";
var sWinMode = (nMDI == 0) ? "SDI" : ((nMDI == 1) ? "MDI" : "PMDI");
var hSubClassMain;
var hSubClassFrame;
if (hSubClassMain = AkelPad.WindowSubClass(1 /*WSC_MAINPROC*/, MainCallback,
78 /*WM_NOTIFY*/,
1035 /*AKDN_EDIT_ONSTART*/,
1045 /*AKDN_FRAME_NOWINDOWS*/,
1046 /*AKDN_FRAME_ACTIVATE*/,
1047 /*AKDN_FRAME_DEACTIVATE*/,
1078 /*AKDN_OPENDOCUMENT_FINISH*/,
1080 /*AKDN_SAVEDOCUMENT_FINISH*/))
{
hSubClassFrame = AkelPad.WindowSubClass(3 /*WSC_FRAMEPROC*/, FrameCallback, 78 /*WM_NOTIFY*/, 5 /*WM_SIZE*/);
SetMainTitle();
AkelPad.ScriptNoMutex();
AkelPad.WindowGetMessage();
AkelPad.WindowUnsubClass(1 /*WSC_MAINPROC*/);
if (hSubClassFrame)
AkelPad.WindowUnsubClass(3 /*WSC_FRAMEPROC*/);
RestoreFrameTitle();
RestoreMainTitle();
}
}
function MainCallback(hWnd, uMsg, wParam, lParam)
{
if (uMsg == 78 /*WM_NOTIFY*/)
{
if (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 16 : 8), 3 /*DT_DWORD*/) == 2076 /*AEN_MODIFY*/)
{
AkelPad.WindowNextProc(hSubClassMain, hWnd, uMsg, wParam, lParam);
SetMainTitle();
AkelPad.WindowNoNextProc(hSubClassMain);
}
}
else if ((uMsg == 1035 /*AKDN_EDIT_ONSTART*/) || (uMsg == 1047 /*AKDN_FRAME_DEACTIVATE*/))
RestoreFrameTitle();
else if (uMsg == 1045 /*AKDN_FRAME_NOWINDOWS*/)
SetMainTitle(nMDI == 1 /*WMD_MDI*/);
else if ((uMsg == 1046 /*AKDN_FRAME_ACTIVATE*/) || (uMsg == 1078 /*AKDN_OPENDOCUMENT_FINISH*/) || (uMsg == 1080 /*AKDN_SAVEDOCUMENT_FINISH*/))
SetMainTitle();
return 0;
}
function FrameCallback(hWnd, uMsg, wParam, lParam)
{
if ((uMsg == 78 /*WM_NOTIFY*/) && (AkelPad.MemRead(_PtrAdd(lParam, _X64 ? 16 : 8), 3 /*DT_DWORD*/) == 2076 /*AEN_MODIFY*/))
{
AkelPad.WindowNextProc(hSubClassFrame, hWnd, uMsg, wParam, lParam);
SetMainTitle();
AkelPad.WindowNoNextProc(hSubClassFrame);
}
else if (uMsg == 5 /*WM_SIZE*/)
{
if (wParam == 2 /*SIZE_MAXIMIZED*/)
SetMainTitle();
else
RestoreFrameTitle();
}
return 0;
}
function SetMainTitle(bNoWindows)
{
var hWndFrame = AkelPad.SendMessage(hMainWnd, 1223 /*AKD_GETFRAMEINFO*/, 1 /*FI_WNDEDITPARENT*/, 0 /*current frame*/);
var bModified = AkelPad.GetEditModified(0);
var sFile = AkelPad.GetEditFile(0);
var sFileBase = AkelPad.GetFilePath(sFile, 2 /*CPF_FILENAME*/);
var sDir = AkelPad.GetFilePath(sFile, 1 /*CPF_DIR*/);
var sDisk = sDir.substr(0, 2);
var sPattern;
if (bNoWindows)
sPattern = sTitlePat;
else
{
if ((nMDI == 1 /*WMD_MDI*/) && oSys.Call("User32::IsZoomed", hWndFrame))
//remove frame title
oSys.Call("User32::SetWindowTextW", hWndFrame, "");
if (sFile)
sPattern = sTitlePat1;
else
sPattern = sTitlePat0;
}
oSys.Call("User32::SetWindowTextW", hMainWnd, sPattern.replace(/%d\{-?(\d+)\}|%d\{(\d+)-(\d+)\}|%F\{-?(\d+)\}|%F\{(\d+)-(\d+)\}|%f|%F|%d|%D|%m|%e|%v|%b|%w|%a/g, ReplaceFunc));
function ReplaceFunc()
{
var sParam = arguments[0].charAt(1);
var aPath;
var n1;
var n2;
if (arguments[1] || arguments[2] || arguments[4] || arguments[5])
{
if (! sFile)
return "";
if (arguments[1])
{
n1 = 0;
n2 = parseInt(arguments[1]);
}
else if (arguments[2])
{
n1 = parseInt(arguments[2]);
n2 = parseInt(arguments[3]);
}
else if (arguments[4])
{
n1 = 0;
n2 = parseInt(arguments[4]);
}
else
{
n1 = parseInt(arguments[5]);
n2 = parseInt(arguments[6]);
}
if ((n1 == 0) && (n2 == 0))
return "";
aPath = (sParam == "d") ? sDir.split("\\") : sFile.split("\\");
if ((n1 + n2) >= aPath.length)
return (sParam == "d") ? (sDir + "\\") : sFile;
if (n1 == 0)
return "...\\" + aPath.slice(aPath.length - n2).join("\\") + ((sParam == "d") ? "\\" : "");
if (n2 == 0)
return aPath.slice(0, n1).join("\\") + "\\...";
return aPath.slice(0, n1).join("\\") + "\\...\\" + aPath.slice(aPath.length - n2).join("\\") + ((sParam == "d") ? "\\" : "");
}
if (sParam == "f")
return sFileBase;
if (sParam == "F")
return sFile;
if (sParam == "d")
return sDir + "\\";
if (sParam == "D")
return sDisk;
if (sParam == "m")
return bModified ? sModified : "";
if (sParam == "e")
return sExeName;
if (sParam == "v")
return sAPVersion;
if (sParam == "b")
return sBitVersion;
if (sParam == "w")
return sWinMode;
if (sParam == "a")
return sAdmin;
}
}
function RestoreFrameTitle()
{
if (nMDI == 1 /*WMD_MDI*/)
{
var bModified = AkelPad.GetEditModified(0);
var bShowModify = AkelPad.SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 110 /*MI_SHOWMODIFY*/, 0) & 4 /*SM_FRAMETITLE_MDI*/;
oSys.Call("User32::SetWindowTextW",
AkelPad.SendMessage(hMainWnd, 1223 /*AKD_GETFRAMEINFO*/, 1 /*FI_WNDEDITPARENT*/, 0 /*current frame*/),
AkelPad.GetEditFile(0) + ((bModified && bShowModify) ? "*" : ""));
}
}
function RestoreMainTitle()
{
var sTitle = "AkelPad";
var sFile = AkelPad.GetEditFile(0);
var bModified = AkelPad.GetEditModified(0);
var bShowModify;
if (nMDI == 0 /*WMD_SDI*/)
{
bShowModify = AkelPad.SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 110 /*MI_SHOWMODIFY*/, 0) & 2 /*SM_MAINTITLE_SDI*/;
if (sFile)
sTitle = ((bModified && bShowModify) ? "*" : "") + AkelPad.GetFilePath(sFile, 2 /*CPF_FILENAME*/) + " - " + sTitle;
else if (bModified && bShowModify)
sTitle = "* - " + sTitle;
}
else if (nMDI == 2 /*WMD_PMDI*/)
{
bShowModify = AkelPad.SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 110 /*MI_SHOWMODIFY*/, 0) & 4 /*SM_FRAMETITLE_MDI*/;
if (sFile)
sTitle += " - [" + sFile + ((bModified && bShowModify) ? "*]" : "]");
else if (bModified && bShowModify)
sTitle += " - [*]";
}
oSys.Call("User32::SetWindowTextW", hMainWnd, sTitle);
}
function GetExeName()
{
var lpName = AkelPad.MemAlloc(260 * 2);
var sName;
oSys.Call("Kernel32::GetModuleFileNameW", 0, lpName, 260);
sName = AkelPad.MemRead(lpName, 1 /*DT_UNICODE*/);
AkelPad.MemFree(lpName);
return sName.replace(/.+\\(.+)\..*$/, "$1");
}
function GetAkelPadVersion()
{
var nVer = AkelPad.SendMessage(hMainWnd, 1225 /*AKD_PROGRAMVERSION*/, 0, 0);
var nLoWord = nVer & 0xFFFF;
var nHiWord = (nVer >> 16) & 0xFFFF;
return (nLoWord & 0xFF) + "." + ((nLoWord >> 8) & 0xFF) + "." + (nHiWord & 0xFF);
}
function IsRunningAsAdmin()
{
var bAsAdmin = false;
if (((oSys.Call("Kernel32::GetVersion") & 0xFFFF) & 0xFF) > 5)
{
var lpToken = AkelPad.MemAlloc(_X64 ? 8 : 4);
var lpInfo = AkelPad.MemAlloc(4);
var lpSize = AkelPad.MemAlloc(4);
var hToken;
if (oSys.Call("Advapi32::OpenProcessToken", oSys.Call("Kernel32::GetCurrentProcess"), 0x0008 /*TOKEN_QUERY*/, lpToken))
{
hToken = AkelPad.MemRead(lpToken, 2 /*DT_QWORD*/);
if ((oSys.Call("Advapi32::GetTokenInformation", hToken, 20 /*TokenElevation*/, lpInfo, 4, lpSize)) && AkelPad.MemRead(lpInfo, 3 /*DT_DWORD*/))
bAsAdmin = true;
oSys.Call("Kernel32::CloseHandle", hToken);
}
AkelPad.MemFree(lpToken);
AkelPad.MemFree(lpInfo);
AkelPad.MemFree(lpSize);
}
return bAsAdmin;
}
|
Last edited by KDJ on Sat Jan 23, 2016 7:24 pm; edited 6 times in total |
|
Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1929 Location: Poland
|
Posted: Sat Nov 23, 2013 8:52 pm Post subject: |
|
|
Removes/restores file icons on the tabs (MDI/PMDI).
IconsOnTabs.js
Code: | // http://akelpad.sourceforge.net/forum/viewtopic.php?p=23098#23098
// Version: 2015-03-19
// Author: KDJ
//
// *** Removes/restores file icons on the tabs (MDI/PMDI) ***
//
// Usage:
// Call("Scripts::Main", 1, "IconsOnTabs.js")
//
// Notes:
// First script call, removes the icons from the tabs.
// Second script call, restores the icons.
//
// For autostart, in AkelPad.ini or registry CmdLineBegin/CmdLineEnd key, need to add:
// /Call("Scripts::Main", 1, "IconsOnTabs.js")
if (! AkelPad.IsMDI()) WScript.Quit();
var hMainWnd = AkelPad.GetMainWnd();
var hTab = AkelPad.SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 13 /*MI_WNDTAB*/, 0);
var hImageList = AkelPad.SendMessage(hTab, 0x1302 /*TCM_GETIMAGELIST*/, 0, 0);
var sIniFile = WScript.ScriptFullName.replace(/\.[^.]+$/, ".ini");
var oFSO = new ActiveXObject("Scripting.FileSystemObject");
var oFile;
if (hImageList)
{
oFile = oFSO.OpenTextFile(sIniFile, 2, true, -1);
oFile.Write("hImageList=" + hImageList + ";")
oFile.Close();
AkelPad.SendMessage(hTab, 0x1303 /*TCM_SETIMAGELIST*/, 0, 0);
}
else if (oFSO.FileExists(sIniFile))
{
try
{
eval(AkelPad.ReadFile(sIniFile));
if ((typeof hImageList == "number") && hImageList && AkelPad.SystemFunction().Call("Comctl32::ImageList_GetImageCount", hImageList))
AkelPad.SendMessage(hTab, 0x1303 /*TCM_SETIMAGELIST*/, 0, hImageList);
}
catch (oError)
{
}
}
|
Last edited by KDJ on Thu Mar 19, 2015 6:00 pm; edited 2 times in total |
|
Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1929 Location: Poland
|
Posted: Sat Jan 04, 2014 7:51 pm Post subject: |
|
|
A few operations on the bookmarks.
LineBoardBookmarks.js
Code: | // http://akelpad.sourceforge.net/forum/viewtopic.php?p=23439#23439
// Version: 2016-05-08
// Author: KDJ
//
// *** A few operations on the bookmarks ***
//
// Usage:
// Call("Scripts::Main", 1, "LineBoardBookmarks.js", "Action LineLength")
// Call("Scripts::Main", 1, "LineBoardBookmarks.js") - without argument - show menu on caret position
//
// Arguments:
// Action can be (not case sensitive):
// XB - cut all bookmarked lines
// XU - cut all unmarked lines
// XBS - cut bookmarked lines in selection
// XUS - cut unmarked lines in selection
// CB - copy all bookmarked lines
// CU - copy all unmarked lines
// CBS - copy bookmarked lines in selection
// CUS - copy unmarked lines in selection
// OB - open in new tab all bookmarked lines
// OU - open in new tab all unmarked lines
// OBS - open in new tab bookmarked lines in selection
// OUS - open in new tab unmarked lines in selection
// VB - paste to all bookmarked lines
// VU - paste to all unmarked lines
// VBS - paste to bookmarked lines in selection
// VUS - paste to unmarked lines in selection
// RB - replace all bookmarked lines
// RU - replace all unmarked lines
// RBS - replace bookmarked lines in selection
// RUS - replace unmarked lines in selection
// DB - delete all bookmarked lines
// DU - delete all unmarked lines
// DBS - delete bookmarked lines in selection
// DUS - delete unmarked lines in selection
// S+ - expand selection to nearest bookmarks
// S- - reduce selection to nearest bookmarks
// S+T - expand top of selection to previous bookmark
// S-T - reduce top of selection to next bookmark
// S+B - expand bottom of selection to next bookmark
// S-B - reduce bottom of selection to previous bookmark
// B - bookmark all lines
// BS - bookmark selected lines
// U - unmark all lines
// US - unmark selected lines
// I - inverse all bookmarks
// IS - inverse bookmarks for selected lines
// MC - show menu on caret position (default)
// MM - show menu on mouse cursor position
// LineLength
// number of characters from line, which will be displayed on bookmarks list in option "Go to";
// range is 0 - 512, default 128;
// if 0, only numbers of lines are visible;
// applies only to Action MC and MM
//
// Remarks:
// The script performs operations on entire unwrapped lines. "Word wrap" setting is ignored.
// The script should be saved in Unicode format.
var hMainWnd = AkelPad.GetMainWnd();
var hEditWnd = AkelPad.GetEditWnd();
var sPluginFunc = "LineBoard::Main";
if (! (hEditWnd && AkelPad.IsPluginRunning(sPluginFunc)))
WScript.Quit();
var oSys = AkelPad.SystemFunction();
var bPanelVisible = IsPanelVisible();
var bRulerVisible = IsRulerdVisible();
var nRulerHeight = GetRulerHeight();
var sAction = "";
var nLineLen = 128;
var sAction1, sAction2;
GetLangStrings();
if (WScript.Arguments.length)
{
sAction = WScript.Arguments(0).toUpperCase().replace(/\s+/g, "");
if (WScript.Arguments.length > 1)
{
nLineLen = parseInt(WScript.Arguments(1), 10);
if (isNaN(nLineLen))
nLineLen = 128;
else if (nLineLen < 0)
nLineLen = 0;
else if (nLineLen > 512)
nLineLen = 512;
}
}
if ((! sAction) || (sAction.charAt(0) == "M"))
sAction = Menu(sAction.charAt(1) == "M");
sAction1 = sAction.charAt(1);
sAction2 = sAction.charAt(2);
switch (sAction.charAt(0))
{
case "":
break;
case "X":
CopyOpenDeleteLines(sAction1 == "U", sAction2 == "S", true, false, true);
break;
case "C":
CopyOpenDeleteLines(sAction1 == "U", sAction2 == "S", true, false, false);
break;
case "O":
CopyOpenDeleteLines(sAction1 == "U", sAction2 == "S", false, true, false);
break;
case "V":
PasteReplaceLines(sAction1 == "U", sAction2 == "S", true);
break;
case "R":
PasteReplaceLines(sAction1 == "U", sAction2 == "S", false);
break;
case "D":
CopyOpenDeleteLines(sAction1 == "U", sAction2 == "S", false, false, true);
break;
case "S":
SetSelection(sAction1 == "+", sAction2);
break;
case "B":
BookmarkLines(sAction1 == "S");
break;
case "U":
UnmarkLines(sAction1 == "S");
break;
case "I":
InverseBookmarks(sAction1 == "S");
break;
case "G":
if (sAction1 == "N")
AkelPad.Call(sPluginFunc, 18 /*go to next bookmark*/);
else if (sAction1 == "P")
AkelPad.Call(sPluginFunc, 19 /*go to previous bookmark*/);
else
GoToLine(parseInt(sAction.substr(1), 10));
break;
case "+":
if (sAction1 == "P")
ShowPanel();
else if (sAction1 == "R")
ShowRuler();
break;
case "L":
AkelPad.Call("LineBoard::Settings");
break;
default:
WScript.Echo(sTxtInvalidArg + sAction);
}
function CopyOpenDeleteLines(bUnmarked, bSelection, bCopy, bOpen, bDelete)
{
if ((bOpen && (! AkelPad.IsMDI())) || (bDelete && AkelPad.GetEditReadOnly(0)))
return;
var aLine = GetLines(bUnmarked, bSelection);
var lpIndex = AkelPad.MemAlloc(_X64 ? 24 : 12 /*sizeof(AECHARINDEX)*/);
var sText = "";
var nOffset1, nOffset2;
var i;
if (bDelete)
{
SetRedraw(false);
BeginUndoAction();
}
for (i = aLine.length - 1; i >= 0; --i)
{
if (i in aLine)
{
AkelPad.SendMessage(hEditWnd, 3131 /*AEM_GETLINEINDEX*/, AkelPad.SendMessage(hEditWnd, 3142 /*AEM_GETWRAPLINE*/, i, 0), lpIndex);
nOffset1 = AkelPad.SendMessage(hEditWnd, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpIndex);
AkelPad.SendMessage(hEditWnd, 3130 /*AEM_GETINDEX*/, 19 /*AEGI_WRAPLINEEND*/, lpIndex);
nOffset2 = AkelPad.SendMessage(hEditWnd, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpIndex) + 1;
if (bCopy || bOpen)
sText = AkelPad.GetTextRange(nOffset1, nOffset2, 0 /*new line as is*/) + sText;
if (bDelete)
{
AkelPad.SetSel(nOffset1, nOffset2);
AkelPad.Command(4156 /*IDM_EDIT_CLEAR*/);
}
}
}
AkelPad.MemFree(lpIndex);
if (bCopy)
AkelPad.SetClipboardText(sText);
if (bDelete)
{
SetRedraw(true);
StopUndoAction();
}
if (bOpen && sText)
{
AkelPad.Command(4101 /*IDM_FILE_NEW*/, 1 /*to eliminate conflict with Templates plugin: lParam=true*/);
AkelPad.ReplaceSel(sText);
}
}
function PasteReplaceLines(bUnmarked, bSelection, bPaste)
{
if (AkelPad.GetEditReadOnly(0))
return;
var sText;
if (bPaste)
sText = AkelPad.GetClipboardText();
else
sText = GetReplaceText(bUnmarked, bSelection);
if (sText)
{
var aLine = GetLines(bUnmarked, bSelection);
var lpIndex = AkelPad.MemAlloc(_X64 ? 24 : 12 /*sizeof(AECHARINDEX)*/);
var nOffset1, nOffset2;
var i;
SetRedraw(false);
BeginUndoAction();
for (i = aLine.length - 1; i >= 0; --i)
{
if (i in aLine)
{
AkelPad.SendMessage(hEditWnd, 3131 /*AEM_GETLINEINDEX*/, AkelPad.SendMessage(hEditWnd, 3142 /*AEM_GETWRAPLINE*/, i, 0), lpIndex);
nOffset1 = AkelPad.SendMessage(hEditWnd, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpIndex);
AkelPad.SendMessage(hEditWnd, 3130 /*AEM_GETINDEX*/, 19 /*AEGI_WRAPLINEEND*/, lpIndex);
nOffset2 = AkelPad.SendMessage(hEditWnd, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpIndex);
AkelPad.SetSel(nOffset1, nOffset2);
AkelPad.ReplaceSel(sText);
}
}
AkelPad.MemFree(lpIndex);
SetRedraw(true);
StopUndoAction();
}
}
function GetReplaceText(bUnmarked, bSelection)
{
var sCaption;
var sText;
if (bUnmarked)
{
if (bSelection)
sCaption = sTxtUnLinesSel;
else
sCaption = sTxtUnLinesAll;
}
else
{
if (bSelection)
sCaption = sTxtBookLinesSel;
else
sCaption = sTxtBookLinesAll;
}
if (! bSelection)
sText = AkelPad.GetSelText(0);
sText = AkelPad.InputBox(hMainWnd, sCaption, sTxtReplaceWith, sText);
return sText;
}
function SetSelection(bExpand, sTopBottom)
{
var aNearBook = GetNearBookmarks(bExpand, sTopBottom);
var nSelStart = AkelPad.GetSelStart();
var nSelEnd = AkelPad.GetSelEnd();
var lpIndex = AkelPad.MemAlloc(_X64 ? 24 : 12 /*sizeof(AECHARINDEX)*/);
if (sTopBottom != "B")
{
if (aNearBook[0] >= 0)
{
AkelPad.SendMessage(hEditWnd, 3131 /*AEM_GETLINEINDEX*/, AkelPad.SendMessage(hEditWnd, 3142 /*AEM_GETWRAPLINE*/, aNearBook[0], 0), lpIndex);
nSelStart = AkelPad.SendMessage(hEditWnd, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpIndex);
}
}
if (sTopBottom != "T")
{
if (aNearBook[1] >= 0)
{
AkelPad.SendMessage(hEditWnd, 3131 /*AEM_GETLINEINDEX*/, AkelPad.SendMessage(hEditWnd, 3142 /*AEM_GETWRAPLINE*/, aNearBook[1], 0), lpIndex);
AkelPad.SendMessage(hEditWnd, 3130 /*AEM_GETINDEX*/, 19 /*AEGI_WRAPLINEEND*/, lpIndex);
nSelEnd = AkelPad.SendMessage(hEditWnd, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpIndex);
}
}
AkelPad.MemFree(lpIndex);
if ((nSelStart != AkelPad.GetSelStart()) || (nSelEnd != AkelPad.GetSelEnd()))
AkelPad.SetSel(nSelStart, nSelEnd);
}
function BookmarkLines(bSelection)
{
var nLines = GetLinesCount();
var sBooks = "";
var aBook;
var aSelLine;
var i;
if (bSelection)
{
aBook = GetBookmarksArray();
aSelLine = GetSelLines();
for (i = 0; i < nLines; ++i)
{
if ((i >= aSelLine[0]) && (i <= aSelLine[1]))
sBooks += i + ",";
else
{
if (i in aBook)
sBooks += i + ",";
}
}
}
else
{
for (i = 0; i < nLines; ++i)
sBooks += i + ",";
}
SetBookmarks(sBooks);
}
function UnmarkLines(bSelection)
{
var sBooks = "";
if (bSelection)
{
var aBook = GetBookmarksArray();
var nLines = GetLinesCount();
var aSelLine = GetSelLines();
var i;
for (i = 0; i < nLines; ++i)
{
if ((i < aSelLine[0]) || (i > aSelLine[1]))
{
if (i in aBook)
sBooks += i + ",";
}
}
}
SetBookmarks(sBooks);
}
function InverseBookmarks(bSelection)
{
var nLines = GetLinesCount();
var sBooks = "";
var aBook = GetBookmarksArray();
var aSelLine;
var i;
if (bSelection)
{
aSelLine = GetSelLines();
for (i = 0; i < nLines; ++i)
{
if ((i >= aSelLine[0]) && (i <= aSelLine[1]))
{
if (! (i in aBook))
sBooks += i + ",";
}
else
{
if (i in aBook)
sBooks += i + ",";
}
}
}
else
{
for (i = 0; i < nLines; ++i)
{
if (! (i in aBook))
sBooks += i + ",";
}
}
SetBookmarks(sBooks);
}
function GetLines(bUnmarked, bSelection)
{
var aBook = GetBookmarksArray();
var aLine = [];
var aSelLine;
var nLines;
var i;
if (bSelection)
{
aSelLine = GetSelLines();
if (bUnmarked)
{
for (i = aSelLine[0]; i <= aSelLine[1]; ++i)
{
if (! (i in aBook))
aLine[i] = 0;
}
}
else
{
for (i = aSelLine[0]; i <= aSelLine[1]; ++i)
{
if (i in aBook)
aLine[i] = 0;
}
}
}
else
{
if (bUnmarked)
{
nLines = GetLinesCount();
for (i = 0; i < nLines; ++i)
{
if (! (i in aBook))
aLine[i] = 0;
}
}
else
aLine = aBook;
}
return aLine;
}
function GetLinesCount(bWrap)
{
return AkelPad.SendMessage(hEditWnd, 3129 /*AEM_GETLINENUMBER*/, bWrap ? 0 /*AEGL_LINECOUNT*/ : 11 /*AEGL_LINEUNWRAPCOUNT*/, 0);
}
function GetSelLines()
{
return [AkelPad.SendMessage(hEditWnd, 3143 /*AEM_GETUNWRAPLINE*/, AkelPad.SendMessage(hEditWnd, 3129 /*AEM_GETLINENUMBER*/, 1 /*AEGL_FIRSTSELLINE*/, 0), 0),
AkelPad.SendMessage(hEditWnd, 3143 /*AEM_GETUNWRAPLINE*/, AkelPad.SendMessage(hEditWnd, 3129 /*AEM_GETLINENUMBER*/, 2 /*AEGL_LASTSELLINE*/, 0), 0)];
}
function GetNearBookmarks(bExpand, sTopBottom)
{
var aBook1 = GetBookmarksArray();
var aBook2 = [-1, -1];
var aSelLine = GetSelLines();
var nLines = GetLinesCount();
var i;
if (bExpand)
{
if (sTopBottom != "B")
{
for (i = aSelLine[0] - 1; i >= 0; --i)
{
if (i in aBook1)
{
aBook2[0] = i;
break;
}
}
}
if (sTopBottom != "T")
{
for (i = aSelLine[1] + 1; i < nLines; ++i)
{
if (i in aBook1)
{
aBook2[1] = i;
break;
}
}
}
}
else
{
if (sTopBottom != "B")
{
for (i = aSelLine[0] + 1; i <= aSelLine[1]; ++i)
{
if (i in aBook1)
{
aBook2[0] = i;
break;
}
}
}
if (sTopBottom != "T")
{
for (i = aSelLine[1] - 1; i >= aSelLine[0]; --i)
{
if (i in aBook1)
{
aBook2[1] = i;
break;
}
}
}
}
if ((aBook2[1] >= 0) && (aBook2[0] > aBook2[1]))
aBook2 = [-1, -1];
return aBook2;
}
function GetBookmarksArray()
{
//returns sparse array
var aBook1 = [];
var aBook2 = [];
var lpBookLen = AkelPad.MemAlloc(4 /*sizeof(int)*/);
var lpBookStr;
var sBooks;
var i;
AkelPad.CallW(sPluginFunc, 12, hEditWnd, 0, 0, lpBookLen);
lpBookStr = AkelPad.MemAlloc(AkelPad.MemRead(lpBookLen, 3 /*DT_DWORD*/) * 2 /*sizeof(wchar_t)*/);
AkelPad.CallW(sPluginFunc, 12, hEditWnd, 0, lpBookStr, 0);
sBooks = AkelPad.MemRead(lpBookStr, 1 /*DT_UNICODE*/);
AkelPad.MemFree(lpBookLen);
AkelPad.MemFree(lpBookStr);
if (sBooks)
{
aBook1 = sBooks.split(",");
for (i = 0; i < aBook1.length; ++i)
aBook2[aBook1[i]] = 0;
}
return aBook2;
}
function SetBookmarks(sBooks)
{
//delete all bookmarks
AkelPad.CallW(sPluginFunc, 14, hEditWnd, 0);
//set new bookmarks (works very slow, if amount > 10000)
AkelPad.CallW(sPluginFunc, 13, hEditWnd, 0, sBooks);
}
function SetRedraw(bRedraw)
{
AkelPad.SendMessage(hMainWnd, 11 /*WM_SETREDRAW*/, bRedraw, 0);
AkelPad.SendMessage(hEditWnd, 11 /*WM_SETREDRAW*/, bRedraw, 0);
if (bRedraw)
{
oSys.Call("User32::InvalidateRect", hMainWnd, 0, true);
oSys.Call("User32::InvalidateRect", hEditWnd, 0, true);
}
}
function BeginUndoAction()
{
AkelPad.SendMessage(hEditWnd, 3080 /*AEM_STOPGROUPTYPING*/, 0, 0);
AkelPad.SendMessage(hEditWnd, 3081 /*AEM_BEGINUNDOACTION*/, 0, 0);
}
function StopUndoAction()
{
AkelPad.SendMessage(hEditWnd, 3082 /*AEM_ENDUNDOACTION*/, 0, 0);
AkelPad.SendMessage(hEditWnd, 3080 /*AEM_STOPGROUPTYPING*/, 0, 0);
}
function GoToLine(nLine)
{
if (! isNaN(nLine))
{
var lpIndex = AkelPad.MemAlloc(_X64 ? 24 : 12 /*sizeof(AECHARINDEX)*/);
AkelPad.SendMessage(hEditWnd, 3131 /*AEM_GETLINEINDEX*/, AkelPad.SendMessage(hEditWnd, 3142 /*AEM_GETWRAPLINE*/, nLine, 0), lpIndex);
AkelPad.SendMessage(hEditWnd, 3124 /*AEM_EXSETSEL*/, lpIndex, lpIndex);
AkelPad.MemFree(lpIndex);
}
}
function Menu(bOnCursor)
{
var aMenu1 = [[sTxtBookLinesAll, "B" ],
[sTxtUnLinesAll, "U" ],
[""],
[sTxtBookLinesSel, "BS"],
[sTxtUnLinesSel, "US"]];
var aMenu2 = [[sTxtExpand, "+" ],
[sTxtExpandTop, "+T"],
[sTxtExpandBottom, "+B"],
[""],
[sTxtReduce, "-" ],
[sTxtReduceTop, "-T"],
[sTxtReduceBottom, "-B"]];
var aMenu3 = [[sTxtAll, "" ],
[sTxtInSel, "S"]];
var aMenu4 = GetBookmarksListArray();
var aMenu = [[sTxtCut, "X", aMenu1, ! AkelPad.GetEditReadOnly(0)],
[sTxtCopy, "C", aMenu1, true],
[sTxtOpenInTab, "O", aMenu1, AkelPad.IsMDI()],
[sTxtPasteTo, "V", aMenu1, AkelPad.SendMessage(hEditWnd, 3035 /*AEM_CANPASTE*/, 0, 0)],
[sTxtReplace, "R", aMenu1, ! AkelPad.GetEditReadOnly(0)],
[sTxtDelete, "D", aMenu1, ! AkelPad.GetEditReadOnly(0)],
[""],
[sTxtSelection, "S", aMenu2, true],
[""],
[sTxtBookmarkLines, "B", aMenu3, true],
[sTxtUnmarkLines, "U", aMenu3, true],
[sTxtInverseBooks, "I", aMenu3, true],
[""],
[sTxtGoTo, "G", aMenu4, aMenu4.length],
[sTxtNext, "GN", 0, aMenu4.length],
[sTxtPrevious, "GP", 0, aMenu4.length],
[""],
[sTxtShowPanel, "+P", 0, true, bPanelVisible],
[sTxtShowRuler, "+R", 0, true, bPanelVisible && bRulerVisible && nRulerHeight],
[sTxtLBSettings, "L", 0, true]];
var sReturn = "";
var hMenu;
var nFlag;
var nMenuID;
var lpPoint;
var nX, nY;
var hWndHid;
var nCmd, nCmd1, nCmd2;
var i, n;
for (i = 0; i < aMenu.length; ++i)
{
if (aMenu[i][0] && aMenu[i][2])
{
aMenu[i].Handle = oSys.Call("User32::CreatePopupMenu");
for (n = 0; n < aMenu[i][2].length; ++n)
oSys.Call("User32::AppendMenuW", aMenu[i].Handle, aMenu[i][2][n][0] ? 0 /*MF_STRING*/ : 0x0800 /*MF_SEPARATOR*/, ((i + 1) << 24) | n, aMenu[i][2][n][0]);
}
}
hMenu = oSys.Call("User32::CreatePopupMenu");
for (i = 0; i < aMenu.length; ++i)
{
if (aMenu[i].Handle)
{
nFlag = 0x10 /*MF_POPUP*/;
if (! aMenu[i][3])
nFlag |= 0x01 /*MF_GRAYED*/;
nMenuID = aMenu[i].Handle;
}
else if (aMenu[i][0])
{
nFlag = 0 /*MF_STRING*/;
if (! aMenu[i][3])
nFlag |= 0x01 /*MF_GRAYED*/;
if (aMenu[i][4])
nFlag |= 0x08 /*MF_CHECKED*/;
nMenuID = (i + 1) << 24;
}
else
nFlag = 0x0800 /*MF_SEPARATOR*/;
oSys.Call("User32::AppendMenuW", hMenu, nFlag, nMenuID, aMenu[i][0]);
}
lpPoint = AkelPad.MemAlloc(8 /*sizeof(POINT)*/);
if (bOnCursor)
{
oSys.Call("User32::GetCursorPos", lpPoint);
nX = AkelPad.MemRead(_PtrAdd(lpPoint, 0), 3 /*DT_DWORD*/);
nY = AkelPad.MemRead(_PtrAdd(lpPoint, 4), 3 /*DT_DWORD*/);
}
else
{
AkelPad.SendMessage(hEditWnd, 3190 /*AEM_GETCARETPOS*/, lpPoint, 0);
oSys.Call("User32::ClientToScreen", hEditWnd, lpPoint);
nX = AkelPad.MemRead(_PtrAdd(lpPoint, 0), 3 /*DT_DWORD*/);
nY = AkelPad.MemRead(_PtrAdd(lpPoint, 4), 3 /*DT_DWORD*/) + AkelPad.SendMessage(hEditWnd, 3188 /*AEM_GETCHARSIZE*/, 0 /*AECS_HEIGHT*/, 0);
}
AkelPad.MemFree(lpPoint);
hWndHid = oSys.Call("User32::CreateWindowExW", 0, "STATIC", 0, 0x50000000 /*WS_VISIBLE|WS_CHILD*/, 0, 0, 0, 0, hEditWnd, 0, AkelPad.GetInstanceDll(), 0);
oSys.Call("User32::SetFocus", hWndHid);
nCmd = oSys.Call("User32::TrackPopupMenu", hMenu, 0x0180 /*TPM_RETURNCMD|TPM_NONOTIFY*/, nX, nY, 0, hWndHid, 0);
for (i = 0; i < aMenu.length; ++i)
oSys.Call("User32::DestroyMenu", aMenu[i].Handle);
oSys.Call("User32::DestroyMenu", hMenu);
oSys.Call("User32::DestroyWindow", hWndHid);
if (nCmd)
{
nCmd1 = ((nCmd >> 24) & 0xFFFFFF) - 1;
nCmd2 = nCmd & 0xFFFFFF;
sReturn = aMenu[nCmd1][1];
if (aMenu[nCmd1][2])
sReturn += aMenu[nCmd1][2][nCmd2][1];
}
return sReturn;
}
function GetBookmarksListArray()
{
var aBook1 = GetBookmarksArray();
var aBook2 = [];
var bLineWrap = AkelPad.SendMessage(hEditWnd, 3241 /*AEM_GETWORDWRAP*/, 0, 0) && (AkelPad.SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 111 /*MI_STATUSPOSTYPE*/, 0) & 2 /*SPT_LINEWRAP*/);
var nNumLen = GetLinesCount(bLineWrap).toString().length;
var lpIndex = AkelPad.MemAlloc(_X64 ? 24 : 12 /*sizeof(AECHARINDEX)*/);
var sNumber;
var nOffset1, nOffset2;
var i;
for (i in aBook1)
{
sNumber = (bLineWrap ? AkelPad.SendMessage(hEditWnd, 3142 /*AEM_GETWRAPLINE*/, parseInt(i), 0) + 1 : parseInt(i) + 1).toString();
while (sNumber.length < nNumLen)
sNumber = "0" + sNumber;
AkelPad.SendMessage(hEditWnd, 3131 /*AEM_GETLINEINDEX*/, AkelPad.SendMessage(hEditWnd, 3142 /*AEM_GETWRAPLINE*/, parseInt(i), 0), lpIndex);
nOffset1 = AkelPad.SendMessage(hEditWnd, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpIndex);
AkelPad.SendMessage(hEditWnd, 3130 /*AEM_GETINDEX*/, 19 /*AEGI_WRAPLINEEND*/, lpIndex);
nOffset2 = AkelPad.SendMessage(hEditWnd, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpIndex);
aBook2.push([sNumber + ": " + AkelPad.GetTextRange(nOffset1, nOffset2).replace(/^\s+/, "").substr(0, nLineLen), i]);
}
AkelPad.MemFree(lpIndex);
return aBook2;
}
function IsPanelVisible()
{
var lpVisible = AkelPad.MemAlloc(4 /*sizeof(BOOL)*/);
var bVisible;
AkelPad.CallW(sPluginFunc, 4, lpVisible);
bVisible = AkelPad.MemRead(lpVisible, 3 /*DT_DWORD*/);
AkelPad.MemFree(lpVisible);
return bVisible;
}
function IsRulerdVisible()
{
var lpHeight = AkelPad.MemAlloc(4 /*sizeof(int)*/);
var lpVisible = AkelPad.MemAlloc(4 /*sizeof(BOOL)*/);
var bVisible;
AkelPad.CallW(sPluginFunc, 2, lpHeight, lpVisible);
bVisible = AkelPad.MemRead(lpVisible, 3 /*DT_DWORD*/);
AkelPad.MemFree(lpHeight);
AkelPad.MemFree(lpVisible);
return bVisible;
}
function GetRulerHeight()
{
var lpHeight = AkelPad.MemAlloc(4 /*sizeof(int)*/);
var nHeight;
AkelPad.CallW(sPluginFunc, 2, lpHeight);
nHeight = AkelPad.MemRead(lpHeight, 3 /*DT_DWORD*/);
AkelPad.MemFree(lpHeight);
return nHeight;
}
function SetRulerHeight(nHeight)
{
//if nHeight==-1, then invert ruler visibility
AkelPad.CallW(sPluginFunc, 3, nHeight);
}
function ShowPanel()
{
AkelPad.CallW(sPluginFunc, 4); //show/hide panel
}
function ShowRuler()
{
if (bPanelVisible && bRulerVisible && nRulerHeight)
SetRulerHeight(-1);
else
{
if (! bPanelVisible)
ShowPanel();
if (! bRulerVisible)
SetRulerHeight(-1);
if (! nRulerHeight)
SetRulerHeight(17);
}
}
function GetLangStrings()
{
if (AkelPad.GetLangId(0 /*LANGID_FULL*/) == 1045 /*Polish*/)
{
sTxtInvalidArg = "Błędny argument: ";
sTxtCut = "Wytnij";
sTxtCopy = "Kopiuj";
sTxtOpenInTab = "Otwórz na nowej karcie";
sTxtPasteTo = "Wklej do";
sTxtReplace = "Zamień";
sTxtDelete = "Usuń";
sTxtSelection = "Zaznaczenie";
sTxtBookmarkLines = "Wstaw zakładki";
sTxtUnmarkLines = "Usuń zakładki";
sTxtInverseBooks = "Odwróć zakładki";
sTxtGoTo = "Przejdź do";
sTxtNext = "Następna";
sTxtPrevious = "Poprzednia";
sTxtShowPanel = "Pokaż panel";
sTxtShowRuler = "Pokaż linijkę";
sTxtLBSettings = "Ustawienia LineBoard...";
sTxtBookLinesAll = "Wszystkie wiersze z zakładkami";
sTxtUnLinesAll = "Wszystkie wiersze bez zakładek";
sTxtBookLinesSel = "Wiersze z zakładkami w zaznaczeniu";
sTxtUnLinesSel = "Wiersze bez zakładek w zaznaczeniu";
sTxtExpand = "Rozszerz do najbliższych zakładek";
sTxtExpandTop = "Rozszerz na górze do poprzedniej zakładki";
sTxtExpandBottom = "Rozszerz na dole do następnej zakładki";
sTxtReduce = "Zmniejsz do najbliższych zakładek";
sTxtReduceTop = "Zmniejsz na górze do następnej zakładki";
sTxtReduceBottom = "Zmniejsz na dole do poprzedniej zakładki";
sTxtAll = "We wszystkich wierszach";
sTxtInSel = "W zaznaczeniu";
sTxtReplaceWith = "zamień na:";
}
else if (AkelPad.GetLangId(0 /*LANGID_FULL*/) == 1049 /*Russian*/)
{
//translated by Skif_off
sTxtInvalidArg = "Неверный параметр: ";
sTxtCut = "Вырезать строки";
sTxtCopy = "Копировать строки";
sTxtOpenInTab = "Открыть в новой вкладке";
sTxtPasteTo = "Вставить в (переписать) строки";
sTxtReplace = "Заменить строки";
sTxtDelete = "Удалить строки";
sTxtSelection = "Выделенные строки";
sTxtBookmarkLines = "Снабдить строки закладками";
sTxtUnmarkLines = "Убрать закладки";
sTxtInverseBooks = "Инвертировать закладки";
sTxtGoTo = "Перейти к";
sTxtNext = "Следующая";
sTxtPrevious = "Предыдущая";
sTxtShowPanel = "Показать панель";
sTxtShowRuler = "Показать линейку";
sTxtLBSettings = "Настройки плагина LineBoard...";
sTxtBookLinesAll = "С закладками";
sTxtUnLinesAll = "Без закладок";
sTxtBookLinesSel = "С закладками в выделенном";
sTxtUnLinesSel = "Без закладок в выделенном";
sTxtExpand = "Расширить к ближайшей закладке";
sTxtExpandTop = "Расширить вверх к предыдущей закладке";
sTxtExpandBottom = "Расширить вниз к следующей закладке";
sTxtReduce = "Уменьшить к ближайшей закладке";
sTxtReduceTop = "Уменьшить сверху к следующей закладке";
sTxtReduceBottom = "Уменьшить снизу к предыдущей закладке";
sTxtAll = "Все";
sTxtInSel = "В выделенном";
sTxtReplaceWith = "заменить на:";
}
else
{
sTxtInvalidArg = "Invalid argument: ";
sTxtCut = "Cut";
sTxtCopy = "Copy";
sTxtOpenInTab = "Open in new tab";
sTxtPasteTo = "Paste to";
sTxtReplace = "Replace";
sTxtDelete = "Delete";
sTxtSelection = "Selection";
sTxtBookmarkLines = "Bookmark lines";
sTxtUnmarkLines = "Unmark lines";
sTxtInverseBooks = "Inverse bookmarks";
sTxtGoTo = "Go to";
sTxtNext = "Next";
sTxtPrevious = "Previous";
sTxtShowPanel = "Show panel";
sTxtShowRuler = "Show ruler";
sTxtLBSettings = "LineBoard settings...";
sTxtBookLinesAll = "All bookmarked lines";
sTxtUnLinesAll = "All unmarked lines";
sTxtBookLinesSel = "Bookmarked lines in selection";
sTxtUnLinesSel = "Unmarked lines in selection";
sTxtExpand = "Expand to nearest bookmarks";
sTxtExpandTop = "Expand top to previous bookmark";
sTxtExpandBottom = "Expand bottom to next bookmark";
sTxtReduce = "Reduce to nearest bookmarks";
sTxtReduceTop = "Reduce top to next bookmark";
sTxtReduceBottom = "Reduce bottom to previous bookmark";
sTxtAll = "All";
sTxtInSel = "In selection";
sTxtReplaceWith = "replace with:";
}
}
|
Last edited by KDJ on Sun May 08, 2016 5:26 pm; edited 7 times in total |
|
Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1929 Location: Poland
|
Posted: Sun Jan 05, 2014 10:55 pm Post subject: |
|
|
Turn on/off LineBoard ruler.
LineBoardRulerOnOff.js
Code: | // http://akelpad.sourceforge.net/forum/viewtopic.php?p=23454#23454
// Version: 2015-01-06
// Author: KDJ
//
// *** Turn on/off LineBoard ruler ***
//
// Usage:
// Call("Scripts::Main", 1, "LineBoardRulerOnOff.js", "nHeight")
//
// "nHeight"
// Ruler height in pixels when visible. If < 1 or > 99 or ommited (and in plugin settings is 0), is set to default value 17.
if (! AkelPad.GetEditWnd())
WScript.Quit();
var sPluginFile = AkelPad.GetAkelDir(4 /*ADTYPE_PLUGS*/) + "\\LineBoard.dll";
var sPluginFunc = "LineBoard::Main";
var nArgHeight;
var nCurHeight;
var bPanelVisible;
var bRulerVisible;
if (WScript.Arguments.length)
nArgHeight = parseInt(WScript.Arguments(0), 10);
if (isNaN(nArgHeight) || (nArgHeight < 1) || (nArgHeight > 99))
nArgHeight = 0;
if (AkelPad.IsPluginRunning(sPluginFunc))
{
bPanelVisible = IsPanelVisible();
bRulerVisible = IsRulerdVisible();
nCurHeight = GetRulerHeight();
if (bPanelVisible && bRulerVisible && nCurHeight)
SetRulerHeight(-1);
else
ShowRuler();
}
else
{
if (new ActiveXObject("Scripting.FileSystemObject").FileExists(sPluginFile))
{
if (AkelPad.CallW(sPluginFunc, 1) > 0)
{
bPanelVisible = IsPanelVisible();
bRulerVisible = IsRulerdVisible();
nCurHeight = GetRulerHeight();
ShowRuler();
}
}
else
WScript.Echo("File not exists: " + sPluginFile);
}
function IsPanelVisible()
{
var lpVisible = AkelPad.MemAlloc(4 /*sizeof(BOOL)*/);
var bVisible;
AkelPad.CallW(sPluginFunc, 4, lpVisible);
bVisible = AkelPad.MemRead(lpVisible, 3 /*DT_DWORD*/);
AkelPad.MemFree(lpVisible);
return bVisible;
}
function IsRulerdVisible()
{
var lpHeight = AkelPad.MemAlloc(4 /*sizeof(int)*/);
var lpVisible = AkelPad.MemAlloc(4 /*sizeof(BOOL)*/);
var bVisible;
AkelPad.CallW(sPluginFunc, 2, lpHeight, lpVisible);
bVisible = AkelPad.MemRead(lpVisible, 3 /*DT_DWORD*/);
AkelPad.MemFree(lpHeight);
AkelPad.MemFree(lpVisible);
return bVisible;
}
function GetRulerHeight()
{
var lpHeight = AkelPad.MemAlloc(4 /*sizeof(int)*/);
var nHeight;
AkelPad.CallW(sPluginFunc, 2, lpHeight);
nHeight = AkelPad.MemRead(lpHeight, 3 /*DT_DWORD*/);
AkelPad.MemFree(lpHeight);
return nHeight;
}
function SetRulerHeight(nHeight)
{
//if nHeight==-1, then invert ruler visibility
AkelPad.CallW(sPluginFunc, 3, nHeight);
}
function ShowRuler()
{
if (! bPanelVisible)
AkelPad.CallW(sPluginFunc, 4); //show/hide panel
if (! bRulerVisible)
SetRulerHeight(-1);
if ((! nCurHeight) || nArgHeight && (nArgHeight != nCurHeight))
SetRulerHeight(nArgHeight ? nArgHeight : 17);
}
|
Last edited by KDJ on Tue Jan 06, 2015 7:44 pm; edited 3 times in total |
|
Back to top |
|
 |
|
|
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
|
Powered by phpBB © 2001, 2005 phpBB Group
|