Page 11 of 31

Posted: Sun Sep 08, 2019 5:21 pm
by AZJIO
Panel_Function - панель для вставки функций, добавил несколько семплов для JS и указал в настройках класс окна AkelPad4, чтобы работал из коробки. А вообще описание тут.
Хотя я понимаю, что фрагменты кода можно вставлять через автозавершение с префиксами в именах типа zz_Language. Ввёл "zz" появилось всплывающее окно, выбирай семпл.

Posted: Mon Sep 09, 2019 5:03 am
by AZJIO
сделано
с именованным масивом разобрался, хоть объект "Scripting.Dictionary", хоть просто obj = new Object()

Posted: Thu Sep 12, 2019 8:52 am
by AZJIO
Был пример с CheckBox, теперь добавил поле ввода и кнопки, в общем стандартный набор для входных настроек. Окно Box, Modal, блокирует доступ к родителю. Упростил так что флаги окна не просматриваются, только данный тип окна. Добавил функции чтения поля ввода из другого скрипта KDJ, так как просто показать элементы это не полноценный пример.

Code: Select all

// Вырезано всё оставив чекбокс, поле ввода... из скрипта-примера CreateDialog.js от KDJ
//
//
// Требуется в папке include: CreateDialog_functions.js
var oSys = AkelPad.SystemFunction();
var sClass = "AkelPad::Scripts::" + WScript.ScriptName + "::" + AkelPad.GetInstanceDll(); // придумываем имя класса окна
var hDlg = oSys.Call("User32::FindWindowW", sClass, 0); // Ищем это окно, FindWindowW возвращает дескриптор

if(hDlg) // Если окно с указанным классом найдено, то
{
	if(!oSys.Call("User32::IsWindowVisible", hDlg)) // если окно невидимое, то
		oSys.Call("User32::ShowWindow", hDlg, 8 /*SW_SHOWNA*/ ); // делаем видимым
	if(oSys.Call("User32::IsIconic", hDlg)) // если окно свёрнуто, то
		oSys.Call("User32::ShowWindow", hDlg, 9 /*SW_RESTORE*/ ); // разворачиваем

	oSys.Call("User32::SetForegroundWindow", hDlg); // делаем окно активным
}
else if(AkelPad.Include("CreateDialog_functions.js")) // иначе (если окно не найдено) если существует необходимый скрипт, то
{
	var hIcon = oSys.Call("User32::LoadImageW", AkelPad.GetInstanceDll(), 101, 1 /*uType=IMAGE_ICON*/ , 0, 0, 0x40 /*LR_DEFAULTSIZE*/ ); // загружает иконку, возвращая дескриптор
	var nCounter = 0; // счётчик диалоговых окон
	// Константы ID элементов управления окна
	var ID_CHECKB = 2001; // идентификатор чекбокса
	var ID_GROUPE = 2002; // линия группирования элементов
	var ID_INP = 2003; // поле ввода
	var ID_BTN_OK = 2004; // кнопка ОК
	var ID_CANCEL = 2005; // кнопка отмена
	var ID_LABEL = 2006; // Надпись над полем ввода

	if(AkelPad.WindowRegisterClass(sClass)) // если класс зарегистрирован
	{
		// Разрешить запуск других скриптов
		AkelPad.ScriptNoMutex();

		CreateDialog(false, false, AkelPad.GetMainWnd()); // Функция создания окна
		AkelPad.WindowUnregisterClass(sClass); // разрегистрировать класс после закрытия окна, то есть по завершении предыдущей функции
	}

	oSys.Call("user32::DestroyIcon", hIcon); // Удалить дескриптор значка, освободив ресурсы
}

function CreateDialog(bBox, bModeless, hParent) {
	var nTimerID = ++nCounter;
	var aDlg = [];
	var nResult;
	var hFocus;

	aDlg.Modeless = bModeless;
	aDlg.Title = "Настройки"; // Заголовок окна
	aDlg.Style = WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX; // Стиль окна
	aDlg.Parent = hParent; // Родитель окна (блокировать доступ к родителю или закрывать при закрытии родителя)
	aDlg.Callback = DialogCallback; // Имя функции обратного вызова принимающая события окна
	aDlg.Icon = hIcon; // дескриптор иконки окна ранее полученный
	aDlg.X = 20; // X-координата окна
	aDlg.W = 270; // ширина окна
	aDlg.H = 180; // высота окна
	aDlg.PosPar = 3;
	aDlg.CtlFirst = ID_CHECKB; // первый элемент управления
	aDlg.CtlStyle = WS_VISIBLE;

	// если флаг бокс-окно
	aDlg.PosPix = true;
	aDlg.CtlFontN = "MS Shell Dlg";

	// Масив элементов управления окна
	// Задаёт характеристики каждого (положение и размеры, текст, стиль), чтобы потом создать функцией InitDialog()
	aDlg[ID_GROUPE] = {
		X: 10,
		Y: 10,
		W: 150,
		H: 95,
		Title: "Сгруппированные",
		Style: BS_GROUPBOX | BS_CENTER
	};
	aDlg[ID_LABEL] = {
		X: 20,
		Y: 30,
		W: 80,
		H: 13,
		Title: "Введи текст",
		Class: "STATIC"
	};
	aDlg[ID_INP] = {
		X: 20,
		Y: 50,
		W: 120,
		H: 20,
		Title: "какой то текст",
		Class: "EDIT",
		Style: WS_TABSTOP | WS_BORDER
	};
	aDlg[ID_CHECKB] = {
		X: 20,
		Y: 80,
		W: 110,
		H: 16,
		Title: "Чекбокс",
		Style: WS_TABSTOP | BS_AUTOCHECKBOX
	};
	aDlg[ID_BTN_OK] = {
		X: 20,
		Y: 110,
		W: 60,
		H: 23,
		Title: "OK",
		Style: WS_TABSTOP | BS_PUSHBUTTON
	};
	aDlg[ID_CANCEL] = {
		X: 90,
		Y: 110,
		W: 60,
		H: 23,
		Title: "Cancel",
		Style: WS_TABSTOP | BS_PUSHBUTTON
	};

	// если флаг бокс-окно
	nResult = CreateDialogBox(aDlg);

	// Функция обратного вызова принимающая события
	function DialogCallback(hWnd, uMsg, wParam, lParam) {
		if(uMsg == 1 /*WM_CREATE*/ ) // если пришло сообщение о создании окна
		{
			aDlg.HWND = hWnd; // Дописываем дексриптор
			CreateDialogWindow(aDlg, 2, hWnd);
			InitDialog(); // Задаёт начальное состояние элементов в окне
			hFocus = aDlg[ID_CHECKB].HWND; // Указываем дескриптор в фокусе
		}

		switch(uMsg) { //сравнение ==
			case 272 /*WM_INITDIALOG*/ :
				InitDialog(); // Задаёт начальное состояние элементов в окне
				break;
			case 273 /*WM_COMMAND*/ :
				var nLowParam = LoWord(wParam); // младшее слово содержит ID элемента управления
				// var nHiwParam = HiWord(wParam); // младшее слово содержит ID элемента управления
				switch(nLowParam) { //сравнение ==
					case ID_BTN_OK: // событие нажатия "ОК", стандартно считываем параметры, чтобы использовать в дальнейшем
						// if (nHiwParam == 0)

						// Блок для чтения из поля ввода
						var nEditLen = 32767; // число символов с запасом для поля ввода
						var lpEdit = AkelPad.MemAlloc((nEditLen + 1) * 2); // Выделяем память и получаем указатель
						oSys.Call("User32::GetDlgItemTextW", hWnd, ID_INP, lpEdit, nEditLen); // Высылает текст поля ввода в указатель
						var sText_input = AkelPad.MemRead(lpEdit, 1 /*DT_UNICODE*/ ); // Читаем с указателя
						AkelPad.MemFree(lpEdit); // Освобождаем память

						var CheckboxState = AkelPad.SendMessage(aDlg[ID_CHECKB].HWND, 240 /*BM_GETCHECK*/ , 0, 0) // получаем состояние чекбокса
						AkelPad.MessageBox(hWnd, 'Чекбокс = ' + CheckboxState + '\n\n Поле ввода: ' + sText_input, 'Результат', 0x40 /*MB_ICONINFORMATION*/ );
						break;
					case ID_CANCEL: // кнопка отмены вызылает окну команду закрытия
						oSys.Call("User32::PostMessageW", hWnd, 16 /*WM_CLOSE*/ , nLowParam, 0);
						break;
						// case ID_CHECKB: // если событие клик на чекбоксе, то есть активно изменить что-либо сразу в окне
						// break;
				}
				break;
			case 16 /*WM_CLOSE*/ : // если событие закрытия окна, то
				oSys.Call("User32::EndDialog", hWnd, wParam);
				break;
			case 2 /*WM_DESTROY*/ : // если событие уничтожения окна, то
				if(nTimerID == 1)
					oSys.Call("User32::PostQuitMessage", 0);
				break;
		}

		return 0;
	}

	function InitDialog() {
		var i;
		// Ставит галочку в CheckBox
		AkelPad.SendMessage(aDlg[ID_CHECKB].HWND, 241 /*BM_SETCHECK*/ , 1 /*BST_CHECKED*/ , 0);

	}

}

// вытаскивает младшее слово из двойного слова
function LoWord(nDwNum) {
	return nDwNum & 0xFFFF;
}

// вытаскивает старшее слово из двойного слова
function HiWord(nDwNum) {
	return(nDwNum >> 16);
}

Posted: Thu Sep 12, 2019 11:19 am
by AZJIO
VladSh
Может стоит обновить DeleteFile.js добавив флаг удаления в корзину (по умолчанию в true)

Code: Select all

// -"Удалить файл в корзину" Call("Scripts::Main", 1, "DeleteFile.js") Icon("Shell32.dll", 31)
if (!AkelPad.Include("FileAndStream_functions.js"))
  WScript.Quit();
// ........
DeleteFile(pFileFullName, null, true) // удаление в корзину
удаление безвозвратно как то опасно выглядит

Posted: Fri Sep 13, 2019 3:32 am
by AZJIO

Code: Select all

// Вырезано всё оставив чекбокс, поле ввода... из скрипта-примера CreateDialog.js от KDJ
//
//
// Требуется в папке include: CreateDialog_functions.js
var oSys = AkelPad.SystemFunction();
var sClass = "AkelPad::Scripts::" + WScript.ScriptName + "::" + AkelPad.GetInstanceDll(); // придумываем имя класса окна
var hDlg = oSys.Call("User32::FindWindowW", sClass, 0); // Ищем это окно, FindWindowW возвращает дескриптор

if(hDlg) // Если окно с указанным классом найдено, то
{
	if(!oSys.Call("User32::IsWindowVisible", hDlg)) // если окно невидимое, то
		oSys.Call("User32::ShowWindow", hDlg, 8 /*SW_SHOWNA*/ ); // делаем видимым
	if(oSys.Call("User32::IsIconic", hDlg)) // если окно свёрнуто, то
		oSys.Call("User32::ShowWindow", hDlg, 9 /*SW_RESTORE*/ ); // разворачиваем

	oSys.Call("User32::SetForegroundWindow", hDlg); // делаем окно активным
}
else if(AkelPad.Include("CreateDialog_functions.js")) // иначе (если окно не найдено) если существует необходимый скрипт, то
{
	var hIcon = oSys.Call("User32::LoadImageW", AkelPad.GetInstanceDll(), 101, 1 /*uType=IMAGE_ICON*/ , 0, 0, 0x40 /*LR_DEFAULTSIZE*/ ); // загружает иконку, возвращая дескриптор
	var nCounter = 0; // счётчик диалоговых окон
	// Константы ID элементов управления окна
	var ID_CHECKB = 2001; // идентификатор чекбокса
	var ID_GROUPE = 2002; // линия группирования элементов
	var ID_INP = 2003; // поле ввода
	var ID_BTN_OK = 2004; // кнопка ОК
	var ID_CANCEL = 2005; // кнопка отмена
	var ID_LABEL = 2006; // Надпись над полем ввода
	var IDTB = 2007;

	if(AkelPad.WindowRegisterClass(sClass)) // если класс зарегистрирован
	{
		// Разрешить запуск других скриптов
		AkelPad.ScriptNoMutex();

		CreateDialog(false, false, AkelPad.GetMainWnd()); // Функция создания окна
		AkelPad.WindowUnregisterClass(sClass); // разрегистрировать класс после закрытия окна, то есть по завершении предыдущей функции
	}

	oSys.Call("user32::DestroyIcon", hIcon); // Удалить дескриптор значка, освободив ресурсы
}

function CreateDialog(bBox, bModeless, hParent) {
	var nTimerID = ++nCounter;
	var aDlg = [];
	var nResult;
	var hFocus;

	aDlg.Modeless = bModeless;
	aDlg.Title = "Настройки"; // Заголовок окна
	aDlg.Style = WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX; // Стиль окна
	aDlg.Parent = hParent; // Родитель окна (блокировать доступ к родителю или закрывать при закрытии родителя)
	aDlg.Callback = DialogCallback; // Имя функции обратного вызова принимающая события окна
	aDlg.Icon = hIcon; // дескриптор иконки окна ранее полученный
	aDlg.X = 20; // X-координата окна
	aDlg.W = 270; // ширина окна
	aDlg.H = 180; // высота окна
	aDlg.PosPar = 3;
	aDlg.CtlFirst = ID_CHECKB; // первый элемент управления
	aDlg.CtlStyle = WS_VISIBLE;

	// если флаг бокс-окно
	aDlg.PosPix = true;
	aDlg.CtlFontN = "MS Shell Dlg";

	// Масив элементов управления окна
	// Задаёт характеристики каждого (положение и размеры, текст, стиль), чтобы потом создать функцией InitDialog()
	aDlg[ID_GROUPE] = {
		X: 10,
		Y: 10,
		W: 150,
		H: 95,
		Title: "Сгруппированные",
		Style: BS_GROUPBOX | BS_CENTER
	};
	aDlg[ID_LABEL] = {
		X: 20,
		Y: 30,
		W: 80,
		H: 13,
		Title: "Введи текст",
		Class: "STATIC"
	};
	aDlg[ID_INP] = {
		X: 20,
		Y: 50,
		W: 120,
		H: 20,
		Title: "какой то текст",
		Class: "EDIT",
		Style: WS_TABSTOP | WS_BORDER
	};
	aDlg[ID_CHECKB] = {
		X: 20,
		Y: 80,
		W: 110,
		H: 16,
		Title: "Чекбокс",
		Style: WS_TABSTOP | BS_AUTOCHECKBOX
	};
	aDlg[ID_BTN_OK] = {
		X: 20,
		Y: 110,
		W: 60,
		H: 23,
		Title: "OK",
		Style: WS_TABSTOP | BS_PUSHBUTTON
	};
	aDlg[ID_CANCEL] = {
		X: 90,
		Y: 110,
		W: 60,
		H: 23,
		Title: "Отмена",
		Style: WS_TABSTOP | BS_PUSHBUTTON
	};

	aDlg[IDTB] = {
		X: 20,
		Y: 140,
		W: 210,
		H: 30,
		Class: "msctls_trackbar32",
		Style: WS_TABSTOP | TBS_AUTOTICKS
	};

	// если флаг бокс-окно
	nResult = CreateDialogBox(aDlg);

	// Функция обратного вызова принимающая события
	function DialogCallback(hWnd, uMsg, wParam, lParam) {
		if(uMsg == 1 /*WM_CREATE*/ ) // если пришло сообщение о создании окна
		{
			aDlg.HWND = hWnd; // Дописываем дексриптор
			CreateDialogWindow(aDlg, 2, hWnd);
			InitDialog(); // Задаёт начальное состояние элементов в окне
			hFocus = aDlg[ID_CHECKB].HWND; // Указываем дескриптор в фокусе
		}

		switch(uMsg) { // сравнение ==
			case 272 /*WM_INITDIALOG*/ :
				InitDialog(); // Задаёт начальное состояние элементов в окне
				break;
			case 276 /*WM_HSCROLL */ : // уведомление прокрутки
				var nLowParam = LoWord(wParam); // младшее слово содержит ID элемента управления
				var nHiwParam = HiWord(wParam); // младшее слово содержит ID элемента управления
				// WScript.Echo("HWND =" + aDlg[IDTB].HWND + "  " + lParam); //  проходит
				switch(lParam) { // если дексриптор равен
					case aDlg[IDTB].HWND: // декскриптору слайдера

						switch(nLowParam) { // уведомление
							case 0: // SB_LINELEFT - клавишами, влево, аналогично для ниже следующих
							case 1: // SB_LINERIGHT
							case 2: // SB_PAGELEFT
							case 3: // SB_PAGERIGHT
								var nPos = AkelPad.SendMessage(aDlg[IDTB].HWND, 1024 /*TBM_GETPOS*/ , 0, 0); // чтение позиции со слайдера
								var sText = nPos + "";
								oSys.Call("User32::SetDlgItemTextW", hWnd, ID_INP, sText);
								break;
							case 4: // SB_THUMBPOSITION - колесом мыши
							case 5: // SB_THUMBTRACK - стрелкой мыши
								// WScript.Echo("nHiwParam = " + nHiwParam); // проходит
								var sText = nHiwParam + "";
								oSys.Call("User32::SetDlgItemTextW", hWnd, ID_INP, sText);
								// AkelPad.Call("Coder::HighLight", 2, "#FFFFFF", "#" + sText + "4E52", 0, 0, 999) // кривой пример изменения цвета выделенного
								// var nPos = SendMessage(lParam, 1024 /*TBM_GETPOS*/, 0, 0);
								// WScript.Echo("nHiwParam = " + AkelPad.SendMessage(aDlg[IDTB].HWND, 1024 /*TBM_GETPOS*/ , 0, 0)); // проходит
								break;
						}

						break;
				}
				break;
			case 273 /*WM_COMMAND*/ :
				var nLowParam = LoWord(wParam); // младшее слово содержит ID элемента управления
				// var nHiwParam = HiWord(wParam); // младшее слово содержит ID элемента управления
				switch(nLowParam) { //сравнение ==
					case ID_BTN_OK: // событие нажатия "ОК", стандартно считываем параметры, чтобы использовать в дальнейшем
						// if (nHiwParam == 0)

						// Блок для чтения из поля ввода
						var nEditLen = 32767; // число символов с запасом для поля ввода
						var lpEdit = AkelPad.MemAlloc((nEditLen + 1) * 2); // Выделяем память и получаем указатель
						oSys.Call("User32::GetDlgItemTextW", hWnd, ID_INP, lpEdit, nEditLen); // Высылает текст поля ввода в указатель
						var sText_input = AkelPad.MemRead(lpEdit, 1 /*DT_UNICODE*/ ); // Читаем с указателя
						AkelPad.MemFree(lpEdit); // Освобождаем память

						var CheckboxState = AkelPad.SendMessage(aDlg[ID_CHECKB].HWND, 240 /*BM_GETCHECK*/ , 0, 0) // получаем состояние чекбокса
						AkelPad.MessageBox(hWnd, 'Чекбокс = ' + CheckboxState + '\n\n Поле ввода: ' + sText_input, 'Результат', 0x40 /*MB_ICONINFORMATION*/ );
						break;
					case ID_CANCEL: // кнопка отмены вызылает окну команду закрытия
						oSys.Call("User32::PostMessageW", hWnd, 16 /*WM_CLOSE*/ , nLowParam, 0);
						break;
						// case ID_CHECKB: // если событие клик на чекбоксе, то есть активно изменить что-либо сразу в окне
						// break;
				}
				break;
			case 16 /*WM_CLOSE*/ : // если событие закрытия окна, то
				oSys.Call("User32::EndDialog", hWnd, wParam);
				break;
			case 2 /*WM_DESTROY*/ : // если событие уничтожения окна, то
				if(nTimerID == 1)
					oSys.Call("User32::PostQuitMessage", 0);
				break;
		}

		return 0;
	}

	function InitDialog() {
		var i;
		// Ставит галочку в CheckBox
		AkelPad.SendMessage(aDlg[ID_CHECKB].HWND, 241 /*BM_SETCHECK*/ , 1 /*BST_CHECKED*/ , 0);

		//TrackBar
		AkelPad.SendMessage(aDlg[IDTB].HWND, 1044 /*TBM_SETTICFREQE*/ , 10, 0);
		AkelPad.SendMessage(aDlg[IDTB].HWND, 1029 /*TBM_SETPOS*/ , 1, 33);

	}

}

// вытаскивает младшее слово из двойного слова
function LoWord(nDwNum) {
	return nDwNum & 0xFFFF;
}

// вытаскивает старшее слово из двойного слова
function HiWord(nDwNum) {
	return(nDwNum >> 16);
}
- пример с регулятором, он же msctls_trackbar32
Хотелось бы сделать скрипт регулирующий цвета подсветки ползунками. Такой плаг я уже делал для Notepad++. Но для него надо опять мои функции конвертировать в js, во первых конвертацию hsb_to_rgb и rgb_to_hsb, во-вторых либо получение текущих ID подсветки, либо перекрасить всё с новыми ID и регулировать их цвет, выбирая из списка.

Posted: Wed Sep 18, 2019 2:13 pm
by AZJIO
Для InsertDateFromCalendar.js -

Code: Select all

if (AkelPad.GetLangId(0 /*LANGID_FULL*/) == 0x0419) //Russian
{
  var sHelp = "	Клавиши быстрого доступа, доступные в календаре:\n" +
              " Left/Right		- предыдущий / следующий день\n" +
              " Up/Down		- предыдущая / следующая неделя\n" +
              " PgUp/PgDn		- предыдущий / следующий месяц\n" +
              " Ctrl+PgUp/Ctrl+PgDn	- предыдущий / следующий год\n" +
              " Home/End		- первый / последний день месяца\n" +
              " Ctrl+Home/Ctrl+End	- первый / последний видимый день\n" +
              " BackSpace		- перейти к сегодняшнему дню\n" +
              "\n" +
              " Shift+Alt+Left/Right	- сдвинуть календарь влево / вправо\n" +
              " Shift+Alt+Up/Down	- сдвинуть календарь вверх / вниз\n" +
              " Shift+Alt+Home/End	- сдвинуть лево/право к краю окна\n" +
              " Shift+Alt+PgUp/PgDn	- сдвинуть вверх / вниз к краю окна\n" +
              " Shift+Alt+C		- центрировать календарь\n" +
              "\n" +
              " +/-			- Добавить/удалить месяц из календ.\n" +
              " O (S)			- Опции\n" +
              "\n" +
              " Enter\n" +
              " Shift+Enter\n" +
              " Ctrl+Enter\n" +
              " Ctrl+Shift+Enter		- вставить дату/время (см опции)";

  var sHelpDF = " d	- день месяца без предшеств. нуля\n" +
                " dd	- день месяца с предшеств. нулём\n" +
                " ddd	- день недели, три буквы аббревиатуры\n" +
                " dddd	- день недели, полное название\n" +
                " M	- месяц без предшеств. нуля\n" +
                " MM	- месяц с предшеств. нулём\n" +
                " MMM	- месяц, три буквы аббревиатуры\n" +
                " MMMM	- месяц, полное название\n" +
                " y	- год, две цифры без предшеств. нулей\n" +
                " yy	- год, две цифры с предшеств. нулем\n" +
                " yyyy	- год, четыре цифры";

  var sHelpTF = " h	- часы без предшеств. нуля (12)\n" +
                " hh	- час с предшествующ. нулём (12)\n" +
                " H	- часы без предшеств. нуля (24)\n" +
                " HH	- час с предшеств. нулём (24)\n" +
                " m	- минуты без предшеств. нуля\n" +
                " mm	- минуты с предшеств. нулём\n" +
                " s	- секунды без предшеств. нуля\n" +
                " ss	- секунды с предшеств. нулём\n" +
                " t	- метка времени с 1 символом, (A/P)\n" +
                " tt	- метка времени с 2 символ., (AM/PM)";

  var sTxtOK       = "OK";
  var sTxtOptions  = "Опции";
  var sTxtHelp     = "Справка";
  var sTxtSettings = "Опции";
  var sTxtFormat   = "Формат вставки даты/времени";
  var sTxtSystem   = "Системный";
  var sTxtLongDate = "Длинная дата";
  var sTxtDateForm = "Дата";
  var sTxtTimeForm = "Время";
  var sTxtKeyAssig = "Вставляемое - горячая клавиша";
  var sTxtDate     = "Дата";
  var sTxtTime     = "Время";
  var sTxtOkBut    = "Кнопку OK";
  var sTxtCalendar = "Календарь (F1)";
  var sTxtMonths   = "Количество видимых месяцев";
  var sTxtColor1   = "Фон календаря";
  var sTxtColor2   = "Текст дней месяца";
  var sTxtColor3   = "Фон заголовка месяца";
  var sTxtColor4   = "Текст зазаголовка месяца";
  var sTxtColor5   = "Начальные и конечные дни";
  var sTxtReset    = "С\n" +
                     "б\n" +
                     "р\n" +
                     "о\n" +
                     "с";
}

Posted: Sat Sep 21, 2019 7:10 pm
by Infocatcher
jsBeautifier.js v. 0.3.0 - 2019-09-21

[*] Updated code from jsbeautifier.org/beautifier.io.
[*] All tests was moved into Include/jsBeautifier_tests.js to reduce file size (note: some tests will failed, see #11).
[*] Better track slow operations: restore initial selection before insert beautified code, temporarily set read-only flag to prevent changes.
[x] Switch to "insert to new document", if initial document was closed.
[+] Added ability to use Log plugin: -action=4.


[*] Обновлен код из jsbeautifier.org/beautifier.io.
[*] Все тесты перемещены в Include/jsBeautifier_tests.js для уменьшения размера файла (примечание: часть тестов не проходит, см. #11).
[*] Улучшена обработка медленных операций: добавлено восстановление выделения перед вставкой улучшенного кода, временно устанавливается флаг «только чтение» для предотвращения изменений.
[x] Используется вставка в новый документ, если изначальный документ был закрыт.
[+] Добавлена возможность использовать плагин Log plugin: -action=4.

Posted: Sun Sep 22, 2019 7:25 am
by yozhic
KDJ & All
У Вас работает скрипт FontDialogMonospace.js? Шрифт меняет? Раньше он замечательно работал, но я давно им не пользовался, а сегодня запустил и никакого эффекта не увидел: шрифт не меняется. Спрашиваю, чтобы понять, работает ли у других. Если да, то буду анализировать в чём у меня может быть проблема.

Posted: Sun Sep 22, 2019 9:13 am
by opk44
yozhic wrote:KDJ & All
У Вас работает скрипт FontDialogMonospace.js? Шрифт меняет? Раньше он замечательно работал, но я давно им не пользовался, а сегодня запустил и никакого эффекта не увидел: шрифт не меняется...
А вы точно названием не ошиблись? Данный скрипт только ограничивает перечень доступных в диалоге выбора шрифтов моноширинными. Ничего он не меняет и не должен.
// Remark:
// It works similarly to Command(4201) - Font dialog, but displays only monospace fonts.
// RU: Работает аналогично Command(4201) - вызов диалога выбора шрифта, но отображаются только моноширинные шрифты.

Posted: Sun Sep 22, 2019 9:32 am
by yozhic
opk44
opk44 wrote:Ничего он не меняет и не должен.
Так вот же ж, в 25й строке

Code: Select all

AkelPad.SystemFunction().Call("User32::SendMessageW", hMainWnd, 1234 /*AKD_SETFONT*/, 0, lpLOGFONT);
В списке только моноширинные, это да, но при выборе шрифта из этого списка и нажатии OK этот шрифт должен применяться к окну AkelPad. Иными словами, скрипт должен работать так же, как и родной диалог выбора шрифта, только с другим списком. Раньше так и было: запускаешь скрипт, выбираешь моноширинный шрифт, жмёшь OK – шрифт применился. А теперь не применяется. Из родного акелевского диалога шрифт применяется, а из FontDialogMonospace.js – нет. Я попробовал функцию в этой 25й строке (см. выше) поменять на AkelPad.SendMessage – ноль реакции. Значит надо дальше разбираться. Вот и спрашиваю у всех ли так, чтоб время даром не терять.

Posted: Sun Sep 22, 2019 10:38 am
by AZJIO
yozhic wrote:шрифт не меняется.
в 4.9.8 меняется, а в 4.9.9 не меняется

попробуй так:

Code: Select all

if (AkelPad.Include("ChooseFont_function.js"))
{
  var hMainWnd = AkelPad.GetMainWnd();
  var hEditWnd = AkelPad.GetEditWnd();
  var aFontList;

  if (hEditWnd)
  {
    if (aFontList = ChooseFont(hMainWnd, 4, hEditWnd, 0, 1, 3))
    {
      AkelPad.Font(aFontList[0], aFontList[1], aFontList[2]);
    }
  }
}
я изменил возвращаемое значение на массив вместо структуры (параметр 3), а так как в скрипте FontSwitch.js у меня работало переключение, то я взял от туда команду AkelPad.Font и указал элементы массива. Проверил на 4.9.9 работает.

Posted: Sun Sep 22, 2019 11:21 am
by opk44
AZJIO wrote:в 4.9.8 меняется, а в 4.9.9 не меняется
Подтверждаю. Если ещё точнее, то начиная с Commit[r4339] (https://sourceforge.net/p/akelpad/codesvn/4339/)
2017-06-03
Added: AKD_SETFONT can be used also for non-frames edit windows.

Posted: Sun Sep 22, 2019 12:44 pm
by yozhic
AZJIO, opk44
Спасибо. У меня на Win 8.1x64 c AP 4.9.9[r4408] частично не работает функция AkelPad.Font. Точнее: тестовый скрипт с одной единственной строкой

Code: Select all

AkelPad.Font("Courier", 4, 10)
(из примера в справке к функции) меняет размер и начертание, но не меняет гарнитуру.

Posted: Sun Sep 22, 2019 5:33 pm
by opk44
yozhic wrote:...меняет размер и начертание, но не меняет гарнитуру.
Попробуйте, для начала, с каким-нибудь TrueType шрифтом (хотя бы "Courier New"):

Code: Select all

AkelPad.Font("Courier New", 4, 17);

Posted: Sun Sep 22, 2019 7:33 pm
by yozhic
opk44
Пробовал сразу. И Consolas, и Courier New, и Lucida Console, и Input Mono, и Fira, с пробелами в имени и без, ttf и otf – не меняет. Из встроенного диалога всё срабатывает, а из скрипта нет.