Page 65 of 97

Posted: Wed Mar 02, 2011 2:32 am
by Infocatcher
Набрел на полезную страничку: http://en.wikipedia.org/wiki/Conversion_of_units
А ошибки по-прежнему не исключаются. :)
measuresConverter.js

Posted: Wed Mar 02, 2011 9:55 am
by se7h
Infocatcher
toggleComments.js при встрече с файлом "view.html.php" уверен, что это html-файл, хотя очевидно, что это php

Posted: Wed Mar 02, 2011 5:26 pm
by Infocatcher
se7h
А для view.php будет то же самое.
Там идет

Code: Select all

if(commentsMultipleEnabled)
	commentsSets.php = commentsSets.html;
и дальше проверяется наличие <? и ?> вокруг комментируемого.


measuresConverter.js
Fixed switch between source and target measure, now there are two separate commands for text fields and for measures.

AESCrypt.js (released test version)

converter.js
Added preview option.
Compact dialog window.
Simplified logic of arguments handling. You should use -dialog=false to don't show dialog.

getHash.js
Simplified logic of arguments handling.

goToLongestLine.js (released test version)

openFileIn.js (released test version)
Added support for openFileIn-options.js file.

toggleComments.js (released test version)

Posted: Wed Mar 02, 2011 6:26 pm
by Instructor
Infocatcher

converter.js

Code: Select all

var xPos = lParam & 0xFFFF;         //GET_X_LPARAM(lParam) => (int)(short)LOWORD(lParam)
var yPos = (lParam >> 16) & 0xFFFF; //GET_Y_LPARAM(lParam) => (int)(short)HIWORD(lParam)
Здесь лучше GetCursorPos, иначе, если диалог находится на втором мониторе, то меню появится на первом. Еще не учитывается контекстное меню с клавиатуры lParam в этом случае равен -1.

И вместо EM_GETSELTEXT оптимальнее будет AEM_GETSEL с нулями в WPARAM и LPARAM, т.к. EM_GETSELTEXT вычисляет размер выделенной области. Правда в этом случае это не особо важно.

Posted: Wed Mar 02, 2011 7:45 pm
by Infocatcher
Instructor
Экие хитрости.
HexSel.c:

Code: Select all

  if (!bMouse)
  {
    SendMessage(hWnd, AEM_GETCARETPOS, (WPARAM)&pt, 0);
    pt.y+=(int)SendMessage(hWnd, AEM_GETCHARSIZE, AECS_HEIGHT, 0);
    ClientToScreen(hWnd, &pt);
  }
  else GetCursorPos(&pt);
Не понятно, что делать с AEM_GETCHARSIZE, это же нестандартное сообщение. И тут тоже не особо понятно.
Понятно только, что надо через GetObject() получить LOGFONT.
А без высоты каретки

Code: Select all

var lpPoint = AkelPad.MemAlloc(8 /*sizeof(POINT)*/);
if(!lpPoint)
	break;
var xPos = 0;
var yPos = 0;
if(lParam == -1) { // Context menu from keyboard
	if(oSys.Call("user32::GetCaretPos", lpPoint)) {
		oSys.Call("user32::ClientToScreen", hWndOutput, lpPoint);
		xPos = AkelPad.MemRead(lpPoint,     3 /*DT_DWORD*/);
		yPos = AkelPad.MemRead(lpPoint + 4, 3 /*DT_DWORD*/);
	}
	//yPos += caretHeight;
}
else if(oSys.Call("user32::GetCursorPos", lpPoint)) {
	xPos = AkelPad.MemRead(lpPoint,     3 /*DT_DWORD*/);
	yPos = AkelPad.MemRead(lpPoint + 4, 3 /*DT_DWORD*/);
}
AkelPad.MemFree(lpPoint);
.

Кстати, а
var lpPoint = AkelPad.MemAlloc(8 /*sizeof(POINT)*/, true);
уже выпилили?
Когда-то давно в случаях с

Code: Select all

AkelPad.SendMessage(hWndEdit, 1245 /*EM_GETSCROLLPOS*/, 0, lpPoint);
без него иногда падало.
Правда в этом случае это не особо важно.
А когда важно?

P.S. Да, про ShowStandartViewMenu(): http://multitran.ru/c/m.exe?s=Standart и http://multitran.ru/c/m.exe?s=Standard.

Posted: Wed Mar 02, 2011 8:51 pm
by KDJ
Infocatcher
In the script measuresConverter.js, I suggest to add in the section of currency:
1. Column containing the currency codes (in listbox).
2. Sort listbox by currency name or by currency code.
3. Button to load the current exchange rate.

Posted: Wed Mar 02, 2011 9:13 pm
by Infocatcher
KDJ
http://msdn.microsoft.com/en-us/library ... ULTICOLUMN
A list box with the LBS_MULTICOLUMN style cannot scroll vertically—it ignores any WM_VSCROLL messages it receives.
I not sure about multicolumn listbox. :?
3. Button to load the current exchange rate.
Now there are two hotkeys:
F5 – update
Ctrl+F5 or Shift+F5 – force update (ignore last update time and -offlineExpire argument)
But update process lock dialog window and AkelPad. Asynchronous requests should be better, of course, but needed more code... :)

Posted: Wed Mar 02, 2011 9:34 pm
by KDJ
Infocatcher wrote:I not sure about multicolumn listbox. :?
It can be done a list view instead of listbox.

Posted: Thu Mar 03, 2011 6:00 am
by Instructor
Infocatcher
Не понятно, что делать с AEM_GETCHARSIZE, это же нестандартное сообщение.
Создание RichEdit20 в среде AkelPad'а равнозначно созданию AkelEdit окна с именем класса RichEdit20.
уже выпилили?
Да, второй параметр не обрабатывается, после того как Scripts.dll перестал быть ActiveX.
А когда важно?
Когда предполагается работа с большими объемами текста. Хотя и тут возможно кто-нибудь захочет конвертануть 100Мб текста, а потом скопировать все кроме первой строки :)
P.S.
Для внутреннего кода можно :)

Posted: Thu Mar 03, 2011 4:48 pm
by Infocatcher
Instructor wrote:Создание RichEdit20 в среде AkelPad'а равнозначно созданию AkelEdit окна с именем класса RichEdit20.
А я что-то поздно решил проверить. И как-то проглядел
AEM_GETSEL с нулями в WPARAM и LPARAM
:)
Обновил: converter.js
Instructor wrote:Хотя и тут возможно кто-нибудь захочет конвертануть 100Мб текста, а потом скопировать все кроме первой строки :)
Не догнал.

Posted: Fri Mar 04, 2011 12:36 am
by Infocatcher
.vbs:

Code: Select all

dim oSys
oSys = AkelPad.SystemFunction

Code: Select all

Строка:	2
Символ:	1
Ошибка:	Объект не поддерживает это свойство или метод
Код:	800A01B6

Code: Select all

dim x
x = _TCHAR

Code: Select all

Строка:	2
Символ:	6
Ошибка:	Недопустимый  знак
Код:	800A0408

Code: Select all

dim _x

Code: Select all

Строка:	1
Символ:	6
Ошибка:	Недопустимый  знак
Код:	800A0408
А идея была – сделать универсальный скрипт для запуска скриптов. Если файл лежит в папке скриптов, то AkelPad.Call("Scripts::Main", 1, fileName), иначе – eval().
При этом для несохраненных файлов сложно определить, js это или vbs, но можно попробовать выполнить как js, а в случае ошибки – как vbs. И если выполнение как vbs не вызвало ошибок, то хотелось бы не показывать ошибку js (с этим как раз и сложность).
То есть vbs-скрипт должен как-то сообщить, что все успешно, а js-скрипт – прочитать это сообщение.
(Я думал создавать окно, а в vbs его закрывать, отсюда и oSys с _TCHAR.)

Пока вот так:

Code: Select all

// Execute script from AkelFiles\Plugs\Scripts\ directory or just eval() selected or all code

var filePath = AkelPad.GetEditFile(0);
if(filePath == WScript.ScriptFullName)
	WScript.Quit();
var fso = new ActiveXObject("Scripting.FileSystemObject");
if(fso.GetParentFolderName(filePath) == AkelPad.GetAkelDir(5 /*ADTYPE_SCRIPTS*/))
	AkelPad.Call("Scripts::Main", 1, fso.GetFileName(filePath));
else {
	var ext = /\.([^.]+)$/.test(filePath) ? RegExp.$1 : "";
	var isVbs = /^(bas|vb[s5]?|wbt|frm)$/.test(ext);
	if(!isVbs) try {
		eval(AkelPad.GetSelText() || AkelPad.GetTextRange(0, -1));
		WScript.Quit();
	}
	catch(e) {
		var err = e;
	}
	AkelPad.Call("Scripts::Main", 1, WScript.ScriptName.replace(/\.[^.]+$/, "") + ".vbs");
	if(err)
		throw err;
}

Code: Select all

if AkelPad.GetSelStart = AkelPad.GetSelEnd then
	execute AkelPad.GetTextRange(0, -1)
else
	execute AkelPad.GetSelText
end if

Posted: Fri Mar 04, 2011 10:29 am
by opk44
Infocatcher wrote:.vbs:

Code: Select all

dim x
x = _TCHAR

Code: Select all

Строка:	2
Символ:	6
Ошибка:	Недопустимый  знак
Код:	800A0408
По большому счету, проблема не новая.
О причинах см. например "...\AkelFiles\Docs\Scripts-Rus.txt":

Code: Select all

стр. 1409: Пример (VBScript):
...
стр. 1417:  'VBScript deny names start with (_) underscope
...
Хотя, исходя из этого, странно, что были намеренно выбраны именно такие имена. Видимо чтобы добавить проблем "vbs-никам" :).

Posted: Fri Mar 04, 2011 10:38 am
by FeyFre
Хотя, исходя из этого, странно, что были намеренно выбраны именно такие имена. Видимо чтобы добавить проблем "vbs-никам" :)
Уверяю Вас, такие имена были выбраны, потому что так удобно и привычно С-шникам, и такие имена позволяет ScriptEngine

Posted: Fri Mar 04, 2011 6:57 pm
by VladSh
Infocatcher
> runScript.js...
Чувствую, что что-то полезное.. Какова область применения? Можно ли какой-нибудь пример использования?

Posted: Fri Mar 04, 2011 7:22 pm
by Infocatcher
VladSh
Назначить хоткей и быстро запускать редактируемый скрипт.
Или есть скрипт, но лень его сохранять (вдруг не очень полезный :)) – можно быстро посмотреть.

Разве что для запуска скриптов, правящих текст, не очень подходит. Но тут особо ничего не сделать. Тут бы подошел ввод аргументов в окне со скриптами.
Или можно предусмотреть вызов runScript.js с параметрами – чтобы можно было имя скрипта передать*. Но тогда все же придется на время тестирования сделать новый хоткей/кнопку/пункт меню.

*Сделал, обновил: runScript.js.