Scripts plugin

Discuss and announce AkelPad plugins
  • Author
  • Message
Offline
Posts: 267
Joined: Mon Mar 12, 2007 3:45 pm

Post by [Yustas.NeO] »

Instructor wrote:[Yustas.NeO]
Чтобы получить позицию курсора:
viewtopic.php?p=8226#p8226
Ясно...
Спасибо!

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

Post by VladSh »

VladSh wrote:в Hotkeys-плагине добавил вызов скрипта, да назвал скрипт неверно (случайно добавил -OLD в конец, т.е. получилось MyScript.js-OLD), потом при вызове выдалось сообщение с красным крестом...
Можно ли отркорректировать сообщение в более понятное, а то я долго маялся, не понимая что произошло...
Сообщение откорректировали, спасибо!
Но я напоролся ещё на один косяк... :twisted: Поставил имя файла скрипта без расширения, и тоже не мог понять, что такое, т.к. плагин - молчок... думал, что скрипт не работает и колупался в скрипте, пока не разобрался, в чём дело)))


Ещё хочу побеспокоить старой просьбой по GetAkelDir().
Всё то же самое, только "" передавать не надо, т.е. вызов без необязательного параметра будет работать также, как и сейчас.
Почему я об этом вспомнил.. - листал документацию и увидел, что в

Code: Select all

Call("Scripts::Main", 1, "SCRIPT", "ARGUMENTS")
Call("Scripts::Main", 2, "SCRIPT", "ARGUMENTS")
Call("Scripts::Main", 3, "SCRIPT")
передаётся имя скрипта, без полного пути к нему. Т.е. путь жёстко забит в проге. Поэтому имеет смысл возвращать его.

Также чтобы %s (директория скриптов) работала и в ContextMenu, Toolbar, Hotkeys, это уменьшит строки вызовов и избавит от лишних ошибок.

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

Post by KDJ »

Dear Instructor, I have a request.
Can you extend the functionality of the method AkelPad.InputBox (hHandle, pCaption, pLabel, pEdit), that you can input a few arguments pEdit and pLabel?
For example, pEdit and pLabel you can enter as an array.
AkelPad.InputBox function may also return an array.
Example on the figure:
Image

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

KDJ
while current InputBox is a simple wrapper over WinAPI function, the thing what you want is a custom dialog window. You can create it in script, see Search script example.

Идея
Всё-таки создавать окошки на WinAPI - не самый удобный способ, когда есть замечательный способ визуального проектирования - ресурсы диалогов. Теоретически, их можно грузить даже из res файлов, хотя это сопряжено с некоторыми усилиями. Однако можно же встраивать их в DLL и оттуда вызывать! В принципе, всё для этого уже есть, надо только реализовать обертку над CreateDialog, как это сделано с CreatewINDOW.

Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Fr0sT
while current InputBox is a simple wrapper over WinAPI function, the thing what you want is a custom dialog window. You can create it in script, see Search script example.
InputBox - это не обертка, и никогда не была такой. Существует системный вызов MessageBox, но никогда не было ничего подобного InputBox, и не будет.
Идея
Всё-таки создавать окошки на WinAPI - не самый удобный способ, когда есть замечательный способ визуального проектирования - ресурсы диалогов. Теоретически, их можно грузить даже из res файлов, хотя это сопряжено с некоторыми усилиями. Однако можно же встраивать их в DLL и оттуда вызывать! В принципе, всё для этого уже есть, надо только реализовать обертку над CreateDialog, как это сделано с CreatewINDOW.
Может у меня не последние версии плагинов, но почему-то я не нашел обвертки CreateWindow.
С Res файлами не стоит делать вообще ничего.
С DLL - не проблема. Проблема разработчику скрипта построить DLL и доставить пользователям.
Так что эти варианты отпадают.
Есть такая пара функций - DialogBoxIndirectParam/CreateDialogIndirectParam, которые, в отличии от своих сестёр без Indirect, создают диалог в качестве исходной беря информацию не из указанного ресурса, а из указанной памяти. А эту память можно спокойно инициализировать откуда хочешь, как и из ресурсов, так и с сформировать самостоятельно. Но этим практически никто не занимается наверно потому что если уж нету доступа к ресурсам, то проще создать окна в WM_INITDIALOG, чем заполнять эту нерегулярную структуру.

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

FeyFre
InputBox - это не обертка, и никогда не была такой
Посмотрел сорс, да, действительно, она сделана как диалог из ресурсов. Был удивлён, когда обнаружил, что столь полезная вещь не сделана Микрософтом изначально. Что ж, значит, всё просто. Те, кому нужен дополнительный Input, добавляют его по аналогии с InputBox (т.е. собирая свою версию плагина).
Может у меня не последние версии плагинов, но почему-то я не нашел обвертки CreateWindow.
Да, это я перепутал с DialogCallback.
С Res файлами не стоит делать вообще ничего. С DLL - не проблема. Проблема разработчику скрипта построить DLL и доставить пользователям.
DLL неудобна, знаю. Однако загрузка из res файлов не выглядит чем-то невероятным. В конце концов, все редакторы ресурсов это могут.
Есть такая пара функций - DialogBoxIndirectParam/CreateDialogIndirectParam
Угу, я знаю. Однако при беглом взгляде на формат res файлов обнаружился приятный момент: информация в них хранится именно в таких же структурах. Более того, даже есть опенсорсные редакторы ресурсов (XN Resource Editor), откуда можно вытащить код.

Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

DLL неудобна, знаю. Однако загрузка из res файлов не выглядит чем-то невероятным. В конце концов, все редакторы ресурсов это могут.
Иметь дело с RES всё-равно что иметь дело с OBJ и LIB - каждый компилятор делает их по своему и чужих не понимают(Intel gcc msvc Borland изначально мало общего имели, пока взялись за COFF, а MSVC вообще иногда не понимает объектные файлы построенные более старой версией). Так что либо в чистом виде в ресурсах, либо в сорсах.
информация в них хранится именно в таких же структурах.
Именно. Загляните в один из include-файлов FLAT ASSEMBLER и в MSDN по этой теме. Поразительное сходство, правда?

Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Fr0sT
Попробовал немного поиграться с DialogBoxIndirectParam, но к сожалению ничего не получается(хорошо что хоть не падает) Без доработки со стороны плага не получится этот вызов не заработает(как и другие вызова которые требуют CALLBACK функции)

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

Иметь дело с RES всё-равно что иметь дело с OBJ и LIB - каждый компилятор делает их по своему и чужих не понимают(Intel gcc msvc Borland изначально мало общего имели, пока взялись за COFF, а MSVC вообще иногда не понимает объектные файлы построенные более старой версией)
Разве? А как же в таком случае Винда их понимает? Я всегда считал, что формат rc файлов может отличаться, но бинарный вариант будет идентичен.
Попробовал немного поиграться с DialogBoxIndirectParam, но к сожалению ничего не получается(хорошо что хоть не падает) Без доработки со стороны плага не получится этот вызов не заработает(как и другие вызова которые требуют CALLBACK функции)
Это-то понятно, коллбэк средствами JS никак не сэмулируешь. А разве DialogProc, которая реализована сейчас, не срабатывает?

Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Разве? А как же в таком случае Винда их понимает?
Я лично не нашел ни одного Res файла у себя в системе. Винда работает только с PE/LE/NE/MZ/ZM, и только в PE есть место для ресурсов.
Я всегда считал, что формат rc файлов может отличаться, но бинарный вариант будет идентичен.
Исходники могут быть в любом угодно формате, главное что-бы существовал компилятор. В FASM-е ресурсы вообще можно задать в самом сыром виде.
Это-то понятно, коллбэк средствами JS никак не сэмулируешь. А разве DialogProc, которая реализована сейчас, не срабатывает?
Если честно, то ничего подобного не нашел, ни в примерах, ни в документации. LinesFilter и SrrachReplace работают с обычным Overlapped Window, т.е. работают через регистрацию класса, которую Инструктор делает специальным способом.

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

Я лично не нашел ни одного Res файла у себя в системе. Винда работает только с PE/LE/NE/MZ/ZM, и только в PE есть место для ресурсов
Да, а в PE как раз эти самые Res непосредственно лежат.
Исходники могут быть в любом угодно формате, главное что-бы существовал компилятор. В FASM-е ресурсы вообще можно задать в самом сыром виде
Так и я о чём. Итоговый вариант должен подчиняться стандартам, иначе Винда его не сможет понять.
Если честно, то ничего подобного не нашел, ни в примерах, ни в документации. LinesFilter и SrrachReplace работают с обычным Overlapped Window, т.е. работают через регистрацию класса, которую Инструктор делает специальным способом.
Так, ещё раз изучил Search.js. Понятно, необходима спец регистрация класса. Досадно.
Пожалуй, решением будет только реализация функций CreateWindow/Dialog в интерфейсе Akel с перехватом оконной процедуры, которая, в свою очередь, будет вызывать WindowProc из скрипта (если такая есть, конечно). Не выглядит особо сложным, но, конечно, смысла расширять функционал в эту сторону немного, учитывая небольшой процент скриптов с GUI.

Offline
Posts: 767
Joined: Mon Sep 28, 2009 10:03 am
Location: Minsk, Belarus

Post by se7h »

Fr0sT wrote:смысла расширять функционал в эту сторону немного, учитывая небольшой процент скриптов с GUI.
поэтому и мало скриптов с GUI, т.к. всё достаточно сыро

Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Да, а в PE как раз эти самые Res непосредственно лежат.
Нет, не лежат.
Так и я о чём. Итоговый вариант должен подчиняться стандартам, иначе Винда его не сможет понять.
Итоговый вариант - это то, что лежит в EXE DLL SYS ICL т.е в PE контейнере. RES - промежуточный.
Так, ещё раз изучил Search.js. Понятно, необходима спец регистрация класса. Досадно.
Теоретически можно обойтись тем что есть(есть идея), но практически я такого финта на даже на C/C++ не делал изза ненадобности, так что не знаю что из этого получится(возможно очередной велосипед, который можно было бы сделать мене кривыми руками и вообще не велосипедом)

Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

поэтому и мало скриптов с GUI, т.к. всё достаточно сыро
OLE с завязанными глазами - это не сыро. А если подумать что там где COM, там обязательно втиснется .NET .....

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

Почему не работает

Code: Select all

	FSO = new ActiveXObject("Scripting.FileSystemObject");
	TextStream = FSO.CreateTextFile("D:\\1.log");
	TextStream.WriteLine("foo");
? Пишет "разрешение отклонено". В то же время, если сохранить эти строки в js файл и запустить, всё OK.

Это я пытаюсь лог сделать.
Прошу всё-таки реализовать какой-нибудь метод вывода сообщений в отладочную консоль! Дебаг цикла с Echo - форменное издевательство ((

Метод заработал, тревога отменяется. Результаты тут

Хех, голь на выдумки хитра. Придумал костыль. Открываем ещё одно окно Акеля, активизируем плаг Clipboard и выводим сообщения через AkelPad.SetClipboardText. Криво, но другого способа нет. Только надо вставить Sleep где-то на 100, иначе плагин не успевает отловить изменение в буфере обмена.
Last edited by Fr0sT on Thu Aug 05, 2010 10:47 am, edited 3 times in total.
Post Reply