Page 26 of 97
Posted: Wed Aug 04, 2010 2:27 pm
by Fr0sT
Вообще в доках по WSH есть такой пример (басик):
Code: Select all
Set FSO = CreateObject("Scripting.FileSystemObject")
Set File = FSO.GetFile("C:\boot.ini")
Set TextStream = File.OpenAsTextStream(1)
MsgBox TextStream.ReadAll()
TextStream.Close
но из Акеля, как ни бился, ни черта не выходит
А в самом Акеле нету функции WriteFile, которая мне сейчас нужна.
Posted: Wed Aug 04, 2010 2:28 pm
by VladSh
[Yustas.NeO]
Проверить на существование файла:
Code: Select all
var fso = new ActiveXObject("Scripting.FileSystemObject");
var bIsFileExist = fso.FileExists(pFile);
FileSystemObject
Posted: Wed Aug 04, 2010 4:00 pm
by Fr0sT
Обновил Base64 скрипт.
* Полностью переделал логику, теперь строки конвертируются из WideChar в Multibyte перед кодированием, и наоборот. Используется текущая кодировка документа.
* Удалён параметр dec16
* Обработанный текст остаётся выделенным
* При ошибках конвертирования widechar <-> multibyte выдаётся код ошибки.
Posted: Wed Aug 04, 2010 6:51 pm
by [Yustas.NeO]
FeyFre wrote:на MSDN
Уш пошлала, так пошлала (с)

Я пока еще только с "вашим"
Сообщения главному окну пытаюсь разобраться, и никак не могу

Тут не все такие "уверенные программисты" как вы
Видать придется писать свой скрипт...
FeyFre wrote:А его не было когда я писал ответы, а потом ещё трижды исправлял пост.

Ага, то-то в том моем сообщении стоит пометка "редактировалось"
FeyFre wrote:AkelPad.ReadFile() Вас чем не устраивает? Документацию читать нужно.
Это просто какая-то беда стала

Смотрю в книгу вижу фигу
Fr0sT wrote:А в самом Акеле нету функции WriteFile, которая мне сейчас нужна.
И мне
VladSh wrote:[Yustas.NeO]
Проверить на существование файла:
Code: Select all
var fso = new ActiveXObject("Scripting.FileSystemObject");
var bIsFileExist = fso.FileExists(pFile);
FileSystemObject
Шикарно!
Posted: Wed Aug 04, 2010 8:07 pm
by Deim0s
Fr0sT,
Обновил Base64 скрипт.
Скрипт теперь отлично работает, погонял его и так и сяк, работает как часы

.
В планах поддержка других инет-кодировок, если запал не пройдёт
Вот бы здорово было, подобный скрипт для Quoted-printable

.
Instructor,
Если можно пару просьб по Вашим скриптам:
UrlEncode.js и UrlDecode.js - Не корректно работают с последним символом "?" (3F). Это ограничение какое-то или можно поправить?
DuplicateLines.js - Сейчас дублирует выделение, можно ли сделать так:
Если нет выделения -
полностью дублировать строку на которой находиться курсор
Если есть выделение, дублировать строки, в которых есть выделение -
полностью, не зависимо от выделенного текста?
Posted: Wed Aug 04, 2010 8:28 pm
by KDJ
Deim0s wrote:DuplicateLines.js - Сейчас дублирует выделение, можно ли сделать так:
Если нет выделения - полностью дублировать строку на которой находиться курсор
Если есть выделение, дублировать строки, в которых есть выделение - полностью, не зависимо от выделенного текста?
This is done in the script:
LinesMoveDuplicateSelect.js. Try it.
Posted: Wed Aug 04, 2010 8:40 pm
by Deim0s
KDJ,
Sorry, I don't like multi-scripts. I like: one function - one script.
Posted: Wed Aug 04, 2010 9:10 pm
by VladSh
[Yustas.NeO] wrote:FeyFre wrote:AkelPad.ReadFile() Вас чем не устраивает? Документацию читать нужно.
Это просто какая-то беда стала

Смотрю в книгу вижу фигу

Scripts-Rus.txt
Для справки по выделенному слову можно заюзать
OpenScriptsHelp.js (работает с OpenHelpString.js), в них как раз есть пример
ReadFile.
Ну и см. в теме "Сборник скриптов", за много лет кой-чего наворотили )) - много хороших идей и готового кода
[Yustas.NeO] wrote:Fr0sT wrote:А в самом Акеле нету функции WriteFile, которая мне сейчас нужна.
И мне

Пока можно сделать такой изврат:
Code: Select all
var hMainWnd = AkelPad.GetMainWnd();
var pContent = "";
var pFile = "";
//Код
//Получаем программно, а как же ещё ))
pContent = "sfhasdfj";
pFile = AkelPad.GetAkelDir() + "\\AkelFiles\" + "...";
AkelPad.SendMessage(hMainWnd, 273 /*WM_COMMAND*/, 4101 /*IDM_FILE_NEW*/, 0); //Создание (закладки) нового файла
AkelPad.ReplaceSel(pContent);
AkelPad.SaveFile(AkelPad.GetEditWnd(), pFile); //Сохраняем файл по пути и с именем pFile
AkelPad.SendMessage(hMainWnd, 273 /*WM_COMMAND*/, 4318 /*IDM_WINDOW_FRAMECLOSE*/, 0); //Закрываем закладку только что созданного файла
Всё это будет так быстро, что на мощных компах даже не будет видно, что закладка мигает

Можно попробовать отключать прорисовку, но я не думаю, что это поможет, т.к. она отключает не прорисовку текущего окна редактирования (туда hEditWnd передаётся), а не всей проги.
Deim0s wrote:Sorry, I don't like multi-scripts. I like: one function - one script.
Это не всегда хорошо, особенно когда есть много общего кода: трудно поддерживать такой код...
Я использую несколько общих скриптов, как библиотеки функций, считаю, что это хорошим решением. Лучшим, чем копипаст. Копипаст хорош, когда одна меленькая функцейка, и только.
Posted: Thu Aug 05, 2010 8:36 am
by FeyFre
VladSh
Насчет WinHelp/HtmlHelp.
У MS действительно есть проблемы с ними.
1. Их вызов часто сопровождается утечками ресурсов.
2. В зависимости от способа их вызова, они могу блокировать/не блокировать окна приложений, вызываться/не вызываться дважды, завершаться/не завершаться после завершения родительского процесса.
3. У HtmlHelp есть свои заморочки по работе с InternetExpoler
Насчет "прорисовки окна редактирования"
WshShell.Run("%COMSPEC% /c " + "\"" + pChmKwPath + " " + pHelpPath + "\"", 0, true);
true означает "ждать пока порожденный процесс не завершится", т.е. Вы не закончите работать со справкой. А так как AkelPad у нас однопоточный, что автоматически означает что всё делается в GUI-потоке, то это означает что ни о каком взаимодействии с AkelPad не может идти речи(ни ввод/вывод, ни очередь сообщений, ни COM).
Поменяйте это флаг на
false
Posted: Thu Aug 05, 2010 9:46 am
by VladSh
FeyFre
Спасибо огромное за чёткий ответ!
Хоть процесс cmd всё равно висит от AkelPad'а, но зато теперь можно продолжать работать в Akel'е.

Posted: Thu Aug 05, 2010 10:20 am
by se7h
LanguageHelp.js v1.6
1.6: corrected call-method
Log() snippet
Posted: Thu Aug 05, 2010 10:39 am
by Fr0sT
Чудеса, но сегодня методика вывода в файл заработала! Встречайте -
Log() snippet. Также, разумеется, можно применять для любых других текстовых операций.
Файл создаётся рядом с Akelpad.exe и называется по имени вызывающего скрипта, также пишется время, правда, в дефолтном формате.
Re: Log() snippet
Posted: Thu Aug 05, 2010 12:23 pm
by VladSh
Fr0sT wrote:Чудеса, но сегодня методика вывода в файл заработала!
Там имена функций (и всё такое) регистрозависимые, у меня когда-то тоже долго подобные траблы были...
Несколько замечаний по
Log.js, не сочти за наезд
1. Очень плохо мусорить, тем более рядом с exe'шником. Файлы лучше ложить сюда:
Code: Select all
..:\Documents and Settings\USER\Local Settings\Temp\AkelPad\Logs\
либо в крайнем случае туда, куда сохраняет Sessions-плагин, т.е.:
Code: Select all
..:\Documents and Settings\USER\Application Data\AkelPad\Logs\
2. Формат времени можно вытягивать из настроек или прямо из AkelPad.ini, параметр DateLogFormat.
3. Сорри, но без отображения записей лога в отдельном окошке (внизу) онлайн, особого смысла в этом я не увидел. Может быть пока.
Posted: Thu Aug 05, 2010 12:47 pm
by FeyFre
1. Очень плохо мусорить, тем более рядом с exe'шником. Файлы лучше ложить сюда:
В нашем случае лучше именно у екзешника:
1. Достаточно большой процент(хоть и по сути маленький) имеют по несколько копий Акела в системе(У меня лично три штуки). Если они будут пихать логи в одну дырку одновременно, они в конце концов поругаются, и пользователь просто ничего не сможет прочесть в них.
2. Чем дальше лог от приложения, тем хуже для сопровождения.
3. У нас лог не постоянный, а отладочный. Т.е. создается когда нужно. А не за два с половиной час 20-метровый лог(и так круглосуточно накапливается история до 20-метровых 10 логов).
В крайнем случае можете себе изменить путь сами.
3. Сорри, но без отображения записей лога в отдельном окошке (внизу) онлайн, особого смысла в этом я не увидел. Может быть пока.
Запускаем второй АкелПад, открываем файл лога, запускаем плаг просмотра лога и смотрим как прокручивается

Posted: Thu Aug 05, 2010 1:32 pm
by Fr0sT
VladSh
да вроде всё копипастил из мануала, причем ошибка какая-то странная была... к тому же, когда не из Акеля запускал, всё срабатывало! Не знаю, мистика...
1. Ой, я фанат portable концепции и дико ненавижу раскидывать файлы и настройки по системе. Хотя на 7ке или под ограниченным юзером будут траблы... в этом случае можно сваливать логи в %TEMP%
2. Да, я смотрел InsertDate, но мне не показалось продуктивным в каждый вызов лога дёргать две системные функции. Так что сделал самое простое, что есть. Иначе код раздуется до сотни строк)
3. Да, действительно, можно сделать как сказал FeyFre, а можно и потом смотреть - меня лично на поиски способа вывода в лог натолкнул неприятный баг, который происходил в цикле на примерно 10ю итерацию (да ещё не каждый раз!) и рушил Акель. Для этих целей вывод в файл лучше всего.
В любом случае, это только набросок, и каждый волен переделать его по собственному желанию
