| View previous topic :: View next topic |
| Author |
Message |
KDJ
Joined: 06 Mar 2010 Posts: 1067 Location: Poland
|
Posted: Sun Dec 23, 2012 7:41 pm Post subject: |
|
|
"Go to" dialog with argument.
GoToEx.js
| Code: | // GoToEx.js - ver. 2012-12-26
//
// "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)
{
AkelPad.SendMessage(hWndLine, 241 /*BM_SETCHECK*/, nLineArg, 0);
AkelPad.SendMessage(hWndOffset, 241 /*BM_SETCHECK*/, ! nLineArg, 0);
if (nLineArg)
AkelPad.SendMessage(hWndGoTo, 273 /*WM_COMMAND*/, IDC_GOTO_LINE, hWndLine);
else
AkelPad.SendMessage(hWndGoTo, 273 /*WM_COMMAND*/, IDC_GOTO_OFFSET, hWndOffset);
}
}
}
function GetGoToDialog()
{
var lpMLT = AkelPad.MemAlloc(4);
var hWnd = AkelPad.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;
}
|
|
|
| Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1067 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.
Required to include: InputBox_function.js
All in one: KDJ.zip
FindReplaceEx.js
| Code: | // FindReplaceEx.js - ver. 2013-03-24
//
// "Find/Replace" dialog extended version
//
// 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",
//
// Arguments:
// -Dlg - dialog type that is displayed when you run the script:
// "F" - "Find" (default)
// "R" - "Replace"
// "G" - "Go to"
// -FR - set "Find/Replace" initial parameters:
// "M+" - select "Match case"
// "M-" - unselect "Match case"
// "W+" - select "Whole word"
// "W-" - unselect "Whole word"
// "R+" - select "Regular expressions"
// "R-" - unselect "Regular expressions"
// "E+" - select "Esc-sequences"
// "E-" - unselect "Esc-sequences"
// "D" - "Down" (direction)
// "U" - "Up"
// "B" - "Begining"
// "S" - "In selection"
// "A" - "All files"
// -RDB - change default push button in "Replace" dialog:
// "R" - "Replace"
// "A" - "Replace all"
// -GT - set "Go to" initial parameter:
// "L" - "Line:Column"
// "O" - "Offset"
//
// If you don't want switching "Find/Replace" <-> "Go to", set manually in FindReplaceEx.ini:
// bGoToDlg=false;
//
// In "Find/Replace" dialog:
// F1 - help for regular expressions (if focus is in edit control)
// F2 - Find/Replace templates
//
// Find/Replace templates is saved in file FindReplaceEx_templates.tsv
//
// Keys and mouse in "Find/Replace templates" dialog:
// Ins - New
// Ctrl+Ins,
// Shift+Ins - Add (from "Find/Replace" dialog)
// F2, F4 - Edit
// Del - Delete
// Enter,
// DblClick - OK (put template in "Find/Replace" dialog)
// F1 - help for regular expressions (if focus is in edit control)
if (! (AkelPad.GetEditWnd() && AkelPad.Include("InputBox_function.js")))
WScript.Quit();
var DT_UNICODE = 1;
var DT_DWORD = 3;
var DT_WORD = 4;
var MLT_FIND = 3;
var MLT_REPLACE = 4;
var MLT_GOTO = 5;
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_REPLACE_BUTTON = 3066;
var IDC_SEARCH_ALL_BUTTON = 3067;
var IDC_GOTO_LINE = 3102;
var IDC_GOTO_OFFSET = 3103;
var IDNAMELV = 9900;
var IDWHATS = 9901;
var IDWITHS = 9902;
var IDWHATE = 9903;
var IDWITHE = 9904;
var IDMATCHC = 9905;
var IDWHOLEW = 9906;
var IDREGEXP = 9907;
var IDESCSEQ = 9908;
var IDNEWB = 9909;
var IDADDB = 9910;
var IDEDITB = 9911;
var IDDELB = 9912;
var IDOKB = 9913;
var IDCLOSEB = 9914;
var IDHELP1L = 9915;
var IDHELP2L = 9916;
var IDFRTL = 9917;
var IDFINDL = 9918;
var IDREPLACEL = 9919;
var IDGOTOL = 9920;
var oFSO = new ActiveXObject("Scripting.FileSystemObject");
var oSys = AkelPad.SystemFunction();
var hInstanceDLL = AkelPad.GetInstanceDll();
var hMainWnd = AkelPad.GetMainWnd();
var hGuiFont = oSys.Call("Gdi32::GetStockObject", 17 /*DEFAULT_GUI_FONT*/);
var sClassName = "AkelPad::Scripts::" + WScript.ScriptName + "::" + oSys.Call("kernel32::GetCurrentProcessId");
var nBufSize = 1024;
var lpBuffer = AkelPad.MemAlloc(nBufSize);
var lpLVITEM = AkelPad.MemAlloc(15 * 4); //sizeof(LVITEM)
var aWnd = [];
var aLink = [];
var aSubClassFRT = [];
var bContinue = true;
var bFirstTimeFR = true;
var bFirstTimeGT = true;
var bChangeFRT = false;
var nWhatSel1 = 0;
var nWhatSel2 = -1;
var nWithSel1 = 0;
var nWithSel2 = -1;
var nDlgType;
var nMatchCase;
var nWholeWord;
var nRegExp;
var nEscSeq;
var nDirection;
var nGoTo;
var sDefButton;
var hDlgWnd;
var hDlgSubClass;
var hDlgWhatE;
var hDlgWithE;
var hDlgCancel;
var hWndFRT;
var hWndFocus;
var sWhatText;
var sWithText;
var i;
//ini settings
var bGoToDlg = 1;
var nFRTW = 340;
var nFRTH = 250;
var nFRTSel = 0;
var nDlgX;
var nDlgY;
ReadIni();
AkelPad.MemCopy(lpLVITEM, 0x0001 /*LVIF_TEXT*/, DT_DWORD);
AkelPad.MemCopy(lpLVITEM + 20, lpBuffer, DT_DWORD);
AkelPad.MemCopy(lpLVITEM + 24, nBufSize, DT_DWORD);
//0x50000000 - WS_VISIBLE|WS_CHILD
//0x50010000 - WS_VISIBLE|WS_CHILD|WS_TABSTOP
//0x50010003 - WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_AUTOCHECKBOX
//0x50810000 - WS_VISIBLE|WS_CHILD|WS_BORDER|WS_TABSTOP
//0x5081801D - WS_VISIBLE|WS_CHILD|WS_BORDER|WS_TABSTOP|LVS_NOSORTHEADER|LVS_SORTASCENDING|LVS_SHOWSELALWAYS|LVS_SINGLESEL|LVS_REPORT
aWnd[IDNAMELV] = {Class: "SysListView32", Style: 0x5081801D, Text: ""};
aWnd[IDWHATS] = {Class: "STATIC", Style: 0x50000000, Text: sTxtFindWhat + ":"};
aWnd[IDWITHS] = {Class: "STATIC", Style: 0x50000000, Text: sTxtReplaceWith + ":"};
aWnd[IDWHATE] = {Class: "AkelEditW", Style: 0x50810000, Text: ""};
aWnd[IDWITHE] = {Class: "AkelEditW", Style: 0x50810000, Text: ""};
aWnd[IDMATCHC] = {Class: "BUTTON", Style: 0x50010003, Text: sTxtMatchCase};
aWnd[IDWHOLEW] = {Class: "BUTTON", Style: 0x50010003, Text: sTxtWholeWord};
aWnd[IDREGEXP] = {Class: "BUTTON", Style: 0x50010003, Text: sTxtRegExp};
aWnd[IDESCSEQ] = {Class: "BUTTON", Style: 0x50010003, Text: sTxtEscSeq};
aWnd[IDNEWB] = {Class: "BUTTON", Style: 0x50010000, Text: sTxtNew};
aWnd[IDADDB] = {Class: "BUTTON", Style: 0x50010000, Text: sTxtAdd};
aWnd[IDEDITB] = {Class: "BUTTON", Style: 0x50010000, Text: sTxtEdit};
aWnd[IDDELB] = {Class: "BUTTON", Style: 0x50010000, Text: sTxtDelete};
aWnd[IDOKB] = {Class: "BUTTON", Style: 0x50010000, Text: sTxtOK};
aWnd[IDCLOSEB] = {Class: "BUTTON", Style: 0x50010000, Text: sTxtClose};
aWnd[IDHELP1L] = {Class: "SysLink", Style: 0x50000000, Text: "<a>?</a>"};
aWnd[IDHELP2L] = {Class: "SysLink", Style: 0x50000000, Text: "<a>?</a>"};
aLink[IDHELP1L] = {Text: "?"};
aLink[IDHELP2L] = {Text: "?"};
aLink[IDFRTL] = {Text: sTxtTemplates + " (F2)"};
aLink[IDFINDL] = {Text: "(Ctrl+F)", DlgID: 2004 /*IDD_FIND*/};
aLink[IDREPLACEL] = {Text: "(Ctrl+R)", DlgID: 2005 /*IDD_REPLACE*/};
aLink[IDGOTOL] = {Text: "(Ctrl+G)", DlgID: 2006 /*IDD_GOTO*/};
GetDialogWnd();
if (hDlgWnd && hDlgCancel)
AkelPad.SendMessage(hDlgWnd, 273 /*WM_COMMAND*/, IDCANCEL, hDlgCancel);
GetArguments();
GetLinkText();
AkelPad.ScriptNoMutex();
AkelPad.WindowRegisterClass(sClassName);
while (bContinue)
{
bContinue = false;
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 (! (hDlgWnd && hDlgCancel))
break;
if ((typeof nDlgX == "number") && (typeof nDlgY == "number"))
oSys.Call("User32::SetWindowPos", hDlgWnd, 0, nDlgX, nDlgY, 0, 0, 0x0415 /*SWP_NOSENDCHANGING|SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOSIZE*/);
if (nDlgType == MLT_GOTO)
{
if (bFirstTimeGT)
{
bFirstTimeGT = false;
SetParamsGT(nGoTo);
}
if (bGoToDlg)
ResizeDialogGT();
}
else
{
if (bFirstTimeFR)
{
bFirstTimeFR = false;
SetParamsFR(nMatchCase, nWholeWord, nRegExp, nEscSeq, nDirection);
}
if (typeof sWhatText == "string")
{
oSys.Call("User32::SetWindowTextW", hDlgWhatE, sWhatText);
AkelPad.SendMessage(hDlgWhatE, 0x00B1 /*EM_SETSEL*/, 0, -1);
}
if (nDlgType == MLT_REPLACE)
{
if (typeof sWithText == "string")
oSys.Call("User32::SetWindowTextW", hDlgWithE, sWithText);
if (sDefButton)
AkelPad.SendMessage(hDlgWnd, 0x0401 /*DM_SETDEFID*/, (sDefButton == "R") ? IDC_SEARCH_REPLACE_BUTTON : IDC_SEARCH_ALL_BUTTON, 0);
}
}
GetLinkWidth();
GetLinkPos();
for (i = IDHELP1L; i <= IDGOTOL; ++i)
{
if (aLink[i].Create)
AkelPad.SendMessage(
oSys.Call("User32::CreateWindowExW",
0, //dwExStyle
"SysLink", //lpClassName
"<a>" + aLink[i].Text + "</a>", //lpWindowName
0x50000000, //dwStyle=WS_VISIBLE|WS_CHILD
aLink[i].X, //x
aLink[i].Y, //y
aLink[i].W, //nWidth
13, //nHeight
hDlgWnd, //hWndParent
i, //ID
hInstanceDLL, //hInstance
0), //lpParam
48 /*WM_SETFONT*/, hGuiFont, true);
}
if (nDlgType != MLT_GOTO)
ShowHelpLinksFR();
oSys.Call("User32::UpdateWindow", hDlgWnd);
hDlgSubClass = AkelPad.WindowSubClass(hDlgWnd, DialogCallback, 78 /*WM_NOTIFY*/, 256 /*WM_KEYDOWN*/, 273 /*WM_COMMAND*/, 2 /*WM_DESTROY*/);
AkelPad.WindowGetMessage();
AkelPad.WindowUnsubClass(hDlgWnd);
}
WriteIni();
AkelPad.WindowUnregisterClass(sClassName);
AkelPad.MemFree(lpBuffer);
AkelPad.MemFree(lpLVITEM);
function DialogCallback(hWnd, uMsg, wParam, lParam)
{
if (uMsg == 78) //WM_NOTIFY
{
if (AkelPad.MemRead(lParam + 8, DT_DWORD) == -2 /*NM_CLICK*/)
{
if ((wParam == IDHELP1L) || (wParam == IDHELP2L))
RegExpHelp(wParam, 0);
else if (wParam == IDFRTL)
{
oSys.Call("User32::SetFocus", hDlgWhatE);
FRTemplates();
}
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 (! Shift())
{
if (Ctrl())
{
if ((wParam == 0x46 /*F key*/) && aLink[IDFINDL].Create)
SwitchDialog(MLT_FIND);
else if ((wParam == 0x52 /*R key*/) && aLink[IDREPLACEL].Create)
SwitchDialog(MLT_REPLACE);
else if ((wParam == 0x47 /*G key*/) && aLink[IDGOTOL].Create)
SwitchDialog(MLT_GOTO);
}
else
{
if (wParam == 0x70 /*VK_F1*/)
{
if (aLink[IDHELP1L].Show && (oSys.Call("User32::GetFocus") == hDlgWhatE))
RegExpHelp(IDHELP1L, 0);
else if (aLink[IDHELP2L].Show && (oSys.Call("User32::GetFocus") == hDlgWithE))
RegExpHelp(IDHELP2L, 0);
}
else if ((wParam == 0x71 /*VK_F2*/) && aLink[IDFRTL].Create)
FRTemplates();
}
}
}
else if (uMsg == 273) //WM_COMMAND
{
var nLowParam = LoWord(wParam);
var nHiwParam = HiWord(wParam);
if (nLowParam == IDC_SEARCH_FIND)
{
if (nHiwParam == 3 /*CBN_SETFOCUS*/)
AkelPad.SendMessage(lParam, 0x0142 /*CB_SETEDITSEL*/, 0, MkLong(nWhatSel1, nWhatSel2));
else if (nHiwParam == 10 /*CBN_SELENDCANCEL*/)
{
nWhatSel1 = LoWord(AkelPad.SendMessage(lParam, 0x0140 /*CB_GETEDITSEL*/, 0, 0));
nWhatSel2 = HiWord(AkelPad.SendMessage(lParam, 0x0140 /*CB_GETEDITSEL*/, 0, 0));
}
}
else if (nLowParam == IDC_SEARCH_REPLACE)
{
if (nHiwParam == 3 /*CBN_SETFOCUS*/)
AkelPad.SendMessage(lParam, 0x0142 /*CB_SETEDITSEL*/, 0, MkLong(nWithSel1, nWithSel2));
else if (nHiwParam == 10 /*CBN_SELENDCANCEL*/)
{
nWithSel1 = LoWord(AkelPad.SendMessage(lParam, 0x0140 /*CB_GETEDITSEL*/, 0, 0));
nWithSel2 = HiWord(AkelPad.SendMessage(lParam, 0x0140 /*CB_GETEDITSEL*/, 0, 0));
}
}
else if ((nLowParam == IDC_SEARCH_REGEXP) || (nLowParam == IDC_SEARCH_ESCAPESEQ))
{
AkelPad.WindowNextProc(hDlgSubClass, hWnd, uMsg, wParam, lParam);
ShowHelpLinksFR();
oSys.Call("User32::UpdateWindow", hWnd);
}
}
else if (uMsg == 2) //WM_DESTROY
{
GetDialogPos();
GetWhatWithFR();
oSys.Call("User32::PostQuitMessage", 0); //Exit message loop
}
return 0;
}
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 Boolean(oSys.Call("User32::GetKeyState", 0x11 /*VK_CONTROL*/) & 0x8000);
}
function Shift()
{
return Boolean(oSys.Call("User32::GetKeyState", 0x10 /*VK_SHIFT*/) & 0x8000);
}
function GetArguments()
{
var vArg = AkelPad.GetArgValue("Dlg", "F").toUpperCase();
if (vArg == "R")
nDlgType = MLT_REPLACE;
else if (vArg == "G")
nDlgType = MLT_GOTO;
else
nDlgType = MLT_FIND;
vArg = AkelPad.GetArgValue("FR", "").toUpperCase();
if (vArg.indexOf("M+") >= 0)
nMatchCase = 1;
else if (vArg.indexOf("M-") >= 0)
nMatchCase = 0;
else
nMatchCase = 2;
if (vArg.indexOf("W+") >= 0)
nWholeWord = 1;
else if (vArg.indexOf("W-") >= 0)
nWholeWord = 0;
else
nWholeWord = 2;
if (vArg.indexOf("R+") >= 0)
nRegExp = 1;
else if (vArg.indexOf("R-") >= 0)
nRegExp = 0;
else
nRegExp = 2;
if (vArg.indexOf("E+") >= 0)
nEscSeq = 1;
else if (vArg.indexOf("E-") >= 0)
nEscSeq = 0;
else
nEscSeq = 2;
if (vArg.indexOf("D") >= 0)
nDirection = IDC_SEARCH_FORWARD;
else if (vArg.indexOf("U") >= 0)
nDirection = IDC_SEARCH_BACKWARD;
else if (vArg.indexOf("B") >= 0)
nDirection = IDC_SEARCH_BEGINNING;
else if (vArg.indexOf("S") >= 0)
nDirection = IDC_SEARCH_INSEL;
else if (vArg.indexOf("A") >= 0)
nDirection = IDC_SEARCH_ALLFILES;
else
nDirection = 2;
vArg = AkelPad.GetArgValue("RDB", "").toUpperCase();
if ((vArg == "R") || (vArg == "A"))
sDefButton = vArg;
else
sDefButton = "";
vArg = AkelPad.GetArgValue("GT", "").toUpperCase();
if (vArg.indexOf("L") >= 0)
nGoTo = IDC_GOTO_LINE;
else if (vArg.indexOf("O") >= 0)
nGoTo = IDC_GOTO_OFFSET;
else
nGoTo = 2;
}
function GetLinkText()
{
var nLangID = AkelPad.GetLangId();
var hLangLib;
var hRes;
var hResData;
var lpPointer;
var nSize;
var i;
if (AkelPad.SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 52 /*MI_LANGMODULEW*/, lpBuffer))
hLangLib = oSys.Call("Kernel32::GetModuleHandleW", AkelPad.GetAkelDir(3 /*ADTYPE_LANGS*/) + "\\" + AkelPad.MemRead(lpBuffer, DT_UNICODE));
else //internal language
hLangLib = AkelPad.GetInstanceExe();
for (i = IDFINDL; i <= IDGOTOL; ++i)
{
hRes = oSys.Call("Kernel32::FindResourceExW", hLangLib, 5 /*RT_DIALOG*/, aLink[i].DlgID, nLangID);
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(lpPointer + 2, DT_WORD) == 0xFFFF) //DLGTEMPLATEEX
lpPointer += 26;
else //DLGTEMPLATE
lpPointer += 18;
//pointer to windowClass
if (AkelPad.MemRead(lpPointer, DT_WORD) == 0xFFFF)
lpPointer += 4;
else
lpPointer += AkelPad.MemRead(lpPointer, DT_UNICODE).length + 2;
//pointer to title
if (AkelPad.MemRead(lpPointer, DT_WORD) == 0xFFFF)
lpPointer += 4;
else
lpPointer += AkelPad.MemRead(lpPointer, DT_UNICODE).length + 2;
aLink[i].Text = AkelPad.MemRead(lpPointer, DT_UNICODE) + " " + aLink[i].Text;
}
}
}
function GetLinkWidth()
{
var hDC = oSys.Call("User32::GetDC", hDlgCancel);
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, aLink[i].Text, aLink[i].Text.length, lpBuffer);
aLink[i].W = AkelPad.MemRead(lpBuffer, DT_DWORD);
}
oSys.Call("User32::ReleaseDC", hDlgCancel, hDC);
}
function GetLinkPos()
{
var nDlgW, nDlgH;
var nCancelX, nCancelW;
oSys.Call("User32::GetClientRect", hDlgWnd, lpBuffer);
nDlgW = AkelPad.MemRead(lpBuffer + 8, DT_DWORD);
nDlgH = AkelPad.MemRead(lpBuffer + 12, DT_DWORD);
oSys.Call("User32::GetWindowRect", hDlgCancel, lpBuffer);
oSys.Call("User32::ScreenToClient", hDlgWnd, lpBuffer);
oSys.Call("User32::ScreenToClient", hDlgWnd, lpBuffer + 8);
nCancelX = AkelPad.MemRead(lpBuffer, DT_DWORD);
nCancelW = AkelPad.MemRead(lpBuffer + 8, DT_DWORD) - nCancelX;
if (nDlgType == MLT_GOTO)
{
aLink[IDFINDL].X = 10;
aLink[IDFINDL].Y = nDlgH - 23;
aLink[IDREPLACEL].X = nDlgW - aLink[IDREPLACEL].W - 10;
aLink[IDREPLACEL].Y = nDlgH - 23;
aLink[IDHELP1L].Create = 0;
aLink[IDHELP1L].Show = 0;
aLink[IDHELP2L].Create = 0;
aLink[IDHELP2L].Show = 0;
aLink[IDFRTL].Create = 0;
aLink[IDFINDL].Create = bGoToDlg;
aLink[IDREPLACEL].Create = bGoToDlg;
aLink[IDGOTOL].Create = 0;
}
else
{
aLink[IDHELP1L].X = nCancelX - 12;
aLink[IDHELP1L].Y = 18;
aLink[IDFRTL].X = 30;
aLink[IDFRTL].Y = nDlgH - 23;
aLink[IDGOTOL].X = nCancelX + (nCancelW - aLink[IDGOTOL].W) / 2;
aLink[IDGOTOL].Y = nDlgH - 43;
aLink[IDHELP1L].Create = 1;
aLink[IDHELP2L].Create = 1;
aLink[IDFRTL].Create = 1;
aLink[IDGOTOL].Create = bGoToDlg;
if (nDlgType == MLT_FIND)
{
aLink[IDREPLACEL].X = nCancelX + (nCancelW - aLink[IDREPLACEL].W) / 2;
aLink[IDREPLACEL].Y = nDlgH - 23;
aLink[IDFINDL].Create = 0;
aLink[IDREPLACEL].Create = 1;
}
else
{
aLink[IDHELP2L].X = nCancelX - 12;
aLink[IDHELP2L].Y = 40;
aLink[IDFINDL].X = nCancelX + (nCancelW - aLink[IDFINDL].W) / 2;
aLink[IDFINDL].Y = nDlgH - 23;
aLink[IDFINDL].Create = 1;
aLink[IDREPLACEL].Create = 0;
}
}
}
function ShowHelpLinksFR()
{
if (AkelPad.SendMessage(oSys.Call("User32::GetDlgItem", hDlgWnd, IDC_SEARCH_REGEXP), 0x00F0 /*BM_GETCHECK*/, 0, 0))
{
aLink[IDHELP1L].Show = 1;
aLink[IDHELP2L].Show = (nDlgType == MLT_REPLACE);
}
else
{
aLink[IDHELP1L].Show = 0;
aLink[IDHELP2L].Show = 0;
}
oSys.Call("User32::ShowWindow", oSys.Call("User32::GetDlgItem", hDlgWnd, IDHELP1L), aLink[IDHELP1L].Show);
oSys.Call("User32::ShowWindow", oSys.Call("User32::GetDlgItem", hDlgWnd, IDHELP2L), aLink[IDHELP2L].Show);
}
function GetDialogWnd()
{
var hWnd = AkelPad.SendMessage(hMainWnd, 1275 /*AKD_GETMODELESS*/, 0, lpBuffer);
var nMLT = AkelPad.MemRead(lpBuffer, DT_DWORD);
hDlgWhatE = 0;
hDlgWithE = 0;
if ((nMLT == MLT_FIND) || (nMLT == MLT_REPLACE) || (nMLT == MLT_GOTO))
{
nDlgType = nMLT;
hDlgWnd = hWnd;
hDlgCancel = oSys.Call("User32::GetDlgItem", hDlgWnd, IDCANCEL);
if (nMLT != MLT_GOTO)
{
AkelPad.MemCopy(lpBuffer, 52 /*sizeof(COMBOBOXINFO)*/, DT_DWORD);
oSys.Call("User32::GetComboBoxInfo", oSys.Call("User32::GetDlgItem", hDlgWnd, IDC_SEARCH_FIND), lpBuffer);
hDlgWhatE = AkelPad.MemRead(lpBuffer + 44 /*hwndItem*/, DT_DWORD);
if (nMLT == MLT_REPLACE)
{
oSys.Call("User32::GetComboBoxInfo", oSys.Call("User32::GetDlgItem", hDlgWnd, IDC_SEARCH_REPLACE), lpBuffer);
hDlgWithE = AkelPad.MemRead(lpBuffer + 44 /*hwndItem*/, DT_DWORD);
}
}
}
else
hDlgWnd = 0;
}
function GetDialogPos()
{
oSys.Call("User32::GetWindowRect", hDlgWnd, lpBuffer);
nDlgX = AkelPad.MemRead(lpBuffer, DT_DWORD);
nDlgY = AkelPad.MemRead(lpBuffer + 4, DT_DWORD);
}
function SwitchDialog(nMLT)
{
bContinue = true;
nDlgType = nMLT;
AkelPad.SendMessage(hDlgWnd, 273 /*WM_COMMAND*/, IDCANCEL, hDlgCancel);
}
function ResizeDialogGT()
{
var nW, nH;
oSys.Call("User32::GetWindowRect", hDlgWnd, lpBuffer);
nW = AkelPad.MemRead(lpBuffer + 8, DT_DWORD) - AkelPad.MemRead(lpBuffer, DT_DWORD);
nH = AkelPad.MemRead(lpBuffer + 12, DT_DWORD) - AkelPad.MemRead(lpBuffer + 4, DT_DWORD) + 30;
oSys.Call("User32::SetWindowPos", hDlgWnd, 0, 0, 0, nW, nH, 0x16 /*SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOMOVE*/);
}
function SetParamsFR(nMatchCase, nWholeWord, nRegExp, nEscSeq, nDirection)
{
if (nMatchCase != 2)
{
AkelPad.SendMessage(oSys.Call("User32::GetDlgItem", hDlgWnd, IDC_SEARCH_MATCHCASE), 0x00F1 /*BM_SETCHECK*/, nMatchCase, 0);
AkelPad.SendMessage(hDlgWnd, 273 /*WM_COMMAND*/, IDC_SEARCH_MATCHCASE, oSys.Call("User32::GetDlgItem", hDlgWnd, IDC_SEARCH_MATCHCASE));
}
if (nWholeWord != 2)
{
AkelPad.SendMessage(oSys.Call("User32::GetDlgItem", hDlgWnd, IDC_SEARCH_WHOLEWORD), 0x00F1 /*BM_SETCHECK*/, nWholeWord, 0);
AkelPad.SendMessage(hDlgWnd, 273 /*WM_COMMAND*/, IDC_SEARCH_WHOLEWORD, oSys.Call("User32::GetDlgItem", hDlgWnd, IDC_SEARCH_WHOLEWORD));
}
if (nRegExp != 2)
{
AkelPad.SendMessage(oSys.Call("User32::GetDlgItem", hDlgWnd, IDC_SEARCH_REGEXP), 0x00F1 /*BM_SETCHECK*/, nRegExp, 0);
AkelPad.SendMessage(hDlgWnd, 273 /*WM_COMMAND*/, IDC_SEARCH_REGEXP, oSys.Call("User32::GetDlgItem", hDlgWnd, IDC_SEARCH_REGEXP));
}
if (nEscSeq != 2)
{
AkelPad.SendMessage(oSys.Call("User32::GetDlgItem", hDlgWnd, IDC_SEARCH_ESCAPESEQ), 0x00F1 /*BM_SETCHECK*/, nEscSeq, 0);
AkelPad.SendMessage(hDlgWnd, 273 /*WM_COMMAND*/, IDC_SEARCH_ESCAPESEQ, oSys.Call("User32::GetDlgItem", hDlgWnd, IDC_SEARCH_ESCAPESEQ));
}
if (nDirection != 2)
{
AkelPad.SendMessage(oSys.Call("User32::GetDlgItem", hDlgWnd, IDC_SEARCH_BACKWARD), 0x00F1 /*BM_SETCHECK*/, 0, 0);
AkelPad.SendMessage(oSys.Call("User32::GetDlgItem", hDlgWnd, IDC_SEARCH_FORWARD), 0x00F1 /*BM_SETCHECK*/, 0, 0);
AkelPad.SendMessage(oSys.Call("User32::GetDlgItem", hDlgWnd, IDC_SEARCH_BEGINNING), 0x00F1 /*BM_SETCHECK*/, 0, 0);
AkelPad.SendMessage(oSys.Call("User32::GetDlgItem", hDlgWnd, IDC_SEARCH_INSEL), 0x00F1 /*BM_SETCHECK*/, 0, 0);
AkelPad.SendMessage(oSys.Call("User32::GetDlgItem", hDlgWnd, IDC_SEARCH_ALLFILES), 0x00F1 /*BM_SETCHECK*/, 0, 0);
AkelPad.SendMessage(oSys.Call("User32::GetDlgItem", hDlgWnd, nDirection), 0x00F1 /*BM_SETCHECK*/, 1, 0);
AkelPad.SendMessage(hDlgWnd, 273 /*WM_COMMAND*/, nDirection, oSys.Call("User32::GetDlgItem", hDlgWnd, nDirection));
}
}
function SetParamsGT(nGoTo)
{
if (nGoTo != 2)
{
AkelPad.SendMessage(oSys.Call("User32::GetDlgItem", hDlgWnd, IDC_GOTO_LINE), 0x00F1 /*BM_SETCHECK*/, 0, 0);
AkelPad.SendMessage(oSys.Call("User32::GetDlgItem", hDlgWnd, IDC_GOTO_OFFSET), 0x00F1 /*BM_SETCHECK*/, 0, 0);
AkelPad.SendMessage(oSys.Call("User32::GetDlgItem", hDlgWnd, nGoTo), 0x00F1 /*BM_SETCHECK*/, 1, 0);
AkelPad.SendMessage(hDlgWnd, 273 /*WM_COMMAND*/, nGoTo, oSys.Call("User32::GetDlgItem", hDlgWnd, nGoTo));
}
}
function GetWhatWithFR()
{
if (hDlgWhatE)
{
oSys.Call("User32::GetWindowTextW", hDlgWhatE, lpBuffer, nBufSize / 2);
sWhatText = AkelPad.MemRead(lpBuffer, DT_UNICODE);
}
if (hDlgWithE)
{
oSys.Call("User32::GetWindowTextW", hDlgWithE, lpBuffer, nBufSize / 2);
sWithText = AkelPad.MemRead(lpBuffer, DT_UNICODE);
}
}
function SetFRTtoFR()
{
var nItem = GetCurSelLV();
var sParams;
var nMatchCase;
var nWholeWord;
var nRegExp;
var nEscSeq;
if (nItem > -1)
{
nWhatSel1 = 0;
nWhatSel2 = -1;
oSys.Call("User32::SetWindowTextW", hDlgWhatE, GetTextLV(nItem, 1));
if (hDlgWithE)
{
nWithSel1 = 0;
nWithSel2 = -1;
oSys.Call("User32::SetWindowTextW", hDlgWithE, GetTextLV(nItem, 2));
}
sParams = GetTextLV(nItem, 3);
nMatchCase = parseInt(sParams.substr(0, 1));
nWholeWord = parseInt(sParams.substr(1, 1));
nRegExp = parseInt(sParams.substr(2, 1));
nEscSeq = parseInt(sParams.substr(3, 1));
SetParamsFR(nMatchCase, nWholeWord, nRegExp, nEscSeq, 2);
}
oSys.Call("User32::PostMessageW", hWndFRT, 16 /*WM_CLOSE*/, 0, 0);
}
function FRTemplates()
{
var nDeskW, nDeskH, nFRTX, nFRTY;
oSys.Call("User32::GetWindowRect", oSys.Call("user32::GetDesktopWindow"), lpBuffer);
nDeskW = AkelPad.MemRead(lpBuffer + 8, DT_DWORD);
nDeskH = AkelPad.MemRead(lpBuffer + 12, DT_DWORD);
oSys.Call("User32::GetWindowRect", hDlgWhatE, lpBuffer);
nFRTX = AkelPad.MemRead(lpBuffer + 8, DT_DWORD);
nFRTY = AkelPad.MemRead(lpBuffer + 4, DT_DWORD) - 35;
if (nFRTX + nFRTW > nDeskW)
nFRTX = AkelPad.MemRead(lpBuffer, DT_DWORD) - nFRTW;
if (nFRTX < 0)
nFRTX = 0;
if (nFRTY + nFRTH > nDeskH)
nFRTY = nDeskH - nFRTH;
oSys.Call("User32::EnableWindow", hDlgWnd, 0);
hWndFRT = oSys.Call("user32::CreateWindowExW",
0, //dwExStyle
sClassName, //lpClassName
sTxtFRTempl, //lpWindowName
0x90CC0000, //dwStyle=WS_POPUP|WS_VISIBLE|WS_CAPTION|WS_SYSMENU|WS_SIZEBOX
nFRTX, //x
nFRTY, //y
nFRTW, //nWidth
nFRTH, //nHeight
hDlgWnd, //hWndParent
0, //ID
hInstanceDLL, //hInstance
CallbackFRT); //Script function callback. To use it class must be registered by WindowRegisterClass.
}
function CallbackFRT(hWnd, uMsg, wParam, lParam)
{
if (uMsg == 1) //WM_CREATE
{
var i;
for (i = IDNAMELV; i <= IDHELP2L; ++i)
{
aWnd[i].Handle =
oSys.Call("User32::CreateWindowExW",
0, //dwExStyle
aWnd[i].Class, //lpClassName
aWnd[i].Text, //lpWindowName
aWnd[i].Style, //dwStyle
0, //x
0, //y
0, //nWidth
0, //nHeight
hWnd, //hWndParent
i, //ID
hInstanceDLL, //hInstance
0); //lpParam
AkelPad.SendMessage(aWnd[i].Handle, 48 /*WM_SETFONT*/, hGuiFont, true);
}
for (i = IDWHATE; i <= IDWITHE; ++i)
{
AkelPad.SendMessage(aWnd[i].Handle, 3262 /*AEM_SETTEXTLIMIT*/, 511, 0);
AkelPad.SendMessage(aWnd[i].Handle, 1093 /*EM_SETEVENTMASK*/, 0, 0x1 /*ENM_CHANGE*/);
aSubClassFRT[i] = AkelPad.WindowSubClass(aWnd[i].Handle, EditCallbackFRT, 256 /*WM_KEYDOWN*/);
}
InsertColumnsLV();
FillLV();
RefreshViewFRT();
hWndFocus = aWnd[IDNAMELV].Handle;
}
else if ((uMsg == 6 /*WM_ACTIVATE*/) && (! wParam))
hWndFocus = oSys.Call("User32::GetFocus");
else if (uMsg == 7) //WM_SETFOCUS
oSys.Call("User32::SetFocus", hWndFocus);
else if (uMsg == 36) //WM_GETMINMAXINFO
{
AkelPad.MemCopy(lParam + 24, 340, DT_DWORD); //ptMinTrackSize_x
AkelPad.MemCopy(lParam + 28, 250, DT_DWORD); //ptMinTrackSize_y
AkelPad.MemCopy(lParam + 32, 1200, DT_DWORD); //ptMaxTrackSize_x
AkelPad.MemCopy(lParam + 36, 800, DT_DWORD); //ptMaxTrackSize_y
}
else if (uMsg == 5) //WM_SIZE
ResizeFRT(hWnd);
else if (uMsg == 15) //WM_PAINT
PaintSizeGrip(hWnd);
else if (uMsg == 256 /*WM_KEYDOWN*/)
{
hWndFocus = oSys.Call("User32::GetFocus");
if (wParam == 0x2D /*VK_INSERT*/)
{
if ((hWndFocus != aWnd[IDWHATE].Handle) && (hWndFocus != aWnd[IDWITHE].Handle))
{
if (Ctrl() || Shift())
EditFRT(1);
else
EditFRT(0);
}
}
else if (wParam == 0x2E /*VK_DELETE*/)
{
if ((hWndFocus != aWnd[IDWHATE].Handle) && (hWndFocus != aWnd[IDWITHE].Handle))
{
if ((! Ctrl()) && (! Shift()))
DeleteFRT();
}
}
else if (wParam == 0x70 /*VK_F1*/)
{
if ((! Ctrl()) && (! Shift()) && AkelPad.SendMessage(aWnd[IDREGEXP].Handle, 0x00F0 /*BM_GETCHECK*/, 0, 0))
{
if (hWndFocus == aWnd[IDWHATE].Handle)
RegExpHelp(IDHELP1L, 1);
else if (hWndFocus == aWnd[IDWITHE].Handle)
RegExpHelp(IDHELP2L, 1);
}
}
else if ((wParam == 0x71 /*VK_F2*/) || (wParam == 0x73 /*VK_F4*/))
{
if ((! Ctrl()) && (! Shift()))
EditFRT(2);
}
else if (wParam == 0x0D /*VK_RETURN*/)
{
if ((! Ctrl()) && (! Shift()))
{
if (oSys.Call("User32::GetDlgCtrlID", hWndFocus) < IDNEWB)
SetFRTtoFR();
}
}
else if (wParam == 0x1B /*VK_ESCAPE*/)
oSys.Call("User32::PostMessageW", hWnd, 16 /*WM_CLOSE*/, 0, 0);
}
else if (uMsg == 0x004E /*WM_NOTIFY*/)
{
if (wParam == IDNAMELV)
{
switch (AkelPad.MemRead(lParam + 8, DT_DWORD))
{
case -101 : //LVN_ITEMCHANGED
if (AkelPad.MemRead(lParam + 20 /*NMLISTVIEW.uNewState*/, DT_DWORD) & 0x2 /*LVIS_SELECTED*/)
RefreshViewFRT();
break;
case -3 : //NM_DBLCLK
if (AkelPad.MemRead(lParam + 12 /*NMITEMACTIVATE.iItem*/, DT_DWORD) == -1)
SetCurSelLV(GetCurFocLV());
else
SetFRTtoFR();
break;
case -2 : //NM_CLICK
case -5 : //NM_RCLICK
case -6 : //NM_RDBLCLK
if (AkelPad.MemRead(lParam + 12 /*NMITEMACTIVATE.iItem*/, DT_DWORD) == -1)
SetCurSelLV(GetCurFocLV());
break;
}
}
else if ((wParam == IDHELP1L) || (wParam == IDHELP2L))
{
if (AkelPad.MemRead(lParam + 8, DT_DWORD) == -2 /*NM_CLICK*/)
RegExpHelp(wParam, 1);
}
}
else if (uMsg == 273) //WM_COMMAND
{
var nLowParam = LoWord(wParam);
var nHiwParam = HiWord(wParam);
if ((nLowParam == IDWHATE) || (nLowParam == IDWITHE))
{
if ((nHiwParam == 0x0300 /*EN_CHANGE*/) && (oSys.Call("User32::GetFocus") == lParam))
SetEditTextToLV(nLowParam, lParam);
}
else if ((nLowParam >= IDMATCHC) && (nLowParam <= IDESCSEQ))
CheckButtonsFRT(nLowParam);
else if ((nLowParam >= IDNEWB) && (nLowParam <= IDEDITB))
EditFRT(nLowParam - IDNEWB);
else if (nLowParam == IDDELB)
DeleteFRT();
else if (nLowParam == IDOKB)
SetFRTtoFR();
else if (nLowParam == IDCLOSEB)
oSys.Call("User32::PostMessageW", hWnd, 16 /*WM_CLOSE*/, 0, 0);
}
else if (uMsg == 16) //WM_CLOSE
{
AkelPad.WindowUnsubClass(aWnd[IDWHATE].Handle);
AkelPad.WindowUnsubClass(aWnd[IDWITHE].Handle);
oSys.Call("User32::GetWindowRect", hWnd, lpBuffer);
nFRTW = AkelPad.MemRead(lpBuffer + 8, DT_DWORD) - AkelPad.MemRead(lpBuffer, DT_DWORD);
nFRTH = AkelPad.MemRead(lpBuffer + 12, DT_DWORD) - AkelPad.MemRead(lpBuffer + 4, DT_DWORD);
nFRTSel = GetCurSelLV();
WriteFRT();
oSys.Call("User32::EnableWindow", hDlgWnd, 1);
oSys.Call("User32::DestroyWindow", hWnd);
}
else
{
var nID = oSys.Call("User32::GetDlgCtrlID", oSys.Call("User32::GetFocus"));
if ((nID >= IDNAMELV) && (nID < IDNEWB))
oSys.Call("User32::DefDlgProcW", hWnd, 1025 /*DM_SETDEFID*/, IDOKB, 0);
}
return 0;
}
function EditCallbackFRT(hWnd, uMsg, wParam, lParam)
{
if (uMsg == 256) //WM_KEYDOWN
{
if ((wParam == 9 /*VK_TAB*/) && Ctrl())
AkelPad.WindowNoNextProc(aSubClassFRT[oSys.Call("User32::GetDlgCtrlID", hWnd)]);
}
return 0;
}
function PaintSizeGrip(hWnd)
{
var lpPaint = AkelPad.MemAlloc(64); //sizeof(PAINTSTRUCT)
var hDC;
if (hDC = oSys.Call("User32::BeginPaint", hWnd, lpPaint))
{
oSys.Call("User32::GetClientRect", hWnd, lpBuffer);
AkelPad.MemCopy(lpBuffer, AkelPad.MemRead(lpBuffer + 8, DT_DWORD) - oSys.Call("User32::GetSystemMetrics", 2 /*SM_CXVSCROLL*/), DT_DWORD);
AkelPad.MemCopy(lpBuffer + 4, AkelPad.MemRead(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(hWnd)
{
var nSBW = 0;
var nW, nH, nEW, nEH, nBW;
var i;
oSys.Call("User32::GetClientRect", hWnd, lpBuffer);
nW = AkelPad.MemRead(lpBuffer + 8, DT_DWORD);
nH = AkelPad.MemRead(lpBuffer + 12, DT_DWORD);
nEW = Math.round((nW - 30) / 2);
nEH = Math.round((nH - 160 - 21) / 2);
nBW = (nW - (IDCLOSEB - IDNEWB) * 5 - 2 * 10) / (IDCLOSEB - IDNEWB + 1);
oSys.Call("User32::SetWindowPos",
aWnd[IDNAMELV].Handle, 0,
10,
10,
nEW,
nH - 30 - 21,
0x14 /*SWP_NOACTIVATE|SWP_NOZORDER*/);
oSys.Call("User32::SetWindowPos",
aWnd[IDWHATS].Handle, 0,
nW - nEW - 10,
10,
nEW,
13,
0x14 /*SWP_NOACTIVATE|SWP_NOZORDER*/);
oSys.Call("User32::SetWindowPos",
aWnd[IDWITHS].Handle, 0,
nW - nEW - 10,
nH - 125 - 21 - nEH,
nEW,
13,
0x14 /*SWP_NOACTIVATE|SWP_NOZORDER*/);
oSys.Call("User32::SetWindowPos",
aWnd[IDHELP1L].Handle, 0,
nW - aLink[IDHELP1L].W - 10,
10,
aLink[IDHELP1L].W,
13,
0x14 /*SWP_NOACTIVATE|SWP_NOZORDER*/);
oSys.Call("User32::SetWindowPos",
aWnd[IDHELP2L].Handle, 0,
nW - aLink[IDHELP2L].W - 10,
nH - 125 - 21 - nEH,
aLink[IDHELP2L].W,
13,
0x14 /*SWP_NOACTIVATE|SWP_NOZORDER*/);
oSys.Call("User32::SetWindowPos",
aWnd[IDWHATE].Handle, 0,
nW - nEW - 10,
25,
nEW,
nEH,
0x14 /*SWP_NOACTIVATE|SWP_NOZORDER*/);
oSys.Call("User32::SetWindowPos",
aWnd[IDWITHE].Handle, 0,
nW - nEW - 10,
nH - 110 - 21 - nEH,
nEW,
nEH,
0x14 /*SWP_NOACTIVATE|SWP_NOZORDER*/);
for (i = IDMATCHC; i <= IDESCSEQ; ++i)
{
oSys.Call("User32::SetWindowPos",
aWnd[i].Handle, 0,
nW - nEW - 10,
nH - 100 - 21 + 20 * (i - IDMATCHC),
nEW,
16,
0x14 /*SWP_NOACTIVATE|SWP_NOZORDER*/);
}
for (i = IDNEWB; i <= IDCLOSEB; ++i)
{
oSys.Call("User32::SetWindowPos",
aWnd[i].Handle, 0,
10 + (i - IDNEWB) * (nBW + 5),
nH - 21 - 10,
nBW,
21,
0x14 /*SWP_NOACTIVATE|SWP_NOZORDER*/);
}
if (GetItemCountLV() > AkelPad.SendMessage(aWnd[IDNAMELV].Handle, 0x1028 /*LVM_GETCOUNTPERPAGE*/, 0, 0))
nSBW = oSys.Call("User32::GetSystemMetrics", 2 /*SM_CXVSCROLL*/);
AkelPad.SendMessage(aWnd[IDNAMELV].Handle, 0x101E /*LVM_SETCOLUMNWIDTH*/, 0, nEW - nSBW);
AkelPad.SendMessage(aWnd[IDNAMELV].Handle, 0x1013 /*LVM_ENSUREVISIBLE*/, GetCurSelLV(), false);
AkelPad.SendMessage(aWnd[IDWHATE].Handle, 3242 /*AEM_SETWORDWRAP*/, 0x2 /*AEWW_SYMBOL*/, 0);
AkelPad.SendMessage(aWnd[IDWITHE].Handle, 3242 /*AEM_SETWORDWRAP*/, 0x2 /*AEWW_SYMBOL*/, 0);
}
function RefreshViewFRT()
{
var nItem = GetCurSelLV();
var bIsItem = (nItem > -1);
var sParams = bIsItem ? GetTextLV(nItem, 3) : "";
var i;
for (i = IDWHATE; i <= IDWITHE; ++i)
{
oSys.Call("User32::SetWindowTextW", aWnd[i].Handle, bIsItem ? GetTextLV(nItem, i - IDWHATE + 1) : "");
oSys.Call("User32::EnableWindow", aWnd[i].Handle, bIsItem);
}
for (i = IDMATCHC; i <= IDESCSEQ; ++i)
{
AkelPad.SendMessage(aWnd[i].Handle, 0x00F1 /*BM_SETCHECK*/, parseInt(sParams.substr(i - IDMATCHC, 1)), 0);
oSys.Call("User32::EnableWindow", aWnd[i].Handle, bIsItem);
}
for (i = IDEDITB; i <= IDDELB; ++i)
oSys.Call("User32::EnableWindow", aWnd[i].Handle, bIsItem);
ShowHelpLinksFRT();
}
function SetEditTextToLV(nID, hWnd)
{
oSys.Call("User32::GetWindowTextW", hWnd, lpBuffer, nBufSize / 2);
SetTextLV(GetCurSelLV(), nID - IDWHATE + 1, AkelPad.MemRead(lpBuffer, DT_UNICODE).replace(/[\r\n\t]/g, ""));
bChangeFRT = true;
}
function CheckButtonsFRT(nID)
{
var sParams = "";
var i;
if ((nID == IDREGEXP) && AkelPad.SendMessage(aWnd[IDREGEXP].Handle, 0x00F0 /*BM_GETCHECK*/, 0, 0))
AkelPad.SendMessage(aWnd[IDESCSEQ].Handle, 0x00F1 /*BM_SETCHECK*/, 0, 0);
else if ((nID == IDESCSEQ) && AkelPad.SendMessage(aWnd[IDESCSEQ].Handle, 0x00F0 /*BM_GETCHECK*/, 0, 0))
AkelPad.SendMessage(aWnd[IDREGEXP].Handle, 0x00F1 /*BM_SETCHECK*/, 0, 0);
ShowHelpLinksFRT();
for (i = IDMATCHC; i <= IDESCSEQ; ++i)
sParams += AkelPad.SendMessage(aWnd[i].Handle, 0x00F0 /*BM_GETCHECK*/, 0, 0).toString();
SetTextLV(GetCurSelLV(), 3, sParams);
bChangeFRT = true;
}
function ShowHelpLinksFRT()
{
bShow = AkelPad.SendMessage(aWnd[IDREGEXP].Handle, 0x00F0 /*BM_GETCHECK*/, 0, 0);
oSys.Call("User32::ShowWindow", aWnd[IDHELP1L].Handle, bShow);
oSys.Call("User32::ShowWindow", aWnd[IDHELP2L].Handle, bShow);
}
function GetItemCountLV()
{
return AkelPad.SendMessage(aWnd[IDNAMELV].Handle, 0x1004 /*LVM_GETITEMCOUNT*/, 0, 0);
}
function GetCurFocLV()
{
return AkelPad.SendMessage(aWnd[IDNAMELV].Handle, 0x100C /*LVM_GETNEXTITEM*/, -1, 0x0001 /*LVNI_FOCUSED*/);
}
function GetCurSelLV()
{
return AkelPad.SendMessage(aWnd[IDNAMELV].Handle, 0x100C /*LVM_GETNEXTITEM*/, -1, 0x0002 /*LVNI_SELECTED*/);
}
function SetCurSelLV(nItem)
{
AkelPad.MemCopy(lpLVITEM + 12, 0x0003 /*LVIS_SELECTED|LVIS_FOCUSED*/, DT_DWORD);
AkelPad.MemCopy(lpLVITEM + 16, 0x0003 /*LVIS_SELECTED|LVIS_FOCUSED*/, DT_DWORD);
AkelPad.SendMessage(aWnd[IDNAMELV].Handle, 0x102B /*LVM_SETITEMSTATE*/, nItem, lpLVITEM);
AkelPad.SendMessage(aWnd[IDNAMELV].Handle, 0x1013 /*LVM_ENSUREVISIBLE*/, nItem, false);
}
function GetTextLV(nItem, nSubItem)
{
AkelPad.MemCopy(lpLVITEM + 8, nSubItem, DT_DWORD);
AkelPad.SendMessage(aWnd[IDNAMELV].Handle, 0x1073 /*LVM_GETITEMTEXTW*/, nItem, lpLVITEM);
return AkelPad.MemRead(lpBuffer, DT_UNICODE);
}
function SetTextLV(nItem, nSubItem, sText)
{
AkelPad.MemCopy(lpLVITEM + 8, nSubItem, DT_DWORD);
AkelPad.MemCopy(lpBuffer, sText, DT_UNICODE);
AkelPad.SendMessage(aWnd[IDNAMELV].Handle, 0x1074 /*LVM_SETITEMTEXTW*/, nItem, lpLVITEM);
}
function InsertItemLV(aField)
{
var nItem;
var i;
AkelPad.MemCopy(lpLVITEM + 8, 0, DT_DWORD);
AkelPad.MemCopy(lpBuffer, aField[0], DT_UNICODE);
nItem = AkelPad.SendMessage(aWnd[IDNAMELV].Handle, 0x104D /*LVM_INSERTITEMW*/, 0, lpLVITEM);
for (i = 1; i < 4; ++i)
{
AkelPad.MemCopy(lpLVITEM + 8, i, DT_DWORD);
AkelPad.MemCopy(lpBuffer, aField[i], DT_UNICODE);
AkelPad.SendMessage(aWnd[IDNAMELV].Handle, 0x1074 /*LVM_SETITEMTEXTW*/, nItem, lpLVITEM);
}
return nItem;
}
function DeleteItemLV(nItem)
{
AkelPad.SendMessage(aWnd[IDNAMELV].Handle, 0x1008 /*LVM_DELETEITEM*/, nItem, 0);
}
function InsertColumnsLV()
{
var lpLVCOLUMN = AkelPad.MemAlloc(40) //sizeof(LVCOLUMN)
var aText = [sTxtName, sTxtFindWhat, sTxtReplaceWith, ""];
var i;
AkelPad.MemCopy(lpLVCOLUMN, 6 /*mask=LVCF_WIDTH|LVCF_TEXT*/, DT_DWORD);
AkelPad.MemCopy(lpLVCOLUMN + 12, lpBuffer, DT_DWORD);
for (i = 0; i < 4; ++i)
{
AkelPad.MemCopy(lpBuffer, aText[i], DT_UNICODE);
AkelPad.SendMessage(aWnd[IDNAMELV].Handle, 0x1061 /*LVM_INSERTCOLUMNW*/, i, lpLVCOLUMN);
}
AkelPad.SendMessage(aWnd[IDNAMELV].Handle, 0x1036 /*LVM_SETEXTENDEDLISTVIEWSTYLE*/, 0x0020 /*LVS_EX_FULLROWSELECT*/, 0x0020);
AkelPad.MemFree(lpLVCOLUMN);
}
function FillLV()
{
var sFRTName = WScript.ScriptFullName.substring(0, WScript.ScriptFullName.lastIndexOf(".")) + "_templates.tsv";
var aRecord;
var aField;
var i;
if (oFSO.FileExists(sFRTName))
aRecord = AkelPad.ReadFile(sFRTName).split("\r\n");
else
{
aRecord = ["Empty lines\t^[ \\t]*$\\n*\t\t0010"];
bChangeFRT = true;
}
for (i = 0; i < aRecord.length; ++i)
{
aField = aRecord[i].split("\t");
if (aField[0])
{
while (aField.length < 4)
aField[aField.length] = "";
while (aField[3].length < 4)
aField[3] += "0";
aField[3] = aField[3].replace(/[^1]/g, "0");
InsertItemLV(aField);
}
}
if (nFRTSel > GetItemCountLV() - 1)
nFRTSel = GetItemCountLV() - 1;
if (nFRTSel < 0)
nFRTSel = 0;
SetCurSelLV(nFRTSel);
}
function WriteFRT()
{
if (bChangeFRT)
{
var oFile = oFSO.OpenTextFile(WScript.ScriptFullName.substring(0, WScript.ScriptFullName.lastIndexOf(".")) + "_templates.tsv", 2, true, -1);
var nItems = GetItemCountLV();
var sText = "";
var i;
bChangeFRT = false;
for (i = 0; i < nItems; ++i)
sText += GetTextLV(i, 0) + "\t" + GetTextLV(i, 1) + "\t" + GetTextLV(i, 2) + "\t" + GetTextLV(i, 3) + "\r\n";
oFile.Write(sText);
oFile.Close();
}
}
function EditFRT(nType)
{
var nItem = GetCurSelLV();
var aField = [];
var sParams = "";
var sCaption;
var i;
if (nType == 1) //Add
{
GetWhatWithFR();
sCaption = sTxtAdd;
aField = [
"",
sWhatText,
(nDlgType == MLT_REPLACE) ? sWithText : "",
AkelPad.SendMessage(oSys.Call("User32::GetDlgItem", hDlgWnd, IDC_SEARCH_MATCHCASE), 0x00F0 /*BM_GETCHECK*/, 0, 0).toString(),
AkelPad.SendMessage(oSys.Call("User32::GetDlgItem", hDlgWnd, IDC_SEARCH_WHOLEWORD), 0x00F0 /*BM_GETCHECK*/, 0, 0).toString(),
AkelPad.SendMessage(oSys.Call("User32::GetDlgItem", hDlgWnd, IDC_SEARCH_REGEXP), 0x00F0 /*BM_GETCHECK*/, 0, 0).toString(),
AkelPad.SendMessage(oSys.Call("User32::GetDlgItem", hDlgWnd, IDC_SEARCH_ESCAPESEQ), 0x00F0 /*BM_GETCHECK*/, 0, 0).toString()];
}
else
{
if (nType == 0) //New
sCaption = sTxtNew;
else //Edit
{
if (nItem < 0)
return;
sCaption = sTxtEdit;
}
for (i = 0; i < 3; ++i)
aField[i] = (nItem < 0) ? "" : GetTextLV(nItem, i);
if (nItem > -1)
sParams = GetTextLV(nItem, 3);
for (i = 3; i < 7; ++i)
aField[i] = sParams.substr(i - 3, 1);
}
aField = InputBox(hWndFRT, sCaption, [sTxtName + ":", sTxtFindWhat + ":", sTxtReplaceWith + ":", sTxtMatchCase + " " + sTxt1Yes0No + ":", sTxtWholeWord + ":", sTxtRegExp + ":", sTxtEscSeq + ":"], aField, 0, "CheckInputFRT", nType);
if (aField)
{
if (nType == 2) //Edit
DeleteItemLV(nItem)
for (i = 0; i < 3; ++i)
aField[i] = aField[i].replace(/[\r\n\t]/g, "");
for (i = 3; i < 7; ++i)
{
if (aField[i] != "1")
aField[i] = "0";
}
if ((aField[5] == "1") && (aField[6] == "1"))
aField[5] = "0";
aField[3] += aField[4] + aField[5] + aField[6]
aField.splice(4, 3);
SetCurSelLV(InsertItemLV(aField));
bChangeFRT = true;
}
}
function CheckInputFRT(hWnd, aField, nType)
{
var sCaption;
var lpLVFINDINFO;
var nSelItem;
var nFindItem;
if (nType == 0)
sCaption = sTxtNew;
else if (nType == 1)
sCaption = sTxtAdd;
else if (nType == 2)
sCaption = sTxtEdit;
if (aField[0])
{
lpLVFINDINFO = AkelPad.MemAlloc(24); //sizeof(LVFINDINFO)
AkelPad.MemCopy(lpLVFINDINFO, 0x02 /*LVFI_STRING*/, DT_DWORD);
AkelPad.MemCopy(lpLVFINDINFO + 4, lpBuffer, DT_DWORD);
AkelPad.MemCopy(lpBuffer, aField[0], DT_UNICODE);
nSelItem = GetCurSelLV();
nFindItem = AkelPad.SendMessage(aWnd[IDNAMELV].Handle, 0x1053 /*LVM_FINDITEMW*/, -1, lpLVFINDINFO);
AkelPad.MemFree(lpLVFINDINFO);
if (nFindItem > -1)
{
if ((nType < 2) || (nFindItem != nSelItem))
{
WarningBox(hWnd, sTxtNameExists, sCaption);
return 0;
}
}
}
else
{
WarningBox(hWnd, sTxtNoName, sCaption);
return 0;
}
if (! aField[1])
{
WarningBox(hWnd, sTxtNoFindWhat, sCaption);
return 1;
}
return -1;
}
function DeleteFRT()
{
var nItem = GetCurSelLV();
if (nItem > -1)
{
if (QuestionBox(hWndFRT, '"' + GetTextLV(nItem, 0) + '"\n\n' + sTxtWantRemove, sTxtDelete))
{
DeleteItemLV(nItem);
if (nItem == GetItemCountLV())
--nItem;
SetCurSelLV(nItem);
RefreshViewFRT();
bChangeFRT = true;
if (! oSys.Call("User32::IsWindowEnabled", oSys.Call("User32::GetFocus")))
oSys.Call("User32::SetFocus", aWnd[IDNAMELV].Handle);
}
}
}
function WarningBox(hWnd, sText, sCaption)
{
AkelPad.MessageBox(hWnd, sText, sCaption, 0x30 /*MB_ICONWARNING*/);
}
function QuestionBox(hWnd, sText, sCaption)
{
return (AkelPad.MessageBox(hWnd, sText, sCaption, 0x23 /*MB_ICONQUESTION|MB_YESNOCANCEL*/) == 6 /*IDYES*/);
}
|
Last edited by KDJ on Sun Mar 24, 2013 3:53 pm; edited 4 times in total |
|
| Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1067 Location: Poland
|
Posted: Fri Jan 25, 2013 11:09 pm Post subject: |
|
|
Extended version of "Find/Replace" dialog - part 2.
FindReplaceEx_part2.js
| Code: | function RegExpHelp(nHelpID, bFRT)
{
var hMenu = oSys.Call("User32::CreatePopupMenu");
var nString = 0x0000; //MF_STRING
var nDisable = 0x0002; //MF_DISABLED
var nBreak = 0x0060; //MF_MENUBREAK|MF_MENUBARBREAK
var nSepar = 0x0800; //MF_SEPARATOR
var hFromPos;
var hEdit;
var hWndOwn;
var aMenu;
var nMenuX;
var nMenuY;
var nCmd;
var i;
if (nHelpID == IDHELP1L)
{
if (bFRT)
{
hFromPos = aWnd[IDWHATE].Handle;
hEdit = aWnd[IDWHATE].Handle;
}
else
{
hFromPos = oSys.Call("User32::GetDlgItem", hDlgWnd, IDC_SEARCH_FIND);
hEdit = hDlgWhatE;
}
aMenu = [
[nString, ".", sHlpAnyChar],
[nString, "\\(", sHlpSpecChars],
[nString, "\\f", sHlpFF],
[nString, "\\n", sHlpAnyNL],
[nString, "\\r", sHlpAnyNL],
[nString, "\\t", sHlpTab],
[nString, "\\v", sHlpVTab],
[nString, "\\d", sHlpDigit],
[nString, "\\D", sHlpNonDigit],
[nString, "\\s", sHlpWhiteSp],
[nString, "\\S", sHlpNonWhiteSp],
[nString, "\\w", sHlpWordChar],
[nString, "\\W", sHlpNonWordChar],
[nString, "\\x{F}", sHlpCharHex],
[nString, "\\xFF", sHlpCharHex2],
[nString, "\\uFFFF", sHlpCharHex4],
[nSepar, 0, 0],
[nString, "^", sHlpBeginLine],
[nString, "$", sHlpEndLine],
[nString, "\\A", sHlpBeginText],
[nString, "\\Z", sHlpEndText],
[nString, "\\a", sHlpBeginRange],
[nString, "\\z", sHlpEndRange],
[nString, "\\b", sHlpWordBoun],
[nString, "\\B", sHlpNonWordBoun],
[nBreak, "ab|xy", sHlpAlternative],
[nString, "[abc]", sHlpCharSet],
[nString, "[^abc]", sHlpNegCharSet],
[nString, "[a-z]", sHlpRange],
[nString, "[^a-z]", sHlpNegRange],
[nSepar, 0, 0],
[nString, "(ab)", sHlpCapture],
[nString, "(?:ab)", sHlpNotCapture],
[nString, "(?<=ab)", sHlpPreceded],
[nString, "(?<!ab)", sHlpNotPreceded],
[nString, "(?=ab)", sHlpFollowed],
[nString, "(?!ab)", sHlpNotFollowed],
[nString, "\\9", sHlpBackrefer9],
[nString, "\\99", sHlpBackrefer99],
[nSepar, 0, 0],
[nString, "?", sHlpZeroOrOne],
[nString, "*", sHlpZeroOrMore],
[nString, "+", sHlpOneOrMore],
[nString, "{3}", sHlpExactly],
[nString, "{3,}", sHlpAtLeast],
[nString, "{3,7}", sHlpFromTo],
[nDisable, "", sHlpNonGreedy]];
}
else
{
if (bFRT)
{
hFromPos = aWnd[IDWITHE].Handle;
hEdit = aWnd[IDWITHE].Handle;
}
else
{
hFromPos = oSys.Call("User32::GetDlgItem", hDlgWnd, IDC_SEARCH_REPLACE);
hEdit = hDlgWithE;
}
aMenu = [
[nString, "\\\\", sHlpBackslash],
[nString, "\\f", sHlpFF],
[nString, "\\n", sHlpNL],
[nString, "\\r", sHlpNL],
[nString, "\\t", sHlpTab],
[nString, "\\v", sHlpVTab],
[nString, "\\x{F}", sHlpCharHex],
[nString, "\\xFF", sHlpCharHex2],
[nString, "\\uFFFF", sHlpCharHex4],
[nSepar, 0, 0],
[nString, "\\0", sHlpEntireStr],
[nString, "\\9", sHlpSubmatch9],
[nString, "\\99", sHlpSubmatch99]];
}
oSys.Call("User32::GetWindowRect", hFromPos, lpBuffer);
nMenuX = AkelPad.MemRead(lpBuffer + 0, DT_DWORD);
nMenuY = AkelPad.MemRead(lpBuffer + 12, DT_DWORD);
if (bFRT)
{
hWndOwn = hWndFRT;
oSys.Call("User32::SetFocus", hEdit);
}
else
hWndOwn = oSys.Call("User32::CreateWindowExW", 0, "STATIC", 0, 0x90000000 /*WS_POPUP|WS_VISIBLE*/, 0, 0, 0, 0, hDlgWnd, 0, hInstanceDLL, 0);
for (i = 0; i < aMenu.length; ++i)
oSys.Call("User32::AppendMenuW", hMenu, aMenu[i][0], i + 1, aMenu[i][1] + "\t" + aMenu[i][2]);
nCmd = oSys.Call("User32::TrackPopupMenu", hMenu, 0x0180 /*TPM_RETURNCMD|TPM_NONOTIFY*/, nMenuX, nMenuY, 0, hWndOwn, 0);
oSys.Call("User32::DestroyMenu", hMenu);
if (! bFRT)
oSys.Call("User32::DestroyWindow", hWndOwn);
oSys.Call("User32::SetFocus", hEdit);
if (nCmd)
oSys.Call("User32::SendMessageW", hEdit, 0x00C2 /*EM_REPLACESEL*/, 1, aMenu[nCmd - 1][1]);
}
function ReadIni()
{
var sIniFile = WScript.ScriptFullName.substring(0, WScript.ScriptFullName.lastIndexOf(".")) + ".ini";
var sLngFile = WScript.ScriptFullName.substring(0, WScript.ScriptFullName.lastIndexOf(".")) + "_" + AkelPad.GetLangId(0 /*LANGID_FULL*/).toString() + ".lng";
var oError;
if (oFSO.FileExists(sLngFile))
{
try
{
eval(AkelPad.ReadFile(sLngFile));
}
catch (oError)
{
}
}
else
{
sTxtFRTempl = 'Find/Replace templates';
sTxtTemplates = 'Templates';
sTxtName = 'Name';
sTxtFindWhat = 'Find - What';
sTxtReplaceWith = 'Replace - With';
sTxtMatchCase = 'Match case';
sTxtWholeWord = 'Whole word';
sTxtRegExp = 'Regular expressions';
sTxtEscSeq = 'Esc sequences';
sTxt1Yes0No = '(1 = Yes, 0 = No)';
sTxtNew = 'New';
sTxtAdd = 'Add';
sTxtEdit = 'Edit';
sTxtDelete = 'Delete';
sTxtOK = 'OK';
sTxtClose = 'Close';
sTxtNameExists = 'This name already exists.';
sTxtNoName = 'Field "Name" is required.';
sTxtNoFindWhat = 'Field "Find - What" is required.';
sTxtWantRemove = 'Do you want to remove it?';
sHlpAnyChar = 'any character (dot)';
sHlpSpecChars = '()[]{}^$.?+*|\\ special chars';
sHlpFF = 'form feed \\x0C';
sHlpAnyNL = 'any new line';
sHlpTab = 'tab \\x09';
sHlpVTab = 'vertical tab \\x0B';
sHlpDigit = 'digit [0-9]';
sHlpNonDigit = 'non-digit [^0-9]';
sHlpWhiteSp = 'whitespace [ \\f\\n\\t\\v]';
sHlpNonWhiteSp = 'non-whitespace';
sHlpWordChar = 'word character [A-Za-z0-9_]';
sHlpNonWordChar = 'non-word character';
sHlpCharHex = 'char - hex code, range 0-10FFFF';
sHlpCharHex2 = 'char - 2-digit hex code';
sHlpCharHex4 = 'char - 4-digit hex code';
sHlpBeginLine = 'beginning of line';
sHlpEndLine = 'end of line';
sHlpBeginText = 'beginning of text';
sHlpEndText = 'end of text';
sHlpBeginRange = 'beginning of search range';
sHlpEndRange = 'end of search range';
sHlpWordBoun = 'word boundary';
sHlpNonWordBoun = 'non-word boundary';
sHlpAlternative = 'alternative ab or xy';
sHlpCharSet = 'character set, any specified';
sHlpNegCharSet = 'negative character set';
sHlpRange = 'range of chars from a to z';
sHlpNegRange = 'negative range of chars';
sHlpCapture = 'capture';
sHlpNotCapture = 'not capture';
sHlpPreceded = 'preceded by ab';
sHlpNotPreceded = 'not preceded by ab';
sHlpFollowed = 'followed by ab';
sHlpNotFollowed = 'not followed by ab';
sHlpBackrefer9 = 'backreference, range 1-9';
sHlpBackrefer99 = 'backreference, range 01-99';
sHlpZeroOrOne = 'zero or one times';
sHlpZeroOrMore = 'zero or more times';
sHlpOneOrMore = 'one or more times';
sHlpExactly = 'exactly 3 times';
sHlpAtLeast = 'at least 3 times';
sHlpFromTo = 'from 3 to 7 times';
sHlpBackslash = 'backslash';
sHlpNL = 'new line';
sHlpEntireStr = 'entire string matched';
sHlpSubmatch9 = '9th captured submatch, range 1-9';
sHlpSubmatch99 = '99th captured submatch, range 01-99';
sHlpNonGreedy = 'Quantifiers ?*+{} are lazy';
}
if (oFSO.FileExists(sIniFile))
{
try
{
eval(AkelPad.ReadFile(sIniFile));
}
catch (oError)
{
}
}
}
function WriteIni()
{
var oFile = oFSO.OpenTextFile(WScript.ScriptFullName.substring(0, WScript.ScriptFullName.lastIndexOf(".")) + ".ini", 2, true, -1);
oFile.Write(
'bGoToDlg=' + bGoToDlg + ';\r\n' +
'nDlgX=' + nDlgX + ';\r\n' +
'nDlgY=' + nDlgY + ';\r\n' +
'nFRTW=' + nFRTW + ';\r\n' +
'nFRTH=' + nFRTH + ';\r\n' +
'nFRTSel=' + nFRTSel + ';');
oFile.Close();
}
|
Interface language files for FindReplaceEx.js.
FindReplaceEx_1033.lng
| Code: | /**************************************
FindReplaceEx.js - ver. 2013-03-24
Interface language
Language: English (1033)
Translated by: KDJ
**************************************/
sTxtFRTempl = 'Find/Replace templates';
sTxtTemplates = 'Templates';
sTxtName = 'Name';
sTxtFindWhat = 'Find - What';
sTxtReplaceWith = 'Replace - With';
sTxtMatchCase = 'Match case';
sTxtWholeWord = 'Whole word';
sTxtRegExp = 'Regular expressions';
sTxtEscSeq = 'Esc sequences';
sTxt1Yes0No = '(1 = Yes, 0 = No)';
sTxtNew = 'New';
sTxtAdd = 'Add';
sTxtEdit = 'Edit';
sTxtDelete = 'Delete';
sTxtOK = 'OK';
sTxtClose = 'Close';
sTxtNameExists = 'This name already exists.';
sTxtNoName = 'Field "Name" is required.';
sTxtNoFindWhat = 'Field "Find - What" is required.';
sTxtWantRemove = 'Do you want to remove it?';
sHlpAnyChar = 'any character (dot)';
sHlpSpecChars = '()[]{}^$.?+*|\\ special chars';
sHlpFF = 'form feed \\x0C';
sHlpAnyNL = 'any new line';
sHlpTab = 'tab \\x09';
sHlpVTab = 'vertical tab \\x0B';
sHlpDigit = 'digit [0-9]';
sHlpNonDigit = 'non-digit [^0-9]';
sHlpWhiteSp = 'whitespace [ \\f\\n\\t\\v]';
sHlpNonWhiteSp = 'non-whitespace';
sHlpWordChar = 'word character [A-Za-z0-9_]';
sHlpNonWordChar = 'non-word character';
sHlpCharHex = 'char - hex code, range 0-10FFFF';
sHlpCharHex2 = 'char - 2-digit hex code';
sHlpCharHex4 = 'char - 4-digit hex code';
sHlpBeginLine = 'beginning of line';
sHlpEndLine = 'end of line';
sHlpBeginText = 'beginning of text';
sHlpEndText = 'end of text';
sHlpBeginRange = 'beginning of search range';
sHlpEndRange = 'end of search range';
sHlpWordBoun = 'word boundary';
sHlpNonWordBoun = 'non-word boundary';
sHlpAlternative = 'alternative ab or xy';
sHlpCharSet = 'character set, any specified';
sHlpNegCharSet = 'negative character set';
sHlpRange = 'range of chars from a to z';
sHlpNegRange = 'negative range of chars';
sHlpCapture = 'capture';
sHlpNotCapture = 'not capture';
sHlpPreceded = 'preceded by ab';
sHlpNotPreceded = 'not preceded by ab';
sHlpFollowed = 'followed by ab';
sHlpNotFollowed = 'not followed by ab';
sHlpBackrefer9 = 'backreference, range 1-9';
sHlpBackrefer99 = 'backreference, range 01-99';
sHlpZeroOrOne = 'zero or one times';
sHlpZeroOrMore = 'zero or more times';
sHlpOneOrMore = 'one or more times';
sHlpExactly = 'exactly 3 times';
sHlpAtLeast = 'at least 3 times';
sHlpFromTo = 'from 3 to 7 times';
sHlpBackslash = 'backslash';
sHlpNL = 'new line';
sHlpEntireStr = 'entire string matched';
sHlpSubmatch9 = '9th captured submatch, range 1-9';
sHlpSubmatch99 = '99th captured submatch, range 01-99';
sHlpNonGreedy = 'Quantifiers ?*+{} are lazy';
|
- English template for translation
FindReplaceEx_1045.lng
| Code: | /**************************************
FindReplaceEx.js - ver. 2013-03-24
Interface language
Language: Polish (1045)
Translated by: KDJ
**************************************/
sTxtFRTempl = 'Szablony Znajdź/Zamień';
sTxtTemplates = 'Szablony';
sTxtName = 'Nazwa';
sTxtFindWhat = 'Znajdź - Co';
sTxtReplaceWith = 'Zamień - Czym';
sTxtMatchCase = 'Uwzględnij wielkość liter';
sTxtWholeWord = 'Całe wyrazy';
sTxtRegExp = 'Wyrażenia regularne';
sTxtEscSeq = 'Sekwencje Esc';
sTxt1Yes0No = '(1 = Tak, 0 = Nie)';
sTxtNew = 'Nowy';
sTxtAdd = 'Dodaj';
sTxtEdit = 'Edytuj';
sTxtDelete = 'Usuń';
sTxtOK = 'OK';
sTxtClose = 'Zamknij';
sTxtNameExists = 'Ta nazwa już istnieje.';
sTxtNoName = 'Pole "Nazwa" jest wymagane.';
sTxtNoFindWhat = 'Pole "Znajdź - Co" jest wymagane.';
sTxtWantRemove = 'Czy chcesz to usunąć?';
sHlpAnyChar = 'dowolny znak (kropka)';
sHlpSpecChars = '()[]{}^$.?+*|\\ znaki specjalne';
sHlpFF = 'wysuw strony \\x0C';
sHlpAnyNL = 'nowy wiersz dowolnego formatu';
sHlpTab = 'tab \\x09';
sHlpVTab = 'pionowy tab \\x0B';
sHlpDigit = 'cyfra [0-9]';
sHlpNonDigit = 'inny niż cyfra [^0-9]';
sHlpWhiteSp = 'biały znak [ \\f\\n\\t\\v]';
sHlpNonWhiteSp = 'inny niż biały znak';
sHlpWordChar = 'znak słowa [A-Za-z0-9_]';
sHlpNonWordChar = 'inny niż znak słowa';
sHlpCharHex = 'znak - kod hex, zakres 0-10FFFF';
sHlpCharHex2 = 'znak - 2-cyfrowy kod hex';
sHlpCharHex4 = 'znak - 4-cyfrowy kod hex';
sHlpBeginLine = 'początek wiersza';
sHlpEndLine = 'koniec wiersza';
sHlpBeginText = 'początek tekstu';
sHlpEndText = 'koniec tekstu';
sHlpBeginRange = 'początek zakresu wyszukiwania';
sHlpEndRange = 'koniec zakresu wyszukiwania';
sHlpWordBoun = 'granica słowa';
sHlpNonWordBoun = 'brak granicy słowa';
sHlpAlternative = 'alternatywa ab lub xy';
sHlpCharSet = 'zestaw znaków, dowolny z abc';
sHlpNegCharSet = 'zaprzeczenie zestawu znaków';
sHlpRange = 'zakres znaków od a do z';
sHlpNegRange = 'zaprzeczenie zakresu znaków';
sHlpCapture = 'przechwytuje';
sHlpNotCapture = 'nie przechwytuje';
sHlpPreceded = 'przed ciągiem jest ab';
sHlpNotPreceded = 'przed ciągiem nie ma ab';
sHlpFollowed = 'za ciągiem jest ab';
sHlpNotFollowed = 'za ciągiem nie ma ab';
sHlpBackrefer9 = 'odwołanie wsteczne, zakres 1-9';
sHlpBackrefer99 = 'odwołanie wsteczne, zakres 01-99';
sHlpZeroOrOne = 'zero lub jeden raz';
sHlpZeroOrMore = 'zero lub więcej razy';
sHlpOneOrMore = 'jeden lub więcej razy';
sHlpExactly = 'dokładnie 3 razy';
sHlpAtLeast = 'co najmniej 3 razy';
sHlpFromTo = 'od 3 do 7 razy';
sHlpBackslash = 'backslash';
sHlpNL = 'nowy wiersz';
sHlpEntireStr = 'cały dopasowany ciąg';
sHlpSubmatch9 = '9-ty dopasowany podciąg, zakres 1-9';
sHlpSubmatch99 = '99-ty dopasowany podciąg, zakres 01-99';
sHlpNonGreedy = 'Kwantyfikatory ?*+{} są leniwe';
|
- Polish
FindReplaceEx_1049.lng
| Code: | /**************************************
FindReplaceEx.js - ver. 2013-03-24
Interface language
Language: Russian (1049)
Translated by: F.Phoenix
**************************************/
sTxtFRTempl = 'Шаблоны поиска и замены';
sTxtTemplates = 'Шаблоны';
sTxtName = 'Наименование';
sTxtFindWhat = 'Что найти';
sTxtReplaceWith = 'Чем заменить';
sTxtMatchCase = 'Учитывать регистр';
sTxtWholeWord = 'Слово целиком';
sTxtRegExp = 'Регулярные выражения';
sTxtEscSeq = 'Esc-последовательности';
sTxt1Yes0No = '(1 = да, 0 = нет)';
sTxtNew = 'Создать';
sTxtAdd = 'Добавить';
sTxtEdit = 'Изменить';
sTxtDelete = 'Удалить';
sTxtOK = 'OK';
sTxtClose = 'Закрыть';
sTxtNameExists = 'Такое наименование шаблона уже используется.';
sTxtNoName = 'Необходимо заполнить поле "Наименование".';
sTxtNoFindWhat = 'Необходимо заполнить поле "Что найти".';
sTxtWantRemove = 'Вы дейстительно хотите удалить этот шаблон?';
sHlpAnyChar = 'любой символ (точка)';
sHlpSpecChars = '()[]{}^$.?+*|\\ специальные символы';
sHlpFF = 'перевод страницы \\x0C';
sHlpAnyNL = 'перевод строки';
sHlpTab = 'табуляция \\x09';
sHlpVTab = 'вертикальная табуляция \\x0B';
sHlpDigit = 'цифра [0-9]';
sHlpNonDigit = 'не цифра [^0-9]';
sHlpWhiteSp = 'пробельный символ [ \\f\\n\\t\\v]';
sHlpNonWhiteSp = 'непробельный символ';
sHlpWordChar = 'словесный символ [A-Za-z0-9_]';
sHlpNonWordChar = 'несловесеый символ';
sHlpCharHex = 'char - hex code, range 0-10FFFF'; //new
sHlpCharHex2 = 'char - 2-digit hex code'; //new, instead of sHlpCharHex='character hex code FF'; sHlpCharHex='символ с кодом FF';
sHlpCharHex4 = 'char - 4-digit hex code'; //new, instead of sHlpUniCharHex='Unicode char hex code FFFF'; sHlpUniCharHex='символ юникода FFFF';
sHlpBeginLine = 'начало строки';
sHlpEndLine = 'конец строки';
sHlpBeginText = 'beginning of text'; //new
sHlpEndText = 'end of text'; //new
sHlpBeginRange = 'beginning of search range'; //new
sHlpEndRange = 'end of search range'; //new
sHlpWordBoun = 'граница слова';
sHlpNonWordBoun = 'не граница слова';
sHlpAlternative = 'одна из альтернатив: ab либо xy';
sHlpCharSet = 'набор символов, нужен любой из них';
sHlpNegCharSet = 'исключающий набор символов';
sHlpRange = 'диапазон символов от a до z';
sHlpNegRange = 'исключающий диапазон';
sHlpCapture = 'запоминающая скобка';
sHlpNotCapture = 'незапоминающая скобка';
sHlpPreceded = 'preceded by ab'; //new
sHlpNotPreceded = 'not preceded by ab'; //new
sHlpFollowed = 'далее следует ab';
sHlpNotFollowed = 'далее не следует ab';
sHlpBackrefer9 = 'обратная ссылка, диапазон 1-9';
sHlpBackrefer99 = 'обратная ссылка, диапазон 01-99';
sHlpZeroOrOne = '0 или 1 раз';
sHlpZeroOrMore = '0 или более раз';
sHlpOneOrMore = '1 или более раз';
sHlpExactly = 'ровно 3 раза';
sHlpAtLeast = 'не менее 3 раз';
sHlpFromTo = 'от 3 до 7 раз';
sHlpBackslash = 'обратный слеш';
sHlpNL = 'перевод строки';
sHlpEntireStr = 'вся захваченная строка';
sHlpSubmatch9 = '9я подстрока (диапазон 1-9)';
sHlpSubmatch99 = '99я подстрока (диапазон 01-99)';
sHlpNonGreedy = 'все квантификаторы ленивы';
|
- Russian by F. Phoenix
FindReplaceEx_2052.lng
| Code: | /**************************************
FindReplaceEx.js - ver. 2013-03-24
Interface language
Language: ChineseSimplified (2052)
Translated by: cnnnc
**************************************/
sTxtFRTempl = '查找/替换 模板';
sTxtTemplates = '模板';
sTxtName = '名称';
sTxtFindWhat = '查找';
sTxtReplaceWith = '替换';
sTxtMatchCase = '区分大小写';
sTxtWholeWord = '整字匹配';
sTxtRegExp = '正则表达式';
sTxtEscSeq = '转义符序列';
sTxt1Yes0No = '(1 = 是, 0 = 否)';
sTxtNew = '新建';
sTxtAdd = '添加';
sTxtEdit = '编辑';
sTxtDelete = '删除';
sTxtOK = '确定';
sTxtClose = '关闭';
sTxtNameExists = '名称已经存在。';
sTxtNoName = '需要名称。';
sTxtNoFindWhat = '“查找”内容不能为空。';
sTxtWantRemove = '是否想要删除?';
sHlpAnyChar = '任意单一字符';
sHlpSpecChars = '()[]{}^$.?+*|\\ 特殊符号';
sHlpFF = '换页符 \\x0C';
sHlpAnyNL = '任何换行符';
sHlpTab = '制表符 \\x09';
sHlpVTab = '垂直制表符 \\x0B';
sHlpDigit = '数字 [0-9]';
sHlpNonDigit = '非数字 [^0-9]';
sHlpWhiteSp = '空白字符 [ \\f\\n\\t\\v]';
sHlpNonWhiteSp = '非空白字符';
sHlpWordChar = '单词字符 [A-Za-z0-9_]';
sHlpNonWordChar = '非单词字符';
sHlpCharHex = '字符 - 16 进制编码, 范围 0-10FFFF';
sHlpCharHex2 = '字符 - 2 位 16 进制编码';
sHlpCharHex4 = '字符 - 4 位 16 进制编码';
sHlpBeginLine = '行开头';
sHlpEndLine = '行末尾';
sHlpBeginText = '文本开头';
sHlpEndText = '文本末尾';
sHlpBeginRange = '搜索范围的开头';
sHlpEndRange = '搜索范围的末尾';
sHlpWordBoun = '单词边界';
sHlpNonWordBoun = '非单词边界';
sHlpAlternative = '匹配 ab 或 xy';
sHlpCharSet = '字符集合, 匹配所包含的任意一个字符';
sHlpNegCharSet = '负值字符集合,匹配未包含的任意字符';
sHlpRange = '匹配 a 到 z 范围内的任意小写字母字符';
sHlpNegRange = '匹配任何不在 a 到 z 范围内的任意字符';
sHlpCapture = '匹配 ab 并获取这一匹配';
sHlpNotCapture = '匹配 ab 但不获取匹配';
sHlpPreceded = '前面带有 ab';
sHlpNotPreceded = '前面不带有 ab';
sHlpFollowed = '在任何匹配 ab 的字符串开始处匹配查找字符串';
sHlpNotFollowed = '在任何不匹配 ab 的字符串开始处匹配查找字符串';
sHlpBackrefer9 = '向后引用, 范围 1-9';
sHlpBackrefer99 = '向后引用, 范围 01-99';
sHlpZeroOrOne = '匹配前面的子表达式零次或一次';
sHlpZeroOrMore = '匹配前面的子表达式零次或多次';
sHlpOneOrMore = '匹配前面的子表达式一次或多次';
sHlpExactly = '精确匹配 3 次';
sHlpAtLeast = '最少匹配 3 次';
sHlpFromTo = '匹配 3 到 7 次的';
sHlpBackslash = '反斜线';
sHlpNL = '换行符';
sHlpEntireStr = '匹配整个字符串';
sHlpSubmatch9 = '第 9 个捕捉子匹配, 范围 1-9';
sHlpSubmatch99 = '第 99 个捕捉子匹配, 范围 01-99';
sHlpNonGreedy = '限定符 ?*+{} 懒惰模式';
|
- Chinese-Simplified by cnnnc
Last edited by KDJ on Mon Mar 25, 2013 7:22 pm; edited 7 times in total |
|
| Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1067 Location: Poland
|
Posted: Tue Feb 05, 2013 5:54 pm Post subject: |
|
|
Minimize, maximize or restore tab in MDI mode.
TabMinMax.js
| Code: | // TabMinMax.js - ver. 2013-01-25
//
// Minimize, maximize or 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 = AkelPad.SendMessage(hMainWnd, 1288 /*AKD_FRAMEFIND*/, 1 /*FWF_CURRENT*/, 0);
var hWndMdi = AkelPad.SendMessage(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);
}
|
|
|
| Back to top |
|
 |
akkorn
Joined: 08 Feb 2013 Posts: 32
|
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: 1431
|
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
// version 0.1.1 - 2013-05-06
// Compare contents of current and next selected tab using WinMerge (http://winmerge.org/)
// or any other compare tool
// 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
// 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 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("|")
: [
"<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);
var showDelay = 600;
var hideDelay = 150;
try {
var window = new ActiveXObject("htmlfile").parentWindow;
var shown = true;
var timer = window.setTimeout(function blink() {
statusbar.set(shown ? "" : statusMsg);
timer = window.setTimeout(blink, (shown = !shown) ? showDelay : hideDelay);
}, showDelay);
}
catch(e) {
}
}
if(
lpFrame
&& AkelPad.WindowSubClass(
hMainWnd,
mainCallback,
0x416 /*AKDN_FRAME_ACTIVATE*/,
0x418 /*AKDN_FRAME_DESTROY*/
)
) {
AkelPad.ScriptNoMutex(5 /*ULT_UNLOCKSCRIPTSQUEUE|ULT_LOCKMULTICOPY*/); // Allow other scripts running
AkelPad.WindowGetMessage(); // Message loop
AkelPad.WindowUnsubClass(hMainWnd);
AkelPad.ScriptNoMutex(8 /*ULT_UNLOCKMULTICOPY*/);
timer && window.clearTimeout(timer);
statusbar.restore();
if(lpFrame2)
compareTabs(lpFrame, lpFrame2);
}
else {
timer && window.clearTimeout(timer);
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);
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);
if(origFile) {
var codePage = AkelPad.GetEditCodePage(hWndEdit);
var hasBOM = AkelPad.GetEditBOM(hWndEdit);
}
else {
// Will use UTF-8 with BOM to correctly save all (most?) new documents
var codePage = 65001;
var hasBOM = 1;
}
var text = AkelPad.GetTextRange(0, -1);
AkelPad.SendMessage(hMainWnd, 273 /*WM_COMMAND*/, 4101 /*IDM_FILE_NEW*/, 0);
AkelPad.SetSel(0, -1);
AkelPad.ReplaceSel(text);
var err = AkelPad.SaveFile(AkelPad.GetEditWnd(), tempFile, codePage, hasBOM);
if(err) // Allow silently close tab
AkelPad.SendMessage(AkelPad.GetEditWnd(), 3087 /*AEM_SETMODIFY*/, 0, 0);
AkelPad.Command(4318 /*IDM_WINDOW_FRAMECLOSE*/);
}
}
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() {
// 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! |
|
| 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
|