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 (2)
Goto page Previous  1, 2, 3 ... 92, 93, 94, 95, 96  Next
 
Post new topic   This topic is locked: you cannot edit posts or make replies.    AkelPad Forum Index -> Plugins
View previous topic :: View next topic  
Author Message
San_dr



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

PostPosted: Sat Apr 05, 2014 12:52 pm    Post subject: ScreenView.js Reply with quote

KDJ, Можно ли в плагине ScreenView.js ввести окно выбора и чекбокс влючения для изменения оконного режима - SDI-MDI-PMDI ? (как сделано для Font, ColorTheme, ColorCoderTheme)

Использую так-же плагин LineBoardRClickPanel.js Совместное использование позволяет создавать очень гибкие еонфигурации, например такую, когда для текста отводится все место, остается только панель нумерации строк и возможность вызвать два контекстных меню - меню поля редактирования и меню, вызываемое скриптом LineBoardRClickPanel.js. Здесь нужен режим PMDI - иначе есть риск остаться без всяких меню закрыв последнюю вкладку. А вот, например режим совместной прокрутки двух документов в одном окне для визуального сравнения ( Call("Scripts::Main", 1, "tileTabs.js")) - требует режим MDI... это я навскидку назвал пару примеров, когда нужно менять режим работы окна, есть и другие.
Back to top
View user's profile Send private message
Skif_off



Joined: 20 Oct 2013
Posts: 420

PostPosted: Sat Apr 05, 2014 1:10 pm    Post subject: Reply with quote

San_dr wrote:
чекбокс влючения для изменения оконного режима - SDI-MDI-PMDI?

Для этого, вероятно, понадобится перезапуск AkelPad.
Back to top
View user's profile Send private message
San_dr



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

PostPosted: Sat Apr 05, 2014 1:20 pm    Post subject: Reply with quote

Skif_off wrote:

Для этого, вероятно, понадобится перезапуск AkelPad.


Скорее всего, но не думаю, чтоб это было проблемой, просто надо, чтобы возле чекбокса была предупреждающая надпись о необходимости рестарта.,
Back to top
View user's profile Send private message
Infocatcher



Joined: 06 Aug 2007
Posts: 1639

PostPosted: Sat Apr 05, 2014 6:56 pm    Post subject: Reply with quote

Небольшое дополнение.
Версии AkelPad'а и Scripts, напоминаю, по-прежнему тестовые.
У меня еще и на стареньком VersionInfo.js периодически падает.
Только этот под отладкой ни в какую не падает, тогда как tileTabs.js стабильно падает как раз при подключении отладчика (а в нормальных условиях – только периодически).
Если сделать «Run To Cursor» к концу файла, то падает, но ничего интересного не показывает. Даже переменные все почему-то в undefined стоят – кроме функций и объектов AkelPad, WScript и Constants.
Back to top
View user's profile Send private message Visit poster's website
KDJ



Joined: 06 Mar 2010
Posts: 1414
Location: Poland

PostPosted: Sat Apr 05, 2014 8:26 pm    Post subject: Re: ScreenView.js Reply with quote

San_dr wrote:
Можно ли в плагине ScreenView.js ввести окно выбора и чекбокс влючения для изменения оконного режима - SDI-MDI-PMDI ?

It seems to me that the script ScreenView.js is no right place for the function switching window mode.
For fast switching, you can assign shortcut keys or put icons on the toolbar and use the script restart.js.
Example for toolbar:
Code:
"SDI" Call("Scripts::Main", 1, "EvalCmd.js", `if (AkelPad.IsMDI() != 0) {AkelPad.Command(4261); AkelPad.Call("Scripts::Main", 1, "restart.js");}`)
"MDI" Call("Scripts::Main", 1, "EvalCmd.js", `if (AkelPad.IsMDI() != 1) {AkelPad.Command(4262); AkelPad.Call("Scripts::Main", 1, "restart.js");}`)
"PMDI" Call("Scripts::Main", 1, "EvalCmd.js", `if (AkelPad.IsMDI() != 2) {AkelPad.Command(4263); AkelPad.Call("Scripts::Main", 1, "restart.js");}`)
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5454

PostPosted: Sun Apr 06, 2014 6:24 am    Post subject: Reply with quote

Infocatcher wrote:
Я даже на всякий случай проверил без
Даже? Это первое, что надо было сделать Smile

У тестовых файлов отличающаяся архитектура, поэтому не используйте их в рабочей папке: 4.8.8 Dev + Scripts плагин.

Добрался до Win7 падения действительно есть на winMergeTabs.js и tileTabs.js, где используется "AkelPad.WindowSubClass(hMainWnd". Стоило поменять на "AkelPad.WindowSubClass(1 /*WSC_MAINPROC*/", как падений больше не было.
Back to top
View user's profile Send private message Send e-mail
San_dr



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

PostPosted: Sun Apr 06, 2014 8:05 am    Post subject: Reply with quote

KDJ, помоги, не хватает ума - как мне слить в одной кнопке или пункте меню такие действия (если это возможно):

Call("Scripts::Main", 1, "ScreenView.js", '-View="Default" -FullScreen=0') + Call("Scripts::Main", 1, "EvalCmd.js", `if (AkelPad.IsMDI() != 1) {AkelPad.Command(4262); AkelPad.Call("Scripts::Main", 1, "restart.js");}`)
Back to top
View user's profile Send private message
KDJ



Joined: 06 Mar 2010
Posts: 1414
Location: Poland

PostPosted: Sun Apr 06, 2014 10:04 am    Post subject: Reply with quote

San_dr
Code:
"MDI" Call("Scripts::Main", 1, "EvalCmd.js", `AkelPad.Call("Scripts::Main", 1, "ScreenView.js", '-View="Default" -FullScreen=0'); if (AkelPad.IsMDI() != 1) {AkelPad.Command(4262); AkelPad.Call("Scripts::Main", 1, "restart.js");}`)
Back to top
View user's profile Send private message
San_dr



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

PostPosted: Sun Apr 06, 2014 10:51 am    Post subject: Reply with quote

KDJ wrote:
Code:
"MDI" Call("Scripts::Main", 1, "EvalCmd.js", `AkelPad.Call("Scripts::Main", 1, "ScreenView.js", '-View="Default" -FullScreen=0'); if (AkelPad.IsMDI() != 1) {AkelPad.Command(4262); AkelPad.Call("Scripts::Main", 1, "restart.js");}`)


Dziękujemy! Udało się.
Back to top
View user's profile Send private message
Infocatcher



Joined: 06 Aug 2007
Posts: 1639

PostPosted: Sun Apr 06, 2014 12:55 pm    Post subject: Reply with quote

Instructor wrote:
Infocatcher wrote:
Я даже на всякий случай проверил без
Даже? Это первое, что надо было сделать Smile
Ммм... а, возможно, и нет.
Я снова убрал autoSaveSession.js из автозагрузки (пока что на старых версиях), так пока что tileTabs.js падает только при отладке. Во всяком случае, выходит, что с autoSaveSession.js частота падений выше.

Instructor wrote:
У тестовых файлов отличающаяся архитектура, поэтому не используйте их в рабочей папке: 4.8.8 Dev + Scripts плагин.
Хм, с autoSaveSession.js уже не проверить.
Под отладкой tileTabs.js по-прежнему падает, без отладки пока ни разу не упал.

А нельзя ли в oSys.RegisterCallback() проверять тип первого аргумента, чтобы все старые скрипты по-прежнему работали?
Или как можно из самого скрипта проверить, не запущен ли он на старой версии?

Upd:
Более того, если в autoSaveSession.js закомментировать собственно сохранение:
Code:
//AkelPad.Call("Sessions::Main", 2, sessionName);
, то падать продолжает.

Даже вот такого достаточно в автозагрузке, чтобы увеличить частоту падений: autoSaveSession-test.js
Code:
var isMDI = AkelPad.IsMDI();
if(!isMDI) // We silently ignore SDI mode to allow use the same settings in any mode!
   WScript.Quit();

var hMainWnd = AkelPad.GetMainWnd();
var oSys = AkelPad.SystemFunction();

var hScript = AkelPad.ScriptHandle(WScript.ScriptName, 3 /*SH_FINDSCRIPT*/);
if(hScript && AkelPad.ScriptHandle(hScript, 13 /*SH_GETMESSAGELOOP*/)) {
   // Script is running, second call close it
   AkelPad.ScriptHandle(hScript, 33 /*SH_CLOSESCRIPT*/);
   WScript.Quit();
}

if(hMainWnd) {
   if(
      AkelPad.WindowSubClass(
         1 /*WSC_MAINPROC*/,
         mainCallback,
         0x4E /*WM_NOTIFY*/,
         0x416 /*AKDN_FRAME_ACTIVATE*/,
         0x418 /*AKDN_FRAME_DESTROY*/
         //0x436 /*AKDN_OPENDOCUMENT_FINISH*/
         //0x406 /*AKDN_MAIN_ONFINISH*/
      )
   ) {
      if(
         isMDI != 1 /*WMD_MDI*/
         || AkelPad.WindowSubClass(
            3 /*WSC_FRAMEPROC*/,
            mainCallback,
            0x4E /*WM_NOTIFY*/
         )
      ) {
         AkelPad.ScriptNoMutex(); // Allow other scripts running
         AkelPad.WindowGetMessage(); // Message loop

         AkelPad.WindowUnsubClass(1 /*WSC_MAINPROC*/);
         AkelPad.WindowUnsubClass(3 /*WSC_FRAMEPROC*/);
      }
      else {
         AkelPad.WindowUnsubClass(1 /*WSC_MAINPROC*/);
         AkelPad.MessageBox(hMainWnd, "AkelPad.WindowSubClass(WSC_FRAMEPROC) failed!", WScript.ScriptName, 16 /*MB_ICONERROR*/);
      }
   }
   else {
      AkelPad.MessageBox(hMainWnd, "AkelPad.WindowSubClass(WSC_MAINPROC) failed!", WScript.ScriptName, 16 /*MB_ICONERROR*/);
   }
}

function mainCallback(hWnd, uMsg, wParam, lParam) {
}

Даже с
Code:
      AkelPad.WindowSubClass(
         1 /*WSC_MAINPROC*/,
         mainCallback,
         0x4E /*WM_NOTIFY*/
      )
по-прежнему падает.


Upd #2:
Вообще, логично предположить, что и скрипт в автозагрузке, и отладка влияют на «производительность» обработки сообщений. То есть что-то начинает работать медленнее, а другое что-то некорректно ожидает окончания предыдущей операции. Confused
Back to top
View user's profile Send private message Visit poster's website
Infocatcher



Joined: 06 Aug 2007
Posts: 1639

PostPosted: Sun Apr 06, 2014 3:07 pm    Post subject: Reply with quote

Для проверки подключил AutoScript-Sample1.js, так и с ним tileTabs.js падает, хотя и, кажется, пореже...
Причем с последними тестовыми версиями AkelPad'а и Scripts тоже воспроизводится.

P.S. Использовались tileTabs-test.js + timer.js
Back to top
View user's profile Send private message Visit poster's website
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5454

PostPosted: Sun Apr 06, 2014 4:09 pm    Post subject: Reply with quote

Infocatcher wrote:
Все, кроме вот этого
Code:
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{51973C2F-CB0C-11D0-B5C9-00A0244A0E7A}]
@="IProcessDebugManager"

у меня в наличии. Confused
Если попробовать добавить?

Quote:
А нельзя ли в oSys.RegisterCallback() проверять тип первого аргумента, чтобы все старые скрипты по-прежнему работали?
Code:
try
{
  oSys.RegisterCallback(timerProc);
}
catch ()
{
  oSys.RegisterCallback("timerProc");
}


Quote:
Причем с последними тестовыми версиями AkelPad'а и Scripts тоже воспроизводится.
Как будет возможность, проверю на Win7.
Back to top
View user's profile Send private message Send e-mail
Infocatcher



Joined: 06 Aug 2007
Posts: 1639

PostPosted: Sun Apr 06, 2014 5:59 pm    Post subject: Reply with quote

Instructor wrote:
Infocatcher wrote:
Все, кроме вот этого
Code:
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{51973C2F-CB0C-11D0-B5C9-00A0244A0E7A}]
@="IProcessDebugManager"

у меня в наличии. Confused
Если попробовать добавить?
Добавил.
После перезагрузки (пока не перезагрузился, изменений не было) при запуске AkelPad'а стало выводиться вот такое сообщение:
Quote:
Microsoft Visual Studio Debugger
---------------------------
An exception occurred. Process will be terminated. (Exception address is 00413E6C)
---------------------------
ОК
Выводит его
"C:\Program Files\Common Files\Microsoft Shared\VS7Debug\VS7JIT.EXE" -Embedding
И через какое-то время (секунд через 50) вылезает еще вот такое:
Quote:
Just-In-Time Debugging
---------------------------
An exception 'Runtime Error' has occurred in Script.

However, no debuggers are registered that can debug this exception. Unable to JIT debug.
---------------------------
ОК


Кстати, без этого ключа в реестре еще и AkelPad при запуске падал.
Если убрать галочку «с начала», то, вроде, вообще ничего визуально не меняется.
Если запускать с правами администратора, то результат точно такой же, только окошко с сообщением об ошибке уже не может перехватить фокус.
Back to top
View user's profile Send private message Visit poster's website
KDJ



Joined: 06 Mar 2010
Posts: 1414
Location: Poland

PostPosted: Sun Apr 06, 2014 7:59 pm    Post subject: Reply with quote

FileAndStream_functions.js
Added ability to call IsSupportStreams() function without a parameter or with empty string, for checking the current drive.
Back to top
View user's profile Send private message
Infocatcher



Joined: 06 Aug 2007
Posts: 1639

PostPosted: Mon Apr 07, 2014 5:20 am    Post subject: Reply with quote

Instructor
А на работе уже Visual Studio 2005 на борту, при падении предлагает отладку. Выдает вот такое.
Code:
Unhandled exception at 0x003e8b4c in AkelPad.exe: 0xC0000005: Access violation reading location 0x00000182.

No symbols are loaded for any call stack frame. The source code cannot be displayed.

003E8B10  call        003E2C6A
003E8B15  add         esp,14h
003E8B18  mov         dword ptr [edi],eax
003E8B1A  jmp         003E8B20
003E8B1C  and         dword ptr [esi+28h],0
003E8B20  xor         eax,eax
003E8B22  inc         eax 
003E8B23  jmp         003E8B2A
003E8B25  and         dword ptr [edi],0
003E8B28  xor         eax,eax
003E8B2A  pop         edi 
003E8B2B  pop         esi 
003E8B2C  pop         ebx 
003E8B2D  pop         ebp 
003E8B2E  ret         18h 
003E8B31  push        ebp 
003E8B32  mov         ebp,esp
003E8B34  push        esi 
003E8B35  mov         esi,dword ptr [ebp+8]
003E8B38  xor         eax,eax
003E8B3A  test        esi,esi
003E8B3C  push        edi 
003E8B3D  mov         edi,dword ptr [ebp+1Ch]
003E8B40  jne         003E8B4C
003E8B42  mov         esi,dword ptr ds:[3EEF40h]
003E8B48  test        esi,esi
003E8B4A  je          003E8BAA
003E8B4C  cmp         dword ptr [esi+8],1 ; <-- падает вот тут

Так что неплохо бы сборку с отладочными символами и актуальный Sessions (потому как это было на последних тестовых AkelPad и Scripts со старой архитектурой).
Впрочем, можно и без Sessions, но на AutoScript-Sample1.js падает реже.


Upd: Отладка скриптов тут запускается без проблем (но только с галочкой «с начала»), при этом падает там же. Информации о падении не видать, а если в окошке о том, что программа упала, выбрать «Отладка», то выдает
Quote:
Microsoft Visual Studio
---------------------------
Unable to attach to the crashing process. A debugger is already attached.
---------------------------
ОК

Система, в принципе, такая же: Windows 7 x86 SP1, только корпоративная версия и есть VS 2005.

Upd #2:
Quote:
(но только с галочкой «с начала»)
Я что-то туплю, без галочки надо было «AkelPad.DebugJIT();» в коде добавить?
Back to top
View user's profile Send private message Visit poster's website
Display posts from previous:   
Post new topic   This topic is locked: you cannot edit posts or make replies.    AkelPad Forum Index -> Plugins All times are GMT
Goto page Previous  1, 2, 3 ... 92, 93, 94, 95, 96  Next
Page 93 of 96

 
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