Page 21 of 74

Posted: Tue Jul 27, 2010 1:45 pm
by [Yustas.NeO]
Instructor wrote:[Yustas.NeO]
Чтобы получить позицию курсора:
viewtopic.php?p=8226#p8226
Ясно...
Спасибо!

Posted: Thu Jul 29, 2010 6:03 pm
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, это уменьшит строки вызовов и избавит от лишних ошибок.

Posted: Sat Jul 31, 2010 11:44 am
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

Posted: Sat Jul 31, 2010 8:39 pm
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.

Posted: Sun Aug 01, 2010 2:08 pm
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, чем заполнять эту нерегулярную структуру.

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

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

Posted: Sun Aug 01, 2010 7:21 pm
by FeyFre
Fr0sT
Попробовал немного поиграться с DialogBoxIndirectParam, но к сожалению ничего не получается(хорошо что хоть не падает) Без доработки со стороны плага не получится этот вызов не заработает(как и другие вызова которые требуют CALLBACK функции)

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

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

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

Posted: Tue Aug 03, 2010 2:35 pm
by se7h
Fr0sT wrote:смысла расширять функционал в эту сторону немного, учитывая небольшой процент скриптов с GUI.
поэтому и мало скриптов с GUI, т.к. всё достаточно сыро

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

Posted: Tue Aug 03, 2010 3:46 pm
by FeyFre
поэтому и мало скриптов с GUI, т.к. всё достаточно сыро
OLE с завязанными глазами - это не сыро. А если подумать что там где COM, там обязательно втиснется .NET .....

Posted: Wed Aug 04, 2010 2:32 pm
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, иначе плагин не успевает отловить изменение в буфере обмена.