AkelPad Forum Index AkelPad
Support forum
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Scripts discussion (3)
Goto page Previous  1, 2, 3 ... 5, 6, 7 ... 22, 23, 24  Next
 
Post new topic   Reply to topic    AkelPad Forum Index -> Plugins
View previous topic :: View next topic  
Author Message
San_dr



Joined: 06 Dec 2010
Posts: 159
Location: г.Харьков, Русь

PostPosted: Thu May 22, 2014 4:00 pm    Post subject: Reply with quote

KDJ. спасибо, подошло к месту отлично.
уже сам "допетрил", что для аналогичного кода, но варианта "свернуть" такой вид:

Code:
-"Панели: Основная, восстановить" Call("Scripts::Main", 1, "EvalCmd.js", `AkelPad.Call("Scripts::Main", 1, "ScreenView.js", '-View="DefaultFS" -FullScreen=0'); AkelPad.SystemFunction().Call("User32::ShowWindow", AkelPad.GetMainWnd(), 1 /*SW_RESTORE*/);`)


-------------------
AkelPadRestart.js у меня "7" (x64) работает
Back to top
View user's profile Send private message
Andrey_A_A



Joined: 03 Jun 2010
Posts: 578
Location: Сочи, Хоста

PostPosted: Thu May 22, 2014 8:35 pm    Post subject: Reply with quote

KDJ wrote:
What versions of Windows and AkelPad are you using (32/64 bit)?


Win 7 x64 , AkelPad 32, вкладок всегда открыто около 50-70

Поставил в вашем скрипте паузу и заработало (то о чём я и говорил)
Code:

 {
  WScript.Sleep(2000);
  RunAkelPad(WScript.Arguments(0), WScript.Arguments(1), parseInt(WScript.Arguments(2)), parseInt(WScript.Arguments(3)));
}


Но всё равно вкладки пропадают, и работает не стабильно.
Открыто 50 вкладок, после работы скрипта 12, и то в каком-то странном порядке - начальные 4 и конечные 8, середина пропала.
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Andrey_A_A



Joined: 03 Jun 2010
Posts: 578
Location: Сочи, Хоста

PostPosted: Fri May 23, 2014 11:58 am    Post subject: Reply with quote

Instructor, в Scripts-Rus.txt как всегда не хватает примеров для vbs, к примеру ваш пример перевожу на vbs - и он выдаёт ошибки в WindowSubClass... смотрю справку, а примера нет(((

Code:
With AkelPad
  hMainWnd=.GetMainWnd()
  Set oSys=.SystemFunction()
  If hScript=.ScriptHandle(WScript.ScriptName, 3) Or .ScriptHandle(hScript, 13) Then
    Call .ScriptHandle(hScript, 33)
  Else
    If .WindowSubClass(1, MainCallback, 16) Then
      Call .ScriptNoMutex(&H3)
      Call .WindowGetMessage()
      Call .WindowUnsubClass(1)
    End If
  End If
End With

Function MainCallback(hWnd, uMsg, wParam, lParam)
  If uMsg = 16 Then
    AkelPad.Exec("Notepad.exe")
  End If
End Function


Примеры других новых и части старых функций на vbs тоже нет.
Back to top
View user's profile Send private message Send e-mail Visit poster's website
KDJ



Joined: 06 Mar 2010
Posts: 1394
Location: Poland

PostPosted: Fri May 23, 2014 3:49 pm    Post subject: Reply with quote

Andrey_A_A
Code:
...
  Else
    If .WindowSubClass(1, GetRef("MainCallback"), 16) Then
      Call .ScriptNoMutex(&H3)
...
Back to top
View user's profile Send private message
Egor



Joined: 26 Nov 2011
Posts: 30

PostPosted: Fri May 23, 2014 8:42 pm    Post subject: Reply with quote

А у меня вопрос по скрипту ActiveColumnSwitch.js (код) — он включает, отключает показ вертикальной линии. Всё, конечно, круто, но только у меня он не синхронизируется с соответствующей галкой в окне настроек. То есть если, например, сделать для этого скрипта кнопку на тулбаре и нажать её (кнопка останется в нажатом состоянии), то вертикальная линия появится, но если теперь зайти в окно настроек, то галка "Показывать активный столбец" всё равно не будет отмечена — это так и должно быть?

И еще вопрос: как сделать соответствующий пункт меню (не кнопка на тулбаре), я пробовал добавить команду аналогичную кнопке в настройки плагина ContextMenu, пункт меню работает, но не меняется галочка около него. Ну то есть, я хочу, чтобы около пункта меню была галка, отображающая текущее состояние, как это происходит с кнопкой тулбара (кнопка нажата — линия видна, кнопка отжата — линия скрыта).
Back to top
View user's profile Send private message Send e-mail
Andrey_A_A



Joined: 03 Jun 2010
Posts: 578
Location: Сочи, Хоста

PostPosted: Sat May 24, 2014 5:05 am    Post subject: Reply with quote

KDJ, спасибо!
Back to top
View user's profile Send private message Send e-mail Visit poster's website
KDJ



Joined: 06 Mar 2010
Posts: 1394
Location: Poland

PostPosted: Sat May 24, 2014 2:31 pm    Post subject: Reply with quote

San_dr wrote:
Code:
-"Панели: Основная, восстановить" Call("Scripts::Main", 1, "EvalCmd.js", `AkelPad.Call("Scripts::Main", 1, "ScreenView.js", '-View="DefaultFS" -FullScreen=0'); AkelPad.SystemFunction().Call("User32::ShowWindow", AkelPad.GetMainWnd(), 1 /*SW_RESTORE*/);`)

For accuracy:
SW_RESTORE=9
SW_SHOWNORMAL=1
It seems that they works similarly.
Description is here: http://msdn.microsoft.com/en-us/library/windows/desktop/ms633548%28v=vs.85%29.aspx

Egor wrote:
А у меня вопрос по скрипту ActiveColumnSwitch.js (код)...

You should call the script with -Local=false or without this parameter.

Egor wrote:
...как сделать соответствующий пункт меню (не кнопка на тулбаре)...

This modified script works on toolbar and in menu: ActiveColumnSwitch_modified.js
Code:
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=5727#5727
// Version v1.1
//
//
//// Active column show/hide.
//
// How to use:
// Add button to Toolbar plugin:
//
// -"Active column" Call("Scripts::Main", 1, "ActiveColumnSwitch.js", `"%m" "%i"`) Icon(0)
// -"Local active column" Call("Scripts::Main", 1, "ActiveColumnSwitch.js", `"%m" "%i" -Local=true`)
//
/// Включить/выключить активный столбец.
//
// Как использовать:
// Добавляем кнопку в Toolbar плагин:
//
// -"Активный столбец" Call("Scripts::Main", 1, "ActiveColumnSwitch.js", `"%m" "%i"`) Icon(0)
// -"Активный столбец локально" Call("Scripts::Main", 1, "ActiveColumnSwitch.js", `"%m" "%i" -Local=true`)


//Arguments
var hToolbarHandle=0;
var nToolbarItemID=0;
if (WScript.Arguments.length >= 2)
{
  hToolbarHandle=parseInt(WScript.Arguments(0));
  nToolbarItemID=parseInt(WScript.Arguments(1));
}
var bLocal=AkelPad.GetArgValue("Local", false);

//Variables
var hMainWnd=AkelPad.GetMainWnd();
var hWndEdit=AkelPad.GetEditWnd();
var dwOptions;
var bCheckButton=true;

if (hWndEdit)
{
  if (bLocal)
  {
    dwOptions=AkelPad.SendMessage(hWndEdit, 3227 /*AEM_GETOPTIONS*/, 0, 0);
    if (dwOptions & 0x400 /*AECO_ACTIVECOLUMN*/)
    {
      AkelPad.SendMessage(hWndEdit, 3228 /*AEM_SETOPTIONS*/, 4 /*AECOOP_XOR*/, 0x400 /*AECO_ACTIVECOLUMN*/);
      bCheckButton=false;
    }
    else AkelPad.SendMessage(hWndEdit, 3228 /*AEM_SETOPTIONS*/, 2 /*AECOOP_OR*/, 0x400 /*AECO_ACTIVECOLUMN*/);
  }
  else
  {
    dwOptions=AkelPad.SendMessage(hMainWnd, 1223 /*AKD_GETFRAMEINFO*/, 69 /*FI_CARETOPTIONS*/, 0);
    if (dwOptions & 0x2 /*CO_CARETVERTLINE*/)
    {
      dwOptions&=~0x2 /*CO_CARETVERTLINE*/;
      bCheckButton=false;
    }
    else dwOptions|=0x2 /*CO_CARETVERTLINE*/;

    AkelPad.SetFrameInfo(0, 17 /*FIS_CARETOPTIONS*/, dwOptions);
  }

  if (hToolbarHandle && nToolbarItemID)
//    AkelPad.SendMessage(hToolbarHandle, 1026 /*TB_CHECKBUTTON*/, nToolbarItemID, bCheckButton);
  {
    if (AkelPad.SystemFunction().Call("User32::IsMenu", hToolbarHandle))
      AkelPad.SystemFunction().Call("User32::CheckMenuItem", hToolbarHandle, nToolbarItemID, bCheckButton ? 8 /*MF_BYCOMMAND|MF_CHECKED*/: 0 /*MF_BYCOMMAND|MF_UNCHECKED*/);
    else
      AkelPad.SendMessage(hToolbarHandle, 1026 /*TB_CHECKBUTTON*/, nToolbarItemID, bCheckButton);
  }
}
.
You can also use the script: CaretOptionsSwitch.js.
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5396

PostPosted: Sat May 24, 2014 2:50 pm    Post subject: Reply with quote

KDJ
Updated.
Back to top
View user's profile Send private message Send e-mail
KDJ



Joined: 06 Mar 2010
Posts: 1394
Location: Poland

PostPosted: Sat May 24, 2014 7:06 pm    Post subject: Reply with quote

AkelPadRestart.js
Fixed: doesn't work in AkelPad x86 on 64-bit Windows.
Added: support for Exit plugin.

Andrey_A_A wrote:
Открыто 50 вкладок, после работы скрипта 12, и то в каком-то странном порядке - начальные 4 и конечные 8, середина пропала.

It seems to me that the error is in Sessions plugin.
Back to top
View user's profile Send private message
Egor



Joined: 26 Nov 2011
Posts: 30

PostPosted: Mon May 26, 2014 1:51 pm    Post subject: Reply with quote

KDJ wrote:
You should call the script with -Local=false or without this parameter.

То есть

Code:
# команда [1]
-"Активный столбец" Call("Scripts::Main", 1, "ActiveColumnSwitch.js", `"%m" "%i" -Local=false`)

# команда [2]
-"Активный столбец локально" Call("Scripts::Main", 1, "ActiveColumnSwitch.js", `"%m" "%i" -Local=true`)

команда [1] : значит вкл/выкл вертикальную линию с установкой соотв-го чекбокса в настройках, а команда [2] : без внесения изменений в настройки, — так что ли?

Я просто не сразу понял, что значит "локально"/"глобально", в описании скрипта это внятно не объяснено, и я сначала подумал, что "локально" — это значит включить линию только для текущего окна AkelPad, а "глобально" — для всех открытых окон сразу. Дело в том, что сначала я запустил этот скрипт на AkelPad версии 470 (так как он у меня настроен и я пользуюсь им, апдейтится что-то лениво), и там "глобальный" вариант вообще не заработал: там кнопка нажимается только 1 раз, при этом ничего не происходит — ни линия не появляется, ни галка в настройках не ставится, а повторное нажатие кнопки не меняет состояние кнопки, она так и остаётся в нажатом виде. Потом я проверил "глобальный" вариант на AkelPad 488, — там он заработал нормально, но в тот момент я почему-то решил, что "локальность" имеет отношение к режиму окон, а у меня AkelPad всё время в режиме SDI (одно окно), вот я и подумал, что "глобальность" глючит, возможно, потому, что она предназначена только для многооконных режимов, и только потом я понял, что глюки, наверное, из-за старой версии AkelPad.

Тогда ситуация приобретает другой ракурс: использование скрипта в многооконных режимах. Состояние кнопки должно синхронизироваться с состоянием вертикальной линии активного окна при перещелкивании вкладок, то есть при переходе в окно, где вертикальной линии нет, кнопка должна автоматически принимать "отжатый" вид, а при переходе в окно, где линия есть — "нажатый". А то как-то тупо выглядит, когда кнопка во всех вкладках в одном состоянии.
Back to top
View user's profile Send private message Send e-mail
DV



Joined: 16 Nov 2006
Posts: 851
Location: Kyiv, Ukraine

PostPosted: Tue May 27, 2014 8:15 am    Post subject: Reply with quote

Есть ли в скриптах возможность имитировать нажатия клавиш в окне редактирования? (Смотрел также на плагины Hotkeys и Macros - не поддерживают ли они такую возможность.)
Сейчас меня интересует имитация последовательности "End Enter", создающая новую строку независимо от положения каретки в текущей строке. Неужели для подобной задачи придётся использовать AkelEdit API ?
Back to top
View user's profile Send private message
KDJ



Joined: 06 Mar 2010
Posts: 1394
Location: Poland

PostPosted: Tue May 27, 2014 11:04 am    Post subject: Reply with quote

DV
Maybe like this:
Code:
new ActiveXObject("WScript.shell").SendKeys("{END}{ENTER}");
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5396

PostPosted: Tue May 27, 2014 11:18 am    Post subject: Reply with quote

DV
Or http://akelpad.sourceforge.net/forum/viewtopic.php?t=1610
Back to top
View user's profile Send private message Send e-mail
opk44



Joined: 16 Jan 2010
Posts: 344

PostPosted: Tue May 27, 2014 2:57 pm    Post subject: Reply with quote

DV
1. Подходом, лаконично описанным KDJ, я руководствовался при попытке создания скрипта-переводчика макросов в код для Scripts-плагина
Macro2SendKeys.vbs. (Правда я его так с тех пор до ума и не довел).
2. "End Enter" плохо подходит при режиме с включенным переносом строк. Наверное лучше использовать "Ctrl+Down" + "Left" + "Enter" (но тоже не идеально, т.к. очевидна проблема с последней строкой в файле)
Пример шаблона сгенерированного скриптом Macro2SendKeys.vbs:

Code:
Size: 64 bytes (8 keys)
----------------------------------------
VBScript template
----------------------------------------
Dim WshShell
  Set WshShell = CreateObject("WScript.Shell")
  WshShell.SendKeys "^{DOWN}"
  WshShell.SendKeys "{LEFT}"
  WshShell.SendKeys "{ENTER}"
----------------------------------------
JScript template
----------------------------------------
  var WshShell = new ActiveXObject("WScript.Shell");
  WshShell.SendKeys ("^{DOWN}");
  WshShell.SendKeys ("{LEFT}");
  WshShell.SendKeys ("{ENTER}");
----------------------------------------
Back to top
View user's profile Send private message
FeyFre



Joined: 07 Aug 2007
Posts: 2054
Location: Vinnitsa, Ukraine

PostPosted: Tue May 27, 2014 3:44 pm    Post subject: Reply with quote

Только только сегодня на RSDN отвечал: единственный легальный способ про имитировать ввод(ну кроме драйверов) это функция SendInput.
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
Display posts from previous:   
Post new topic   Reply to topic    AkelPad Forum Index -> Plugins All times are GMT
Goto page Previous  1, 2, 3 ... 5, 6, 7 ... 22, 23, 24  Next
Page 6 of 24

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


SourceForge.net Logo Powered by phpBB © 2001, 2005 phpBB Group