Как настроить меню программы vkACL.jar

Виктор Кон, 11 декабря 2020.

Общая информация

Программа vkACL (далее просто Программа) позволяет пользователю добавить записи в меню главного окна для удобства использования готовых ACL-программ. Первоначально для этой цели предлагалось использовать только два раздела стандартного меню (Run/Build-in ACLpro) и (Run/User's ACLpro) по которым запускались ACL программы (myprograms.acl) и (programs.acl) в папке (pro). Из этих программ можно было вызывать любые другие программы используя таблицу кнопок. Этот режим по-прежнему остается и активно используется. Но некоторые очень часто используемые программы желательно запускать быстрее, например, по горячей клавише.

Есть и еще один резон использовать меню вместо кнопок. Одна ACL-программа не может оставить открытыми окна для их последуюшего использования. Точнее она может их оставить, но сама должна бежать дальше и если она бесконечная, то таких окон останется очень много. А работать они будут способны только после окончания ACL-программы. Если же нужно использовать разные программы, то надо все время возвращаться назад к таблице кнопок. По этой причине иногда полезно использовать короткие программы, которые можно многократно вызывать из меню.

Ниже написано как настроить меню Программы добавлением новых разделов. Но прежде всего я хочу отметить, что в текушей версии Программы основное меню также существенно изменилось. Прежде всего, кнопки (Program/Help), (Run/File Viewer) и (Run/Image Viewer) также вызывают готовые ACL-программы (myhelp.acl), (view-gen.acl) и (view-img.acl) в папке (pro). Более того, вторая из указанных кнопка в добавление ко всем стандартным расширениям файлов запускает также файлы с расширениями (acl) и (mid). По этой причине отпала необходимость в кнопке (Run/Chosen ACLpro). Также она запускает htm файлы в дежурном браузере, а не в своем собственном. Собственный браузер можно использовать только для специальных целей. Раздел View позволяет изменить внешний вид программы.

Настройка дополнительного меню программы состоит в редактировании файла "start.acl". При первом запуске Программа вынимает этот файл из своего архива и затем он постоянно находится в папке Программы. Первая строка этого файла содержит 12 полей, разделенных символом вертикальной черты ( | ). Восьмое поле (точнее число в нем) указывает сколько дополнительных разделов меню будут выставлены после основных разделов (Program), (Execute), (Run) и (View). Если это число равно 0, то ничего не нужно записывать и все работает только с основным меню. Но если оно больше нуля, например N, то в файле "start.acl" необходимо заполнить дополнительно N+1 строку. При этом первые N строк описывают новые разделы меню, а последняя строка указывает все программы, которые будут запускаться по этим разделам меню в порядке очереди.

Прежде чем описывать как нужно кодировать разделы меню, отмечу роль 10-го поля этой строки. В нем стоит большое число N, которое фактически представляет два числа. Первое число V является остатком от деления N на 10000. Проверяется его равенство числу K=H-100, где H -- высота экрана. Если равенства нет, то V становится равным K. И в числе N изменяются последние 4 разряда на новое значение V. Новое значение потом записывается в файл в 10-е поле первой строки. Число N фактически задает ширину и высоту окон редактора текстов. Конкретный размер окон можно менять и это записывается в данное число. А при переходе на новый компьютер с другим числом пикселей по вертикали приходится его менять принудительно, иначе вертикальный размер окна может не поместится в экран. Вычитание 100 пикселей необходимо для того, чтобы не закрывать системную строку в нижней части экрана и нижнюю часть окна Программы.

Итак, каждая строка описывает один раздел меню. Она имеет структуру из 6 полей, то есть сплошных текстов без пробелов, разделенных пробелами. Первое поле -- это имя раздела меню. Второе поле -- это числовой код клавиши, по которой можно открыть данный раздел меню, нажимая ее при нажатой клавише [Alt]. Коды клавиш будут описаны далее в этой статье. Третье поле -- это список всех подразделов данного раздела меню, разделенных символом вертикальной черты ( | ). Имена подразделов не должны содержать пробелы (вместо пробелов можно использовать символы (-) или ( _ )). Четвертое поле -- это опять список числовых кодов клавиш, разделенных символом вертикальной черты ( | ). Эти клавиши можно нажимать для открытия подразделов меню при уже открытом разделе меню. Пятое поле -- это список дополниттельных кодов для клавиш-ускорителей. При этом 0 означает, что ничего дополнительно нажимать не надо, 2 -- надо нажимать клавишу [Ctrl], 4 -- [Мега], 8 -- [Alt]. Использование разных кодов существенно расширяет список горячих клавиш. Наконец, шестое поле -- это снова список числовых кодов клавиш, разделенных символом вертикальной черты ( | ). И эти клавиши называются ускорителями. Они позволяют сразу открыть подраздел меню при их нажатии одновременнно с клавишами, указанными до них.

К сожалению на клавиатурах, которые продаются в России под Виндовс, клавиши [Мега] нет. Она была на клавиатурах фирмы Sun Microsystems под систему Юних. Так что можно использовать только 2, 8 для клавиш [Ctrl] и [Alt], и 0 если ничего не надо. Во избежание недоразумений коды разделов меню и коды клавиш-ускорителей всех подразделов меню должны быть уникальными и не совпадать друг с другом. При этом надо помнить, что комбинации клавиш
[0] + F1, F11, F12, Esc; . . [2] + C, O; . . [8] + 1, 2, 3, B, E, F, I, P, R, S, T, V, U
уже используются в стандартном меню. Поэтому для дополнительного меню их использовать нельзя.

После описания всех разделов меню в последней строке надо записать через пробелы пары имен для каждой программы в описанном выше дополнительном меню в порядке их появления в описании. Первым в паре стоит имя папки внутри папки Программы, вторым -- имя файла вместе с расширением для ACL-программы, которая запускается по этому разделу меню. Запись файла программы в головную папку самого интерпретатора даже не рассматривается, так как это не удобно. При этом файл необязательно должен иметь расширение .acl. Это только рекомендация для удобства. Вложенные папки должны описываться символов ( / ) как в Java, а не как в Windows. Таким образом полное число таких полей должно быть в 2 раза больше, чем число подразделов меню. Любая ошибка ведет к фатальному исходу незапуска программы, так что будьте внимательны.

Коды клавиш, используемые в Java, очень легко определять, потому что большинство клавиш имеет коды, совпадающие с ASCII кодами символов, которые они вводят. Ниже дана полная таблица пар (клавиша=код)

[Bksp]=8, [Tab]=9, [Enter]=10, [Shift]=16, [Ctrl]=17, [Alt]=18, [CapsLock]=20, [Esc]=27, [Space]=32, [PgUp]=33, [PgDn]=34,
[End]=35, [Home]=36, [ArrLeft]=37, [ArrTop]=38, [ArrRight]=39, [ArrDown]=40,
[,]=44, [-]=45, [.]=46, [/]=47, [0]=48, [1]=49, [2]=50, [3]=51, [4]=52, [5]=53, [6]=54, [7]=55, [8]=56, [9]=57, [;]=59, [=]=61,
[A]=65, [B]=66, [C]=67, [D]=68, [E]=69, [F]=70, [G]=71, [H]=72, [I]=73, [J]=74, [K]=75, [L]=76, [M]=77, [N]=78, [O]=79,
[P]=80, [Q]=81, [R]=82, [S]=83, [T]=84, [U]=85, [V]=86, [W]=87, [X]=88, [Y]=89, [Z]=90, ( [ )=91, ( \ )=92, ( ] )=93,
[F1]=112, [F2]=113, [F3]=114, [F4]=115, [F5]=116, [F6]=117, [F7]=118, [F8]=119, [F9]=120, [F10]=121, [F11]=122, [F12]=123.
[Ins]=155, [Del]=127, [']=222, [`]=192.

Остальные клавиши можно проверить эмпирически. Следует также помнить, что клавиша [Tab] стандартно используется для переключения фокуса с одного окна на другое и между разделами меню. Поэтому ее лучше тоже не использовать. Есть и другие клавиши, которые использует операционная система, и ими лучше не пользоваться.

Дополнительное меню в текущей версии Программы

В текущей версии Программы предлагается 2 раздела меню дополнительно, которые запускают некоторые из тех ACL-программ, которые я сделал сам. Описание этих программ существует на отдельной странице в интернете (на моем сайте), как и описание самого яхыка программирования ACL. Простые программы показывают подсказки в виде строки текста в нижнем левом углу экрана. Более сложные программы имеют свое собственное описание. Здесь я просто перечислю какие горячие клавиши уже заняты этими разделами меню, а также какие еще можно использовать.

Вообще говоря, горячих клавиш на все разделы меню может не хватить. В этом случае можно указать на какую-то специальную клавишу, которой просто не пользоваться. Такие разделы можно запускать по клавишам самого меню и клавишам подразделов. Либо просто кликать сами разделы меню. Итак, сейчас заняты следующие клавиши (с учетом уже выписанных выше). Клавиши букв без дополнительных кодов использовать нельзя, так как они набирают текст в текстовом редакторе. Конфликты будут неизбежны. Ниже после знака (+) указаны те клавиши, которые уже использутся, а за ними после знака (--) указаны те, которые еще не заняты.

[0] (+) F1, F11, F12, Esc . . . (--) F2, F3, F4, F5, F6, F7, F8, F9, F10,
[2] (+) C, D, E, F, G, H, I, M, N, O, P, R, S, T, U, V, W . . . (--) 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, A, B, J, K, L, Q, X, Y, Z
[8] (+) 1, 2, 3, B, C, E, F, G, I, L, P, R, S, T, U, V . . . (--) 4, 5, 6, 7, 8, 9, 0, A, D, H, J, K, M, N, O, Q, W, X, Y, Z

Сложность еще и в том, что некоторые ACL-программы тоже используют клавиши и во избежание конфликтов такие клавиши в меню импользовать нельзя. Или, наоборот, в ACL-программах нельзя использовать клавиши, занятые в меню.

Смысл полей в первой строке файла start.acl

В 1-м поле записана рабочая папка, а во 2-м поле -- имя файла ACL программы, которая показывается по клавише [F1], в самом начале. Потом оба эти поля меняются, а при выходе из программы записываются их значения на момент выхода. Так что пользователь всегда начинает работать с той программой, на которой он закончил в прошлый раз. Это удобно и ускоряет работу, так как не надо искать файл програмы. В 3-е поле раньше что-то записывалось, но потом так получилось, что сейчас оно не используется. Оно как бы зарезервировано и там все время стоит неопределенное значение. ?????????? В 4-м поле 6-е и 7-е поля показывают ширину и высоту окна терминала. Окно терминала появляется только при первой записи в него. Обычно оно находится в правом нижнем углу. Менять размеры окна, скорее всего необходимо редактированием этих чисел. Сама программа кажется их не отслеживает, хотя это надо проверить. Последнее время я практически не пользуюсь терминалом, но иногда он бывает полезен, так как в него записываются некоторые сообщения об ошибках от JRE (интерпретатора Java). . В 9-е поле записывается число, которое регулирует процесс перехода от юникодов к старой Виндовс кодировке русских букв. В нормальном состоянии там должен быть 0, так как число перехода уже записано в программе. Но в некоторых операционных системах оно другое и для правильной работы редакторов с русским текстом его приходится менять руками. Особенные проблемы возникают при работе за границей на чужих компьютерах. На своем компьютере и в нормальной системе Виндовс оно всегда равно 0. 10-е поле содержит число из 8 разрялов, но фактически -- это просто 2 числа по 4 разряда, сложенные вместе. Они показывают ширину и высоту окна редактора ACL программ в пикселах. Как уже отмечалось выше, высота окна при запуске программы корректируется с учетом высоты экрана компьютера. Это необходимо делать, чтобы при переходе от компьютера с большим экраном к компьютеру с маленьким экраном высота не оказалась слмшком большой и не создавала проблем. В 11-м поле как раз указывается модификация программы, для описываемой версии там должен быть 0. Этот параметр не меняется, но даже если его и изменить, то ничего не произойдет, потому что он считывается из оригинальной копии файла, которая находится внутри jar архива. В 12-м поле записывается заголовок главного окна Интерпретатора. Он содержит версию программы, и к нему автоматически приписывается размер массива реальных чисел. Это удобно, так как бывают программы с разным размером массива. С другой стороны, можно легко менять версии программы без компиляции основного кода.