Discuss and announce AkelPad plugins
Offline
Posts: 1873 Joined: Mon Aug 06, 2007 1:07 pm
Contact:
Post
by Infocatcher » Mon Apr 11, 2011 8:50 am
FeyFre wrote: (ибо не могу обновить скрипт по причине ucoz)
А есть
зеркало со скриптами , но я ленюсь по две ссылки копировать.
Instructor wrote: TimerExample.js
Спасибо!
se7h wrote: этот работает и, как положено, попросился в сеть через NOD32 Smart Security
Тогда не понятно, в чем отличие от основного скрипта.
Offline
Posts: 767 Joined: Mon Sep 28, 2009 10:03 am
Location: Minsk, Belarus
Post
by se7h » Mon Apr 11, 2011 9:41 am
Infocatcher
на стационарном компе заработало, видно что-то с ноутом...
Offline
Posts: 2248 Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine
Post
by FeyFre » Mon Apr 11, 2011 10:12 am
Infocatcher
measuresConverter-test.js LINE 1427
// We don't have native JSON support
А что это за необдуманное заявление?
Offline
Posts: 2248 Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine
Post
by FeyFre » Mon Apr 11, 2011 11:49 am
Infocatcher , а оно и было рассчитано на eval с проверками, и до сих пор этим страдают много скриптов. И ничего, живут.(Причем, в некоторых случаях eval пердпочтительней)
Кроме того, RFC4627 любезно предоставило регулярное выражение для валидации JSON.
Offline
Posts: 1873 Joined: Mon Aug 06, 2007 1:07 pm
Contact:
Post
by Infocatcher » Mon Apr 11, 2011 12:34 pm
FeyFre
Это да, но eval() я не очень хочу, а проверки, пусть и готовые, в данном случае уже излишни – уже и так работает, а кода мало.
Offline
Posts: 1873 Joined: Mon Aug 06, 2007 1:07 pm
Contact:
Post
by Infocatcher » Mon Apr 11, 2011 3:31 pm
Instructor wrote: TimerExample.js
И все же это не совсем аналог.
Пока все таймеры не сработают, дальнейший код не выполняется.
А хотелось именно неблокирующее «откладывание» – чтобы интерфейс перерисовывался.
Offline
Posts: 2248 Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine
Post
by FeyFre » Mon Apr 11, 2011 3:50 pm
Infocatcher
Что-бы интерфейс перерисовывался там и стоит AkelPad.WindowGetMessage() но он тебе не подходит. Единственное что могу посоветовать - делать твой аякс запрос в отдельном потоке(вот только тут многопоточность фиг организуешь, я уже пробовал), либо делай его как положено - асинхронным.
Offline
Posts: 1873 Joined: Mon Aug 06, 2007 1:07 pm
Contact:
Post
by Infocatcher » Mon Apr 11, 2011 4:06 pm
KDJ wrote: make extra buttons to:
- currency sorting by name/code,
- update/force update exchange rate.
And the message "Wait for download data" while update.
Added:
measuresConverter-test.js
Now used only asynchronous requests with progress indication.
Offline
Posts: 1949 Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland
Post
by KDJ » Mon Apr 11, 2011 6:29 pm
Infocatcher wrote: ... but Russian «Сортировать по имени» is too long ...
You can do it like this:
Offline
Posts: 1873 Joined: Mon Aug 06, 2007 1:07 pm
Contact:
Post
by Infocatcher » Mon Apr 11, 2011 6:56 pm
KDJ
I not sure, «update» is not sorting.
And it's better to group all additional items, I think.
Offline
Posts: 767 Joined: Mon Sep 28, 2009 10:03 am
Location: Minsk, Belarus
Post
by se7h » Mon Apr 11, 2011 7:31 pm
Infocatcher
"Сортировать" или "Сортировка" или "Упорядочить" - вариантов много
Offline
Posts: 1949 Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland
Post
by KDJ » Mon Apr 11, 2011 8:24 pm
Infocatcher
Well, maybe so:
Offline
Posts: 1873 Joined: Mon Aug 06, 2007 1:07 pm
Contact:
Post
by Infocatcher » Mon Apr 11, 2011 9:44 pm
KDJ
Looks better, thanks.
But for «Force update» we get long «Принудительное обновление». Also we have hotkey and Ctrl/Shift+click or right-click for «force update».
Script updated:
measuresConverter-test.js
Offline
Posts: 1873 Joined: Mon Aug 06, 2007 1:07 pm
Contact:
Post
by Infocatcher » Tue Apr 12, 2011 8:37 pm
Как будет работать
такой код такой код Code: Select all
restoreWindowPosition(hWnd);
function restoreWindowPosition(hWnd) {
var dlgX = ...;
var dlgY = ...;
var rcWnd = getWindowRect(hWnd);
var rcDesktop = getWindowRect(oSys.Call("user32::GetDesktopWindow"));
if(!rcWnd || !rcDesktop)
return;
var edge = 16;
var minX = rcDesktop.left - (rcWnd.right - rcWnd.left) + edge;
var minY = rcDesktop.top;
var maxX = rcDesktop.right - edge;
var maxY = rcDesktop.bottom - edge;
var hWndTaskbar = oSys.Call("user32::FindWindowEx" + _TCHAR, 0, 0, "Shell_TrayWnd", 0);
if(hWndTaskbar) {
var rcTaskbar = getWindowRect(hWndTaskbar);
if(rcTaskbar.left == rcDesktop.left && rcTaskbar.right == rcDesktop.right) { // bottom or top
var h = rcTaskbar.bottom - rcTaskbar.top;
if(rcTaskbar.bottom == rcDesktop.bottom) // bottom
maxY -= h;
else if(rcTaskbar.top == rcDesktop.top) // top
minY += h;
}
else if(rcTaskbar.top == rcDesktop.top && rcTaskbar.bottom == rcDesktop.bottom) { // right or left
var w = rcTaskbar.right - rcTaskbar.left;
if(rcTaskbar.right == rcDesktop.right) // right
maxX -= w;
else if(rcTaskbar.left == rcDesktop.left) // left
minX += w;
}
}
dlgX = Math.max(minX, Math.min(maxX, dlgX));
dlgY = Math.max(minY, Math.min(maxY, dlgY));
oSys.Call("user32::SetWindowPos", hWnd, 0, dlgX, dlgY, 0, 0, 0x15 /*SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE*/);
}
function getWindowRect(hWnd) {
var lpRect = AkelPad.MemAlloc(16); //sizeof(RECT)
if(!lpRect)
return null;
oSys.Call("user32::GetWindowRect", hWnd, lpRect);
var rcWnd = parseRect(lpRect);
AkelPad.MemFree(lpRect);
return rcWnd;
}
function parseRect(lpRect) {
return {
left: AkelPad.MemRead(lpRect, 3 /*DT_DWORD*/),
top: AkelPad.MemRead(lpRect + 4, 3 /*DT_DWORD*/),
right: AkelPad.MemRead(lpRect + 8, 3 /*DT_DWORD*/),
bottom: AkelPad.MemRead(lpRect + 12, 3 /*DT_DWORD*/)
};
}
при наличии нескольких мониторов? А то мне не проверить.
И как вообще положено проверять, попадет ли окно в рабочую область?