Page 24 of 96

Posted: Wed Mar 14, 2012 2:25 pm
by Infocatcher
Instructor
Это я знаю, но тут сразу два неудобства: и файлы надо заново глазами искать, и для не соседних неудобно, что надо еще и Ctrl зажимать – уже две руки нужны.

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

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

Posted: Thu Mar 15, 2012 8:13 am
by Infocatcher
Так есть возможность подписаться на событие переключения вкладки?
Или надо тупо периодически проверять, не изменилась ли текущая вкладка?

Posted: Thu Mar 15, 2012 9:16 am
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);
  }
}

Posted: Thu Mar 15, 2012 4:14 pm
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?
А то в коде он создается, так что получения там нигде нету, как я понимаю.

Posted: Thu Mar 15, 2012 4:23 pm
by VladSh
Infocatcher wrote:Теперь бы придумать, куда вывести сообщение «выберите вкладку». :) А то, вроде, и надо бы, а модальных сообщений видеть не хочется.
Где-то тут был пример, как в статусбар писать :)

Posted: Thu Mar 15, 2012 5:23 pm
by Instructor
Infocatcher
Да, примерно как в ArrangeListBoxSelItems.
И если да, то как заполучить hMdiClient?

Code: Select all

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

Posted: Fri Mar 16, 2012 5:14 am
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)

Posted: Fri Mar 16, 2012 6:20 am
by Fr0sT
Infocatcher
так это не рекурсия, а просто двусвязный список

Posted: Fri Mar 16, 2012 1:55 pm
by Instructor
Infocatcher wrote:Есть простой способ получить lpFrame->hWndEditParent ?

Code: Select all

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

Posted: Fri Mar 16, 2012 10:14 pm
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.

Posted: Sat Mar 17, 2012 12:58 pm
by KDJ

Posted: Sat Mar 17, 2012 5:07 pm
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*/));

Posted: Sat Mar 17, 2012 5:45 pm
by Instructor
Infocatcher

Code: Select all

"user32::GetWindowLong" + _TCHAR

Posted: Sat Mar 17, 2012 7:28 pm
by Infocatcher
Instructor
Спасибо, заработало: tileTabs.js