Page 63 of 74

Posted: Tue Sep 22, 2015 7:37 pm
by KDJ
Instructor
Sorry, I was wrong again. Yes, all works fine!
I forgot to replace C:\Windows\system32\Scripts.dll with the new version.

Posted: Thu Sep 24, 2015 4:15 am
by Instructor
VladSh wrote:...без сообщения...
См. Scripts v17.6.

Posted: Thu Sep 24, 2015 4:17 am
by Instructor
Добавлено: необязательные параметры в метод AkelPad.Include - nFlags, nCodePage, bBOM.

Added: optional paremeters in AkelPad.Include method - nFlags, nCodePage, bBOM.


Scripts plugin v17.6

Posted: Thu Sep 24, 2015 12:51 pm
by VladSh
Instructor wrote:Добавлено: необязательные параметры в метод AkelPad.Include - nFlags...
Работает, спасибо!

А могли бы Вы сделать этот флаг по умолчанию? Потому что множество скриптов (не только моих) имеют такую конструкцию и не ожидают сообщения:

Code: Select all

if (!AkelPad.Include("libfile.js")) WScript.Quit();
или

Code: Select all

if (!AkelPad.Include("libfile.js")) {
   ...
}
else {
   ...
}

Posted: Thu Sep 24, 2015 1:32 pm
by Skif_off
VladSh wrote:А могли бы Вы сделать этот флаг по умолчанию?
А зачем? Из справки:
Метод Include аналогичен коду eval(AkelPad.ReadFile("...")), но позволяет выявлять место ошибки в добавляемом файле, если она присутствует.
т.е. фактически с самого начала по сути используется:

Code: Select all

AkelPad.Include("libfile.js", 0xD /*ADT_BINARYERROR|ADT_DETECTCODEPAGE|ADT_DETECTBOM*/);
Разве этого не хватает?

Posted: Thu Sep 24, 2015 2:40 pm
by VladSh
Skif_off wrote:Разве этого не хватает?
Раньше сообщения об отсутствии подключаемого скрипта не было. Были написаны скрипты с учётом этого. Я прошу поставить флаг, подавляющий появление сообщения по умолчанию, чтобы все не переделывали скрипты. Случаи, где бы это сообщение было нужно, единичны, если вообще есть.

Posted: Thu Sep 24, 2015 3:30 pm
by Skif_off
VladSh
Прошу прощения, чего-то недопонимаю: взал скрипт с

Code: Select all

if (! AkelPad.Include("CreateDialog_functions.js")) WScript.Quit();
скопировал в Include первый попавшийся бинарник, переименовал его в CreateDialog_functions.js, запустил скрипт - молча срабатывает WScript.Quit().

Code: Select all

AkelPad.Include
...
  nFlags
    См. описание nFlags метода AkelPad.ReadFile.
и

Code: Select all

AkelPad.ReadFile
...
  nFlags
    0x001  //OD_ADT_BINARYERROR     Проверить является ли файл бинарным.
    0x002  //OD_ADT_REGCODEPAGE     Если кодировка файла была сохранена в реестре, то она будет использована
           //                        с флагом OD_ADT_DETECTBOM, если нет, то следующие флаги будут использованы
           //                        OD_ADT_DETECTCODEPAGE|OD_ADT_DETECTBOM.
    0x004  //OD_ADT_DETECTCODEPAGE  Определить кодировку.
    0x008  //OD_ADT_DETECTBOM       Определить наличие сигнатуры BOM.
    0x010  //OD_ADT_NOMESSAGES      Не выводить сообщения при ошибке автоопределения.
    0x020  //OD_ADT_ONLYBOM         Определить кодировку, только если присутствует сигнатура BOM, иначе будет использована кодировка по умолчанию.
    0x100  //OD_REOPEN              Не создавать новое окно, использовать имеющееся.
    0x200  //OD_NOSCROLL            Не восстанавливать прокрутку текста.
           //По умолчанию 0xD       (OD_ADT_BINARYERROR|OD_ADT_DETECTCODEPAGE|OD_ADT_DETECTBOM).
, при этом в любом случае AkelPad.Include() возвращает true или false.
Кажется, не понял ни зачем nFlags в AkelPad.Include, ни вашу просьбу :)

Posted: Thu Sep 24, 2015 3:39 pm
by VladSh
Skif_off
Моя просьба не про бинарники (я ж не бинарники подключаю). А в случае, когда подключаемый файл отсутствует, не выдавать об этом сообщения.
Используя Ваш код, попробуйте удалить CreateDialog_functions.js и запустить скрипт, увидите о чём я говорю.
/Кстати, недавно был такой случай в "Дискуссии скриптов" - человек когда-то давно, когда не было этого сообщения, написал скрипт, в котором сделал подключение на какой-то свой файл; при определённых начальных параметрах у другого человека произошло попадание на эту строку и вылет этой ошибки. И никого не найдёшь и не узнаешь, что это за подключаемый файл, и что в нём должно быть. Хотя и без этого файла всё нормально работает, только ошибку кажет, которая ни к чему совершенно./

Posted: Thu Sep 24, 2015 3:55 pm
by Skif_off
VladSh wrote:Моя просьба не про бинарники (я ж не бинарники подключаю).
Имел в виду пример ошибки, когда AkelPad.Include() не сможет прочитать файл и вернёт false, про отсутствие файла не подумал, ибо не сталкивался. Но как помогут nFlags метода AkelPad.ReadFile()?
/Припоминаю, кажется, SearchReplace_cml.js и SearchReplace_multi.js, у себя оставил Multi_SR.js./

Posted: Thu Sep 24, 2015 4:09 pm
by VladSh
Skif_off wrote:Но как помогут nFlags метода AkelPad.ReadFile()?

Code: Select all

if (!AkelPad.Include("nonexist.js", 0x10)) {
	WScript.Echo("А сообщения об ошибке-то и нет :)");
}

Posted: Thu Sep 24, 2015 4:37 pm
by Kley
Instructor
Странное поведение Системного меню или сочетания клавиш Alt + Space. Скрипты для примера: "SortLines.js", "LinesFilter.js".
Открыв меню (Alt + Space), выбрав стрелками вверх или вниз пункт, например: "Закрыть Alt+F4" жмем Enter - команда не проходит.
Опять появляется меню. Если в первый раз, сразу после открытия меню, нажать Alt, оно закроется, но Esc сработает только со второго раза.

Posted: Thu Sep 24, 2015 5:07 pm
by Skif_off
VladSh
Спасибо, кажется, я отупел :)) Всегда думал, что тут

Code: Select all

0x10  //ADT_NOMESSAGES      Не выводить сообщения при ошибке автоопределения.
речь об ошибке определения кодировки/BOM и только.

Тогда nFlags должно быть равно 0x1C (ADT_DETECTCODEPAGE|ADT_DETECTBOM|ADT_NOMESSAGES)?

Posted: Fri Sep 25, 2015 5:08 pm
by Instructor
Kley
Надо на AkelPad.CreateDialog скрипты переделывать.

Posted: Fri Sep 25, 2015 8:07 pm
by Kley
Instructor wrote:Надо на AkelPad.CreateDialog скрипты переделывать.
Ну, что же будем переделывать, со временем.:) А пока нашел для себя по-проще:

Code: Select all

AkelPad.WindowGetMessage(0x4 /*WGM_NOKEYSEND*/);
Instructor, как вы думаете - это костыль или нормальное решение?

Posted: Sat Sep 26, 2015 12:08 am
by Instructor
Kley
Это даже не костыль, а именно то, для чего этот флаг реализовывался. Реализовать реализовал, а в скрипты не добавил. Переделывание на AkelPad.CreateDialog даст немного другое - поддержку горячих клавиш вызова элемента управления (в том числе поддержку кнопки по умолчанию).

П.С. Флаг указан правильно, только расшифровка WGM_KEYDOWNUP.