Page 47 of 96

Posted: Thu Aug 23, 2012 10:36 pm
by Infocatcher
VladSh
А как же

Code: Select all

<div xmlns="http://www.w3.org/1999/xhtml">
	<b>...</b>
	...
</div>
?
Плюс можно же вручную вводить произвольные тэги.

Posted: Fri Aug 24, 2012 8:59 am
by VladSh
Infocatcher
Ход конём - для автодетекта передавать в аргументах bbcode=... не 2, а перечень расширений, в которых хотим видеть <> :D

Posted: Fri Aug 24, 2012 7:13 pm
by Andrey_A_A
Instructor за SetCaretAtCursor.js спасибо

Подскажите что можно сделать... использую при вставке , чтобы окно не прокручивалось команды

Code: Select all

SendMessage(.GetEditWnd(), 3185, 3, True)
SendMessage(.GetEditWnd(), 3185, 3, False)
работает отлично

Но если курсор стоит внизу документа, то текст вставляется, но не отображается (горизонтальная прокрутка остаётся на месте)
Пример: документ 30-40 строк, чтобы прокрутка была, курсор в самом низу, вставляем строку

Code: Select all

With AkelPad
  Call .SendMessage(.GetEditWnd(), 3185, 3, True)
  Call .ReplaceSel(vbNewLine)
  Call .SendMessage(.GetEditWnd(), 3185, 3, False)
End With
строка вставилась, но её не видно...
Функция Redraw тоже не помогает
Её можно увидеть если перейти на другую вкладку и обратно...

Поведение может быть и правильное, но как обновить окно (не документ) , чтобы вставленная часть отобразилась?

Posted: Fri Aug 24, 2012 9:14 pm
by KDJ
Andrey_A_A

Code: Select all

With AkelPad
  Call .SendMessage(.GetEditWnd(), 3185, 3, True)
  Call .ReplaceSel(vbNewLine)
  Call .SendMessage(.GetEditWnd(), 3185, 3, False)
'3376 = AEM_UPDATESCROLLBAR
  Call .SendMessage(.GetEditWnd(), 3376 , 3, 0)
End With

Posted: Fri Aug 24, 2012 10:08 pm
by Andrey_A_A
KDJ, спасибо, всё заработало!

Posted: Sat Aug 25, 2012 7:27 am
by F. Phoenix
→ VladSh
CommonFunctions.js wrote://возвращает расширение по применённой теме (coder-файла); на основе кода Instructor'а
function getExtBySyntaxFile(hWndE)
Она ж не расширение возвращает, а имя кодер-файла, которое может быть каким угодно. Сбивает.
По-моему, лучше так:
// Возвращает используемый файл синтаксиса (на основе кода Instructor'а).
function getActiveSyntax(hWndE)
На расширение же нужно какую-то другую функцию, которая бы проверяла, прописано ли такое-то расширение в кодер-файле.

PS: Кстати точности ради непомешало бы ввести какие-то местные идентификаторы синтаксиса :roll: Т.е. валяется у меня например штатная подсветка для C# cs.coder, и своя cs-alt.coder, сделанная на основе подсветки SharpDevelop. В скрипте конечн несложно проверить обе, но было б неплохо, если б в самих кодер-файлах прописывалось что-то типа:
Syntax: C#
А вообще идеальную модель обработки файлов вижу примерно так:
Image

Posted: Sat Aug 25, 2012 7:30 pm
by KDJ
How to create maximized window in ActiveX?
WS_MAXIMIZE style is ignored:

Code: Select all

var AkelPad = new ActiveXObject("AkelPad.Document");
var oSys = AkelPad.SystemFunction();
var hInstanceDLL = AkelPad.GetInstanceDll();
var sClassName = "AkelPad::Scripts::" + WScript.ScriptName + "::" + hInstanceDLL;

AkelPad.WindowRegisterClass(sClassName);
oSys.Call("User32::CreateWindowExW",
  0,            //dwExStyle
  sClassName,   //lpClassName
  0,            //lpWindowName
  0x91CF0000,   //dwStyle=WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MAXIMIZEBOX|WS_MINIMIZEBOX|WS_THICKFRAME|WS_MAXIMIZE
  100,          //x
  100,          //y
  300,          //nWidth
  200,          //nHeight
  0,            //hWndParent
  0,            //ID
  hInstanceDLL, //hInstance
  DialogCallback);
AkelPad.WindowGetMessage();
AkelPad.WindowUnregisterClass(sClassName);

function DialogCallback(hWnd, uMsg, wParam, lParam)
{
  if (uMsg == 5) //WM_SIZE
    oSys.Call("User32::SetWindowTextW", hWnd, "Is maximized? " + (oSys.Call("User32::IsZoomed", hWnd) ? "Yes" : "No"));
  else if (uMsg == 256) //WM_KEYDOWN
  {
    if (wParam == 27) //VK_ESCAPE
      oSys.Call("User32::PostMessageW", hWnd, 16 /*WM_CLOSE*/, 0, 0);
  }
  else if (uMsg == 16) //WM_CLOSE
    oSys.Call("User32::DestroyWindow", hWnd);
  else if (uMsg == 2) //WM_DESTROY
    oSys.Call("User32::PostQuitMessage", 0);
  return 0;
}


After adding WScript.Echo("...") working properly:

Code: Select all

WScript.Echo("Create maximized window");
var AkelPad = new ActiveXObject("AkelPad.Document");
var oSys = AkelPad.SystemFunction();
var hInstanceDLL = AkelPad.GetInstanceDll();
var sClassName = "AkelPad::Scripts::" + WScript.ScriptName + "::" + hInstanceDLL;

AkelPad.WindowRegisterClass(sClassName);
oSys.Call("User32::CreateWindowExW",
  0,            //dwExStyle
  sClassName,   //lpClassName
  0,            //lpWindowName
  0x91CF0000,   //dwStyle=WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MAXIMIZEBOX|WS_MINIMIZEBOX|WS_THICKFRAME|WS_MAXIMIZE
  100,          //x
  100,          //y
  300,          //nWidth
  200,          //nHeight
  0,            //hWndParent
  0,            //ID
  hInstanceDLL, //hInstance
  DialogCallback);
AkelPad.WindowGetMessage();
AkelPad.WindowUnregisterClass(sClassName);

function DialogCallback(hWnd, uMsg, wParam, lParam)
{
  if (uMsg == 5) //WM_SIZE
    oSys.Call("User32::SetWindowTextW", hWnd, "Is maximized? " + (oSys.Call("User32::IsZoomed", hWnd) ? "Yes" : "No"));
  else if (uMsg == 256) //WM_KEYDOWN
  {
    if (wParam == 27) //VK_ESCAPE
      oSys.Call("User32::PostMessageW", hWnd, 16 /*WM_CLOSE*/, 0, 0);
  }
  else if (uMsg == 16) //WM_CLOSE
    oSys.Call("User32::DestroyWindow", hWnd);
  else if (uMsg == 2) //WM_DESTROY
    oSys.Call("User32::PostQuitMessage", 0);
  return 0;
}


How to explain such behavior?

Posted: Sat Aug 25, 2012 7:55 pm
by FeyFre
KDJ, It seems to be well known bug, but MS does not confirms it. Instead of usage WS_MAXIMIZED, You should use ShowWindow(hwnd,SW_SHOWMAXIMIZED).

Posted: Sat Aug 25, 2012 9:54 pm
by KDJ
FeyFre
I'm curious whether in Win7 this bug also occurs?

Posted: Sat Aug 25, 2012 11:06 pm
by FeyFre
KDJ, probably they are not think it is bug. Probably it is intended to be so, but we do not know conditions which influence this behaviour.

Posted: Sun Aug 26, 2012 3:34 pm
by KDJ
Thanks FeyFre. ShowWindow() function solves the problem (instead of WS_VISIBLE and WS_MAXIMIZE).

Code: Select all

var AkelPad = new ActiveXObject("AkelPad.Document");
var oSys = AkelPad.SystemFunction();
var hInstanceDLL = AkelPad.GetInstanceDll();
var sClassName = "AkelPad::Scripts::" + WScript.ScriptName + "::" + hInstanceDLL;
var bMaximize = 1;
var hWnd;

AkelPad.WindowRegisterClass(sClassName);
hWnd = oSys.Call("User32::CreateWindowExW",
  0,            //dwExStyle
  sClassName,   //lpClassName
  0,            //lpWindowName
  0x80CF0000,   //dwStyle=WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MAXIMIZEBOX|WS_MINIMIZEBOX|WS_THICKFRAME
  100,          //x
  100,          //y
  300,          //nWidth
  200,          //nHeight
  0,            //hWndParent
  0,            //ID
  hInstanceDLL, //hInstance
  DialogCallback);
oSys.Call("User32::ShowWindow", hWnd, bMaximize ? 3 /*SW_MAXIMIZE*/ : 1 /*SW_SHOWNORMAL*/);
AkelPad.WindowGetMessage();
AkelPad.WindowUnregisterClass(sClassName);

function DialogCallback(hWnd, uMsg, wParam, lParam)
{
  if (uMsg == 5) //WM_SIZE
    oSys.Call("User32::SetWindowTextW", hWnd, "Is maximized? " + (oSys.Call("User32::IsZoomed", hWnd) ? "Yes" : "No"));
  else if (uMsg == 256) //WM_KEYDOWN
  {
    if (wParam == 27) //VK_ESCAPE
      oSys.Call("User32::PostMessageW", hWnd, 16 /*WM_CLOSE*/, 0, 0);
  }
  else if (uMsg == 16) //WM_CLOSE
    oSys.Call("User32::DestroyWindow", hWnd);
  else if (uMsg == 2) //WM_DESTROY
    oSys.Call("User32::PostQuitMessage", 0);
  return 0;
}

Posted: Sun Aug 26, 2012 5:29 pm
by Instructor
Infocatcher wrote:Что-то я не понимаю, как использовать
Call("Coder::Settings", 18, WINDOW, DOCUMENT, *ALIAS, *ALIASLENGTH)

Code: Select all

var hWndEdit=AkelPad.GetEditWnd();
var hDocEdit=AkelPad.GetEditDoc();
var pAlias="";
var lpAlias;

if (hWndEdit && hDocEdit)
{
  if (lpAlias=AkelPad.MemAlloc(256 * 2 /*sizeof(wchar_t)*/))
  {
    AkelPad.CallW("Coder::Settings", 18 /*DLLA_CODER_GETALIAS*/, hWndEdit, hDocEdit, lpAlias, 0);
    pAlias=AkelPad.MemRead(lpAlias, 1 /*DT_UNICODE*/);
    AkelPad.MemFree(lpAlias);
  }
  WScript.Echo(pAlias);
}

Posted: Sun Aug 26, 2012 6:17 pm
by Infocatcher
Instructor
Спасибо!
Просьба добавить этот пример в документацию. А то там ведь без изучения исходников ничего не понять. :)

И еще. У меня задан псевдоним для неизвестного файла. И я ожидал его получить на новом несохраненном файле, но нет – пустую строку выдает.

Posted: Sun Aug 26, 2012 6:38 pm
by Infocatcher
VladSh wrote:Ход конём - для автодетекта передавать в аргументах bbcode=... не 2, а перечень расширений, в которых хотим видеть <> :D
Нечто вроде: insertTag-test.js

Posted: Mon Aug 27, 2012 8:24 pm
by Andrey_A_A
KDJ в скрипте FileInfo.js
вставь пожалуйста параметр или в основу добавь, чтобы детальная статистика в новой вкладке отражалась в моноширинном шрифте

Code: Select all

WScript.Sleep 10 : Call AkelPad.Font ("Courier New", 1, 10)