Page 46 of 97

Posted: Wed Dec 29, 2010 5:47 pm
by Infocatcher
Andrey_A_A
Так ведь множественное выделение вообще не поддерживается.

Posted: Wed Dec 29, 2010 6:23 pm
by KDJ
Andrey_A_A wrote:Подскажите как можно выделить определённые строки одновременно. К примеру мне нужно выделить 1, 7, 11, 22... строку с помощью скрипта...
In AkelPad is not possible to select multiple noncontiguous ranges.
This possibility is, for example in Notepad++.
But using a script in AkelPad you can to process needed rows sequentially.
Write, what you want to do with lines of numbers 1, 7, 11, 22. I'll try to help you.

Posted: Sat Jan 01, 2011 6:02 pm
by Infocatcher
getHash.js
Добавлена галочка для перевода в верхний регистр.

Posted: Sun Jan 02, 2011 12:53 pm
by KDJ
Changes in FileInfo.js:
1. Fixed algorithm for calculating the number of words. Gives a result, such as Stats plugin.
2. Indexes of empty lines, that contain spaces or tabs, labeled "-empty".
3. If you selected a piece of text - gives statistics of selected text. If not selected - statistics throughout the text.

Posted: Sun Jan 02, 2011 3:52 pm
by Andrey_A_A
В скриптах используется команда
SendMessage(hHandle, nMessage, wParam, lParam);
Подскажите, где можно на русском языке прочитать подробную информацию о всех возможных сообщениях (командах), которые можно послать окну (nMessage) и их параметрах. Просто не до конца понятны выражения типа:
273 /*WM_COMMAND*/
3087 /*AEM_SETMODIFY*/
0x400, //LOCALE_USER_DEFAULT
...
в справке, в Scripts-Rus.txt я этого не нашёл.

Posted: Sun Jan 02, 2011 5:46 pm
by FeyFre
Andrey_A_A
SendMessage это просто упрощенный вызов AkelPad.SystemFunction().Call("user32::SendMessage"+_TCHAR, ....) т.е. работа в родном окружении ОС. Функция выполняет синхронную отправку сообщений указанному окну.
Взаимодействие программ с окнами в обеспечивается с помощью небольшого набора системных вызовов из модуля user32, в том числе с помощью т.н. оконных сообщений - дискретных запросов к так называемой оконной процедуре - подпрограмме которая целиком определяет поведение окна. Сообщение идентифицируется кодом(0-65535), а также двумя числовыми параметрами(условное обозначение wParam, lParam). Каждое окно имеет право обрабатывать сообщение собственным алгоритмом, не зависимо от других окон. И тем не менее, для унификации первые 1024 сообщения(0-1023) используются системой(служебные уведомления окнам), и каждое окно для обеспечения работоспособности обязано реагировать на них определенным образом(например, сообщение WM_NCDESTROY(130) последнее сообщение, которое получит окно перед самым его уничтожением, потому оконная процедура обязана освободить занятую в процессе существования окном память, если этого не сделала раньше).
Сообщения >1023 система не специфицирует и никогда не отправляет по собственно инициативе.
Если Вы новичек в программировании WIN32 то для начала Вам нужно бы познакомится у устройством ОС, например из книги Рихтера тут http://alexsoft.home.nov.ru/prog/index.htm

Более конкретно о каждом системном сообщении сможете прочесть в MSDN(гуглить), а также там есть всё что нужно знать о стандартных окна(поля ввода, кнопки, списки, диалоги, меню, прочее).
О сообщениях AkelPad-а, и AkelEdit-а, вы можете подробно узнать из исходников AkelDll.h, AkelEdit.h(и с MSDN о совместимой с RichEdit части)

ЗЫ: Не рекомендую искать русскоязычные справки/учебники. Легче Вам от этого не станет. Разве что у Вас над головой будет стаять специалист.

Posted: Mon Jan 03, 2011 11:13 am
by Andrey_A_A
FeyFre большое спасибо за подробную информацию. Я понимаю что сразу всё не освоить. Я самообучаюсь, разбирая различные скрипты. Начал с vbs , и изначально я сделал собственную справку, куда вносил, и вношу новые освоенные функции, даже целые блоки скриптов, для дальнейшего использования, что позволяет быстро писать, беря нужные блоки. За 8 месяцев написано более 100 скриптов в основном для файловой с-мы в тотале... Появилась мысль оптимизировать AkelPad. Пишу, что-то получается что-то нет. Может кто-то из скринописателей для AkelPada тоже ведёт подобную справку, библиотеку функций, различных шаблонов на русском языке. Если поделитесь - это будет очень здорово.

Posted: Mon Jan 03, 2011 7:46 pm
by Infocatcher
Instructor wrote:Added: method ScriptNoMutex - allow other scripts running with this script at the same time.
Updated:
goToLongestLine.js
AESCrypt.js
converter.js
getHash.js
LinesFilter_mod2.js

Posted: Mon Jan 03, 2011 10:52 pm
by Infocatcher
Updated again. :)
Now second launch move focus to already opened dialog window, based on SetCoderExt.js code.

Posted: Mon Jan 03, 2011 11:15 pm
by FeyFre
Infocatcher

Code: Select all

function findWindow(lpszClassName, hWndParent)
{
  var memClass = AkelPad.MemAlloc((lpszClassName.length + 1)*_TSIZE);
  if (!memClass)
    return 0;
  AkelPad.MemCopy(memClass, lpszClassName, _TSTR);
  var hWnd = oSys.Call("user32::FindWindowEx" + _TCHAR, hWndParent || 0, 0, memClass, 0);
  AkelPad.MemFree(memClass);
  return hWnd;
}
Ооооочень плохая идея. Гляньте опять в мой скрипт. Я первым аргументом передаю главное окно, а у Вас только ноль. Это не правильно. FindWindowEx перебирает детей указанного родителя, и только прямых детей, а не всех потомков. В случае 0 - детей рабочего стола. Диалог же, который Вы пытаетесь найти - не дочерний рабочему столу, а дочерний главному окну акела. И найден не будет.(И даже если я ошибся, то вот второй пункт) Также если запущено два акела, и два таких скрипта с таким окном, то где Вы прочитали что будет найдено именно нужное Вам окно - принадлежащее тому Акелу, из которого его ищут?

Posted: Mon Jan 03, 2011 11:34 pm
by Infocatcher
FeyFre
Это понятно, но у меня ничего не вышло:

Code: Select all

	var hWndDialog = findWindow(windowClass);
	WScript.Echo(findWindow(windowClass, hMainWnd)); // Всегда 0
И в текущем виде работает. Все же это лучше, чем не делать при повторном запуске вообще ничего.

Видимо, что-то не так где-то здесь:

Code: Select all

	hWndDialog = oSys.Call(
		"user32::CreateWindowEx" + _TCHAR,
		0,             //dwExStyle
		windowClass,   //lpClassName
		0,             //lpWindowName
		0x90CA0000,    //WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX
		0,             //x
		0,             //y
		420,           //nWidth
		360,           //nHeight
		hMainWnd,      //hWndParent
		0,             //ID
		hInstanceDLL,  //hInstance
		dialogCallback //Script function callback. To use it class must be registered by WindowRegisterClass.
	);
, в hWndParent.

Posted: Tue Jan 04, 2011 12:26 pm
by FeyFre
Infocatcher
Это понятно, но у меня ничего не вышло:
oSys.GetLastError() всегда есть. Что он возвращает?

Posted: Tue Jan 04, 2011 1:41 pm
by FeyFre
SetCoderExt.js
Improved reaction on AkelPad shutdown sequence.

Posted: Tue Jan 04, 2011 4:05 pm
by Infocatcher
FeyFre wrote:oSys.GetLastError() всегда есть. Что он возвращает?
0 возвращает.
Оно и понятно: окна.

Posted: Tue Jan 04, 2011 8:05 pm
by Infocatcher
FeyFre wrote:Также если запущено два акела, и два таких скрипта с таким окном, то где Вы прочитали что будет найдено именно нужное Вам окно - принадлежащее тому Акелу, из которого его ищут?
На первый взгляд, проще всего вот так:

Code: Select all

	var hInstanceDLL = AkelPad.GetInstanceDll();
	var windowClass = "AkelPadScript:" + hInstanceDLL + ":" + WScript.ScriptName;

	var hWndDialog = findWindow(windowClass);
	if(hWndDialog) {
		AkelPad.SendMessage(hWndDialog, 7 /*WM_SETFOCUS*/, 0, 0);
		return;
	}
Вроде, работает правильно.