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