//Create RichEdit or AkelEdit control.
//Script can be run in AkelPad window or from command line (ActiveX).
//Required AkelEdit.dll and registration Scripts.dll.
GetAkelPadObject();
var oSys = AkelPad.SystemFunction();
var hMainWnd = AkelPad.GetMainWnd();
var hInstanceDLL = AkelPad.GetInstanceDll();
var sClassName = "AkelPad::Scripts::" + WScript.ScriptName + "::" + hInstanceDLL;
var sDlgName = "Edit control";
var bAkelEdit;
var sEditLibName;
var hEditLib;
var sEditClass;
var hEdit;
var hButton;
var nChoice = AkelPad.MessageBox(hMainWnd, "Create RichEdit or AkelEdit?", sDlgName, 0x23 /*MB_ICONQUESTION|MB_YESNOCANCEL*/);
if (nChoice == 2 /*IDCANCEL*/)
WScript.Quit();
bAkelEdit = nChoice - 6 /*IDYES*/;
if (hMainWnd)
{
if (bAkelEdit)
{
sEditClass = "AkelEditW";
//or
//sEditClass = "RichEdit20W";
}
else
{
sEditClass = "RICHEDIT50W";
sEditLibName = "Msftedit.dll";
LoadLibrary();
}
sDlgName += " - AkelPad - " + sEditClass;
}
else
{
if (bAkelEdit)
{
sEditClass = "AkelEditW";
sEditLibName = "AkelEdit.dll";
}
else
{
sEditClass = "RichEdit20W";
sEditLibName = "Riched20.dll";
//or
//sEditClass = "RICHEDIT50W";
//sEditLibName = "Msftedit.dll";
}
sDlgName += " - ActiveX - " + sEditClass;
LoadLibrary();
}
AkelPad.WindowRegisterClass(sClassName);
oSys.Call("user32::CreateWindowExW",
0, //dwExStyle
sClassName, //lpClassName
sDlgName, //lpWindowName
0x90CA0000, //dwStyle=WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX
300, //x
200, //y
360, //nWidth
240, //nHeight
hMainWnd, //hWndParent
0, //ID
hInstanceDLL, //hInstance
DialogCallback); //Script function callback. To use it class must be registered by WindowRegisterClass.
AkelPad.WindowGetMessage();
if (hEditLib)
oSys.Call("kernel32::FreeLibrary", hEditLib);
AkelPad.WindowUnregisterClass(sClassName);
function DialogCallback(hWnd, uMsg, wParam, lParam)
{
if (uMsg == 1) //WM_CREATE
{
hEdit =
oSys.Call("user32::CreateWindowExW",
0, //dwExStyle
sEditClass, //lpClassName
0, //lpWindowName
0x50311104, //dwStyle=WS_VISIBLE|WS_CHILD|WS_HSCROLL|WS_VSCROLL|WS_TABSTOP|ES_WANTRETURN|ES_NOHIDESEL|ES_MULTILINE
10, //x
10, //y
335, //nWidth
140, //nHeight
hWnd, //hWndParent
0, //ID
hInstanceDLL, //hInstance
0); //lpParam
oSys.Call("user32::SetWindowTextW", hEdit, "The original specification for rich edit controls is Microsoft Rich Edit 1.0; the current specification is Microsoft Rich Edit 4.1. Each version of rich edit is a superset of the preceding one, except that only Asian builds of Microsoft Rich Edit 1.0 have a vertical text option. Before creating a rich edit control, you should call the LoadLibrary function to verify which version of Microsoft Rich Edit is installed.");
hButton =
oSys.Call("user32::CreateWindowExW",
0, //dwExStyle
"BUTTON", //lpClassName
"Wrap lines", //lpWindowName
0x50010003, //dwStyle=WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_AUTOCHECKBOX
130, //x
170, //y
100, //nWidth
25, //nHeight
hWnd, //hWndParent
0, //ID
hInstanceDLL, //hInstance
0); //lpParam
}
else if (uMsg == 7) //WM_SETFOCUS
oSys.Call("user32::SetFocus", hButton);
else if (uMsg == 256) //WM_KEYDOWN
{
if (wParam == 27) //VK_ESCAPE
oSys.Call("user32::PostMessageW", hWnd, 16 /*WM_CLOSE*/, 0, 0);
}
else if (uMsg == 273) //WM_COMMAND
{
if (lParam == hButton)
SetWordWrap();
}
else if (uMsg == 16) //WM_CLOSE
oSys.Call("user32::DestroyWindow", hWnd);
else if (uMsg == 2) //WM_DESTROY
oSys.Call("user32::PostQuitMessage", 0);
return 0;
}
function LoadLibrary()
{
hEditLib = oSys.Call("kernel32::LoadLibraryW", sEditLibName);
if (! hEditLib)
{
WScript.Echo("Can not load library: " + sEditLibName);
WScript.Quit();
}
}
function SetWordWrap()
{
var bWordWrap = AkelPad.SendMessage(hButton, 240 /*BM_GETCHECK*/, 0, 0);
if (bAkelEdit)
AkelPad.SendMessage(hEdit, 0x0CAA /*AEM_SETWORDWRAP*/, bWordWrap, 0);
else
AkelPad.SendMessage(hEdit, 1096 /*EM_SETTARGETDEVICE*/, 0, ! bWordWrap);
}
function GetAkelPadObject()
{
if (typeof AkelPad == "undefined")
{
var oError;
try
{
AkelPad = new ActiveXObject("AkelPad.Document");
_TCHAR = AkelPad.Constants._TCHAR;
_TSTR = AkelPad.Constants._TSTR;
_TSIZE = AkelPad.Constants._TSIZE;
}
catch (oError)
{
WScript.Echo("You need register Scripts.dll");
WScript.Quit();
}
}
}
Posted: Mon Aug 20, 2012 6:18 pm
by KDJ
FileAndStream.js
Changed: update for Scripts plugin v11.3.
Fixed: bug in directories history.
PluginText.js
Changed: update for Scripts plugin v11.3.
Posted: Thu Aug 23, 2012 12:49 pm
by Andrey_A_A
Можно ли в скрипте переместить курсор в позицию мышки...
Предлагали смотреть AkelDLL.h , ничего подобного там не нашёл, или не так искал
Posted: Thu Aug 23, 2012 1:39 pm
by VladSh
Infocatcher
Предложение по insertTag.js.
Сейчас извне можно жёстко задать -bbcode=true, что совсем не гибко.
Хотелось бы иметь возможность автоопределения по типу. Т.е. унифицировать клавиши для HTML и BbCode, например: b - Ctrl+b и т.д.
Для определения типа файла можно было бы использовать getExtBySyntaxFile из CommonFunctions.js.
Если расширение = htm, то использовать <>, в остальных случаях [].
var oSys=AkelPad.SystemFunction();
var hWndEdit=AkelPad.GetEditWnd();
var nCursorChar;
if ((nCursorChar=GetCursorChar(hWndEdit)) >= 0)
AkelPad.SetSel(nCursorChar, nCursorChar);
function GetCursorChar(hWndEdit)
{
var lpPoint;
var nCursorChar=-1;
if (lpPoint=AkelPad.MemAlloc(8 /*sizeof(POINT)*/))
{
oSys.Call("user32::GetCursorPos", lpPoint);
oSys.Call("user32::ScreenToClient", hWndEdit, lpPoint);
nCursorChar=AkelPad.SendMessage(hWndEdit, 0xD7 /*EM_CHARFROMPOS*/, 0, lpPoint);
AkelPad.MemFree(lpPoint);
}
return nCursorChar;
}
Posted: Thu Aug 23, 2012 3:49 pm
by Infocatcher
VladSh wrote:Для определения типа файла можно было бы использовать getExtBySyntaxFile из CommonFunctions.js.
Если расширение = htm, то использовать <>, в остальных случаях [].
А как быть, если я пишу сообщение на форум, а в сообщении – код. И я поставил подсветку для этого кода.
Вот что я хочу править – код или «форумную» часть?
Posted: Thu Aug 23, 2012 4:08 pm
by VladSh
Infocatcher
Какой "код"? Не html же. Если js, то значит применится BbCode.
Или всё-таки код html? Тогда наверное приоритет задавать...
И чтобы уменьшить количество таких "попаданий", можно сначала попытаться расширение от текущего файла взять (вдруг он сохранён), а уже потом брать от синтаксиса. Как-то так наверное..)
var buffer = AkelPad.MemAlloc( ??? );
var length = AkelPad.Call("Coder::Settings", 18, AkelPad.GetEditWnd(), AkelPad.GetEditDoc(), 0, buffer);
var aliasBuffer = AkelPad.MemAlloc(length); // В каких единицах размер?
AkelPad.Call("Coder::Settings", 18, AkelPad.GetEditWnd(), AkelPad.GetEditDoc(), aliasBuffer, buffer);
Posted: Thu Aug 23, 2012 4:56 pm
by Infocatcher
Предварительно вот так: insertTag-test.js
Пока что для несохраненного файла ничего не проверяется.
Posted: Thu Aug 23, 2012 7:15 pm
by VladSh
htm работает, а html нет.
И можно ли без хвоста из расширений как-то обойтись (я просто не понял, зачем они)?
Теперь параметр bbcode не очень по смыслу подходит.. может его в какой-нибудь type переименовать. И автоопределение наверное это "0" или "?". Хотя всё это по барабану, главное, что буит работать))
Posted: Thu Aug 23, 2012 7:24 pm
by KDJ
FileInfo.js
Added: dialog box and saving parameters.
Posted: Thu Aug 23, 2012 7:29 pm
by Infocatcher
VladSh
Ай, ну да, я сначала без ...$/ думал делать. Обновил.
А с параметром тоже думал, зато в таком виде старые вызовы работают как и раньше.
И можно ли без хвоста из расширений как-то обойтись (я просто не понял, зачем они)?
Я этот хвост из xml.coder утянул. Все же логичнее в XML-образных документах вставлять XML-тэги, а не ББ-коды.
Posted: Thu Aug 23, 2012 7:39 pm
by VladSh
Infocatcher wrote:Все же логичнее в XML-образных документах вставлять XML-тэги, а не ББ-коды.
Я думал с той стороны, что где может быть выделение жирным типа <b>текст</b>? Только в htm, html, ну может ещё mht. Если например xml, то форматирования там такого скорее всего не будет, значит это как раз тот слуай, чтобы выложить кусок xml на форум, а значит нужны BbCode.