Scripts discussion (2)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

KDJ
My release build means: VCToolkit_PlatformSDK_2003.zip. Unpack it to "C:\Program Files" and execute any "Build*.cmd" file from sources.
Last edited by Instructor on Thu Jan 10, 2013 7:25 am, edited 1 time in total.

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Instructor
Full success. I compiled AkelEdit. Works perfectly. :D

Code: Select all

//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();
    }
  }
}

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post 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.

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

Можно ли в скрипте переместить курсор в позицию мышки...
Предлагали смотреть AkelDLL.h , ничего подобного там не нашёл, или не так искал

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Infocatcher
Предложение по insertTag.js.
Сейчас извне можно жёстко задать -bbcode=true, что совсем не гибко.
Хотелось бы иметь возможность автоопределения по типу. Т.е. унифицировать клавиши для HTML и BbCode, например: b - Ctrl+b и т.д.
Для определения типа файла можно было бы использовать getExtBySyntaxFile из CommonFunctions.js.
Если расширение = htm, то использовать <>, в остальных случаях [].

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Andrey_A_A

Code: Select all

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;
}
Last edited by Instructor on Fri Aug 24, 2012 4:19 am, edited 1 time in total.

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

VladSh wrote:Для определения типа файла можно было бы использовать getExtBySyntaxFile из CommonFunctions.js.
Если расширение = htm, то использовать <>, в остальных случаях [].
А как быть, если я пишу сообщение на форум, а в сообщении – код. И я поставил подсветку для этого кода.
Вот что я хочу править – код или «форумную» часть?

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Infocatcher
Какой "код"? Не html же. Если js, то значит применится BbCode.
Или всё-таки код html? Тогда наверное приоритет задавать...
И чтобы уменьшить количество таких "попаданий", можно сначала попытаться расширение от текущего файла взять (вдруг он сохранён), а уже потом брать от синтаксиса. Как-то так наверное..)

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

VladSh
Да хоть бы и js.

Code: Select all

var html = '\
	<div class="abc">\
		...\
	</div>';
node.innerHTML = html;
:)

Если бы еще некоторые не решили выпилить E4X...

Вот для ввода через AkelPad.InputBox() я уже сделал определение
[b как BBCode, a <b как HTML.
Сейчас что-нибудь и для автоопределения сделаем. :)

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Что-то я не понимаю, как использовать
Call("Coder::Settings", 18, WINDOW, DOCUMENT, *ALIAS, *ALIASLENGTH)

Code: Select all

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);

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Предварительно вот так: insertTag-test.js
Пока что для несохраненного файла ничего не проверяется.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

htm работает, а html нет.
И можно ли без хвоста из расширений как-то обойтись (я просто не понял, зачем они)?
Теперь параметр bbcode не очень по смыслу подходит.. может его в какой-нибудь type переименовать. И автоопределение наверное это "0" или "?". Хотя всё это по барабану, главное, что буит работать))

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

FileInfo.js
Added: dialog box and saving parameters.

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

VladSh
Ай, ну да, я сначала без ...$/ думал делать. Обновил.
А с параметром тоже думал, зато в таком виде старые вызовы работают как и раньше.
И можно ли без хвоста из расширений как-то обойтись (я просто не понял, зачем они)?
Я этот хвост из xml.coder утянул. Все же логичнее в XML-образных документах вставлять XML-тэги, а не ББ-коды.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Infocatcher wrote:Все же логичнее в XML-образных документах вставлять XML-тэги, а не ББ-коды.
Я думал с той стороны, что где может быть выделение жирным типа <b>текст</b>? Только в htm, html, ну может ещё mht. Если например xml, то форматирования там такого скорее всего не будет, значит это как раз тот слуай, чтобы выложить кусок xml на форум, а значит нужны BbCode.
Locked