Scripts discussion (3)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Skif_off
About InsertUnicodeChar.js.
In the dialog box, you can set Scripts icon:

Code: Select all

...
aDlg.CtlFirst = IDLABELS;
aDlg.Icon     = oSys.Call("User32::LoadImageW",
                  AkelPad.GetInstanceDll(), //hinst
                  101,   //lpszName
                  1,     //uType=IMAGE_ICON
                  0,     //cxDesired
                  0,     //cyDesired
                  0x40); //fuLoad=LR_DEFAULTSIZE

aDlg[IDLABELS]  = {X:   8, Y:   8, W: 200, H:  10, Title: sTxtLabel, Class: "STATIC"};
aDlg[IDTEXTCB]  = {X:   8, Y:  20, W: 200, H: 100,                   Class: "COMBOBOX", Style: WS_TABSTOP | CBS_DROPDOWN};
aDlg[IDOKB]     = {X: 100, Y:  40, W:  50, H:  15, Title: sTxtOK,                       Style: WS_TABSTOP | BS_DEFPUSHBUTTON};
aDlg[IDCANCELB] = {X: 158, Y:  40, W:  50, H:  15, Title: sTxtCancel,                   Style: WS_TABSTOP};

CreateDialogBox(aDlg);
oSys.Call("User32::DestroyIcon", aDlg.Icon);
...

And remove quadruple declaration of the variable aHex (var aHex).

Offline
Posts: 1162
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

yozhic
VladSh

Вы забываете о моих возможностях, напомню, на всякий случай, с чего всё началось :)) Об описании в ini-файле подумал сразу, поэтому безусловно UTF-16LE, но отложил, т.к. есть небольшое вложенное меню с Insert(), а мои познания в JScript скромны, мягко говоря.
В общем, смотрел ShouMenu() в одноимённом скрипте: прочитать файл легко, показать меню вроде не очень сложно, только пока не понял, как работает выбор пункта.

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

yozhic
Понимаю, что ваш пример 6-ю символами не исчерпывается, но все же.
В "txt.coder" вставка этих и ряда других символов реализована через "автокомплит". Посмотрите. Получается даже чуть быстрее чем скриптом, да и запоминать легче.

Offline
Posts: 382
Joined: Wed Sep 28, 2011 3:05 pm

Post by Cuprum »

Немного обновлен autoInsertQuotes.js.
+
Новый скрипт createSelectedFile.js.

Offline
Posts: 1162
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

KDJ wrote:And remove quadruple declaration of the variable aHex (var aHex).
Thank you, I reworked this code several times and overlooked :)
KDJ wrote:In the dialog box, you can set Scripts icon
Why such a difference http://rghost.ru/59557804/image.png ?

InsertUnicodeChar.js
Fixed: quadruple declaration of the variable aHex.
Added: icon.

Offline
Posts: 276
Joined: Mon Jun 20, 2011 8:33 am
Location: Электросталь

Post by yozhic »

Skif_off
не забыли, но помним также и об их способности увеличиваться. Удачи :)

Offline
Posts: 382
Joined: Wed Sep 28, 2011 3:05 pm

Post by Cuprum »

Если я правильно понял то AkelPad.SaveFile() обновляет дерево в Explorer-плагине. Только, почему-то это происходит не всегда. У меня в скрипте может быть такая ситуация, когда по заданному пути создаются подпапки, а потом внутри последней подпапки сохраняется файл с помощью AkelPad.SaveFile(). Схематично выглядит так

Code: Select all

создать_подпапки();
AkelPad.SaveFile();
В итоге полного обновления дерева не происходит, оно выглядит

Image

Но если вызывать обновление проводника принудительно,

Code: Select all

создать_подпапки();
if (AkelPad.IsPluginRunning("Explorer::Main")) {
   AkelPad.Call("Explorer::Main", 2);
}
AkelPad.SaveFile();
то все

Image


Так и должно быть или?

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

Post by KDJ »

Skif_off wrote:Why such a difference http://rghost.ru/59557804/image.png ?
To see the difference, I had to watch through a microscope. :)
Scripts.dll contains two versions of this icon: 32x32 and 16x16 pixels.
To load the icon 16x16:

Code: Select all

aDlg.Icon     = oSys.Call("User32::LoadImageW",
                  AkelPad.GetInstanceDll(), //hinst
                  101, //lpszName
                  1,   //uType=IMAGE_ICON
                  16,  //cxDesired
                  16,  //cyDesired
                  0);  //fuLoad

Offline
Posts: 1162
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

KDJ
By default:

Code: Select all

                  32,  //cxDesired
                  32,  //cyDesired 
I didn't guessed :)

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

Post by VladSh »

Skif_off
Хоть тут и не любители использовать скрипты-либы, но чтение, вывод меню и получение результата реализовано в ShowMenuEx.js.
Примеры использования: ConsoleExec.js, ConsoleRun.js.

Offline
Posts: 1162
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

VladSh
Думал что-то вроде такого http://rghost.ru/59630357/image.png на случай, если нужно ввести больше одного символа сразу. Наверное, придётся подумать и о немодальном окне.

InsertUnicodeChar.js
Added: toUpperCase() for history (все буквы в истории - в верхний регистр для единообразия).

Offline
Posts: 276
Joined: Mon Jun 20, 2011 8:33 am
Location: Электросталь

Post by yozhic »

Помогите, пожалуйста, разобраться с использованием скрипта ChmKeyword.js. Некоторые chm открываются, ключевое слово копируется в поле Index, но вместо нужной страницы появляется сообщение «Make sure the web address //ieframe.dll/dnserrordiagoff.htm# is correct.» Как можно исправить?
AkelPad 4.9.0, Win8.1

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

yozhic
Только "некоторые"? А впрямую они нормально открываются?
Версия: проверьте свойства этих некоторых файлов. Внизу карточки свойств может быть фраза "Безопасность: Этот файл получен с другого компьютера и, возможно, был заблокирован с целью защиты компьютера.". Нажать кнопку "Разблокировать" и можно нормально пользоваться.

Offline
Posts: 1162
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

В InsertUnicodeChar.js добавил

Code: Select all

...
var IDTEMPLATE = 1005;
...
aDlg[IDTEMPLATE] = {X:   8, Y:  40, W:  15, H:  15, Title: ">",       Class: "BUTTON",   Style: BS_PUSHBUTTON};
...

function DialogCallback(hWnd, uMsg, wParam, lParam)
{
...
    else if (nLowParam == IDTEMPLATE)
    {
      Templates();
    }
...
и

Code: Select all

function Templates()
{
  var lpRect  = AkelPad.MemAlloc(16 /*sizeof(RECT)*/);
  var hMenu   = oSys.Call("User32::CreatePopupMenu");
  var nString = 0x0000; //MF_STRING
  var nX;
  var nY;
  var aMenu;
  var nCmd;
  var i;
  var sTxtEmpty = "Очистить"; /* "Clean" */

  oSys.Call("User32::GetWindowRect", aDlg[IDTEXTCB].HWND, lpRect);
  nX = AkelPad.MemRead(lpRect, 3 /*DT_DWORD*/);
  nY = AkelPad.MemRead(lpRect, 3 /*DT_DWORD*/);
  AkelPad.MemFree(lpRect);

  aMenu = [
    [nString, "text1", 1],
    [nString, "text1", 2],
    [nString, "", sTxtEmpty]];

  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, 0x0188 /*TPM_RETURNCMD|TPM_NONOTIFY|TPM_RIGHTALIGN*/, nX, nY, 0, aDlg.HWND, 0);

  oSys.Call("User32::DestroyMenu", hMenu);

  if (nCmd--)
  {
    oSys.Call("User32::SetFocus", aDlg[IDTEXTCB].HWND);
    SendMessage(aDlg[IDTEXTCB].HWND, 194 /*EM_REPLACESEL*/, 1, aMenu[nCmd][1]);
  }

}
, меню нормально показывает, но при нажатии любого пункта получаю ощибку

Code: Select all

Ошибка:	Предполагается наличие объекта
Код:	800A138F
Не пойму, что не так?

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

Post by KDJ »

Skif_off
SendMessage function is not defined. The easiest way is to use the SendMessage method of AkelPad object:
AkelPad.SendMessage(...);
Locked