Scripts discussion (2)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Instructor
Это я знаю, но тут сразу два неудобства: и файлы надо заново глазами искать, и для не соседних неудобно, что надо еще и Ctrl зажимать – уже две руки нужны.

Плюс сначала надо хоткей жать (пункт меню же скрыт, пока мало документов), а потом мышкой орудовать.
Вообще, тут неплохо бы опцию, чтобы всегда показывать этот пункт. :)

DV
Offline
Posts: 1291
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

И опять RunMe.js. На этот раз при работе с Log::Output из запускаемой команды автоматически убирается "|| pause" в конце. Также в run_cpp() добавлено WScript.Sleep(2000) как временное решение проблемы с переменными окружения, упомянутой в форуме плагина Log.

Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Так есть возможность подписаться на событие переключения вкладки?
Или надо тупо периодически проверять, не изменилась ли текущая вкладка?

Offline
Site Admin
Posts: 6403
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Infocatcher

Code: Select all

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

if (AkelPad.WindowSubClass(hMainWnd, MainCallback, 0x416 /*AKDN_FRAME_ACTIVATE*/))
{
  //Message loop
  AkelPad.WindowGetMessage();

  AkelPad.WindowUnsubClass(hMainWnd);
}

function MainCallback(hWnd, uMsg, wParam, lParam)
{
  if (uMsg == 0x416 /*AKDN_FRAME_ACTIVATE*/)
  {
    AkelPad.MessageBox(0, "AKDN_FRAME_ACTIVATE", WScript.ScriptName, 0);

    //Exit message loop
    oSys.Call("user32::PostQuitMessage", 0);
  }
}

Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Instructor wrote:

Code: Select all

...
if (AkelPad.WindowSubClass(hMainWnd, MainCallback, 0x416 /*AKDN_FRAME_ACTIVATE*/))
...
Спасибо.
Я правильно понимаю, что для перемещения произвольных MDI-окон надо воспроизвести нечто вроде void ArrangeListBoxSelItems(HWND hWnd, int nBar) из Edit.c? То есть получить указатели на сами окна и переместить их вручную?

Теперь бы придумать, куда вывести сообщение «выберите вкладку». :) А то, вроде, и надо бы, а модальных сообщений видеть не хочется.

[Upd]
И если да, то как заполучить hMdiClient?
А то в коде он создается, так что получения там нигде нету, как я понимаю.

Offline
Posts: 3234
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Infocatcher wrote:Теперь бы придумать, куда вывести сообщение «выберите вкладку». :) А то, вроде, и надо бы, а модальных сообщений видеть не хочется.
Где-то тут был пример, как в статусбар писать :)

Offline
Site Admin
Posts: 6403
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Infocatcher
Да, примерно как в ArrangeListBoxSelItems.
И если да, то как заполучить hMdiClient?

Code: Select all

hMdiClient=AkelPad.SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 12 /*MI_WNDMDICLIENT*/, 0);

Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Так, едем дальше. :D
Есть простой способ получить lpFrame->hWndEditParent ?
А то там какие-то рекурсивные ужасы:

Code: Select all

typedef struct _FRAMEDATA {
  struct _FRAMEDATA *next;
  struct _FRAMEDATA *prev;

  //Edit state external
  HWND hWndEditParent;                                //Edit parent window.
...
Пока только с lpFrame хоть понятно:

Code: Select all

var lpFrame = AkelPad.SendMessage(hMainWnd, 1288 /*AKD_FRAMEFIND*/, 1 /*FWF_CURRENT*/, 0)

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

Infocatcher
так это не рекурсия, а просто двусвязный список

Offline
Site Admin
Posts: 6403
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Infocatcher wrote:Есть простой способ получить lpFrame->hWndEditParent ?

Code: Select all

hWndEditParent=AkelPad.SendMessage(hMainWnd, 1223 /*AKD_GETFRAMEINFO*/, 1 /*FI_WNDEDITPARENT*/, lpFrame);

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

FileAndStream.js

Added:
- view file in external viewer (F3),
- set external viewer (Ctrl+Shift+F3) - eg. UniversalViewer,
- edit file in external editor (Ctrl+F4),
- set external editor (Ctrl+Shift+F4),
- compare files in external comparer (F12),
- set external comparer (Ctrl+Shift+F12) - eg. WinMerge.

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »


Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Instructor wrote:Да, примерно как в ArrangeListBoxSelItems.
Пытаюсь сделать аналог

Code: Select all

            if (GetWindowLongPtrWide(lpFrame->hWndEditParent, GWL_STYLE) & WS_MAXIMIZE)
              SendMessage(hMdiClient, WM_MDIRESTORE, (WPARAM)lpFrame->hWndEditParent, 0);
Но все время 0:

Code: Select all

var lpFrame = AkelPad.SendMessage(hMainWnd, 1288 /*AKD_FRAMEFIND*/, 1 /*FWF_CURRENT*/, 0);
var hWndMdi = AkelPad.SendMessage(hMainWnd, 1223 /*AKD_GETFRAMEINFO*/, 1 /*FI_WNDEDITPARENT*/, lpFrame);
WScript.Echo("" + oSys.Call("user32::GetWindowLongPtr" + _TCHAR, hWndMdi, -16 /*GWL_STYLE*/));

Offline
Site Admin
Posts: 6403
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Infocatcher

Code: Select all

"user32::GetWindowLong" + _TCHAR

Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Instructor
Спасибо, заработало: tileTabs.js
Locked