Page 5 of 8

Posted: Thu Dec 09, 2010 3:33 am
by private_joker
Instructor wrote:private_joker
Таковой настройки пока нет - используется системный GUI шрифт.
Если что, в Clipboard та же самая беда. Если сильно лениво делать выбор шрифта может в .ini файле вручную добавлять пару ключ=значение или хотя бы брать из настроек AkelPad'а Вид->Шрифт, а не непонятно откуда (а то как слепой крот вглядываюсь в 8-й шрифт, при том что работаю с 11-м, в системе не меняю потому, что интерфейс многих программ, что характерно и для разработки тоже, рисовали индусы, все куда-то вылазит/залазит/не вмещается, про сайзеры и то что en-us довольно лаконичен в плане сравнения с ru-ru тоже эти люди видимо не слышали).
Знаю, что несложно, поэтому прошу добавить.

Posted: Thu Mar 31, 2011 6:57 pm
by Instructor
private_joker
Реализовано.

Posted: Thu May 12, 2011 5:16 am
by Instructor
Изменено: для окна плагина назначается шрифт текущего окна редактирования.
Добавлено: параметры для указания префикса и суффикса во внешний вызов с кодом 1.

Changed: assigned for the plug-in window the font of the current editing window.
Added: parameters to specify the prefix and suffix to an external call with code 1.


HexSel plugin v4.9

Posted: Mon Jun 20, 2011 9:56 pm
by Andrey_A_A
Можно ли как-то добавить ещё один параметр в метод (текст), чтобы можно было его вызывать в скриптах, так чтобы в работе скрипта преобразовывался текст. Пример:

Text = "Спасибо"
Text16 = AkelPad.Call("HexSel::Main", 1, 41,"","",Text)

то в итоге Text16 = "21043F0430044104380431043E04"

и обратное дейстие

Posted: Tue Jun 21, 2011 9:35 am
by Instructor
Andrey_A_A

Способ 1:

Code: Select all

var pText="Спасибо";

WScript.Echo("1." + StrToHex(pText));

function StrToHex(pString)
{
  var pHex="";
  var pCharCode;
  var i;

  for (i=0; i < pString.length; ++i)
  {
    pCharCode=pString.charCodeAt(i).toString(16).toUpperCase();
    while (pCharCode.length < 4) pCharCode="0" + pCharCode;
    pHex=pHex + "" + pCharCode + "";
  }
  return pHex;
}


Способ 2:

Code: Select all

var oSys=AkelPad.SystemFunction();
var hWndEdit=AkelPad.GetEditWnd();
var pText="Спасибо";
var pText16="";

if (hWndEdit && pText)
{
  if (lpSel=AkelPad.MemAlloc(_X64?56:28 /*sizeof(AESELECTION)*/))
  {
    if (lpCaret=AkelPad.MemAlloc(_X64?24:12 /*sizeof(AECHARINDEX)*/))
    {
      //Save state
      AkelPad.SendMessage(hWndEdit, 3185 /*AEM_LOCKSCROLL*/, 3 /*SB_BOTH*/, true);
      SetRedraw(hWndEdit, false);
      AkelPad.SendMessage(hWndEdit, 3125 /*AEM_GETSEL*/, lpCaret, lpSel);

      AkelPad.SetSel(0, 0);
      AkelPad.ReplaceSel(pText, true);
      AkelPad.Call("HexSel::Main", 1, 41, "", "");
      pText16=AkelPad.GetSelText();
      AkelPad.SendMessage(hWndEdit, 3077 /*AEM_UNDO*/, 0, 0);
      AkelPad.SendMessage(hWndEdit, 3077 /*AEM_UNDO*/, 0, 0);

      //Restore state
      dwFlags=AkelPad.MemRead(lpSel + (_X64?48:24) /*AESELECTION.dwFlags*/, 3 /*DT_DWORD*/);
      AkelPad.MemCopy(lpSel + (_X64?48:24) /*AESELECTION.dwFlags*/, dwFlags | 0x808 /*AESELT_LOCKSCROLL|AESELT_INDEXUPDATE*/, 3 /*DT_DWORD*/);
      AkelPad.SendMessage(hWndEdit, 3126 /*AEM_SETSEL*/, lpCaret, lpSel);
      SetRedraw(hWndEdit, true);
      AkelPad.SendMessage(hWndEdit, 3185 /*AEM_LOCKSCROLL*/, 3 /*SB_BOTH*/, false);

      AkelPad.MemFree(lpCaret);
    }
    AkelPad.MemFree(lpSel);
  }
}
WScript.Echo("2." + pText16);

function SetRedraw(hWnd, bRedraw)
{
  AkelPad.SendMessage(hWnd, 11 /*WM_SETREDRAW*/, bRedraw, 0);
  if (bRedraw) oSys.Call("user32::InvalidateRect", hWnd, 0, true);
}

Posted: Wed Jun 22, 2011 5:43 am
by Andrey_A_A
Instructor = "Спасибо!!!"

Posted: Mon Feb 06, 2012 2:37 pm
by Instructor
Изменено: если флаги 1 и 2 во внешнем вызове с кодом 1 не указаны, используется автоматическое распознавание направления конвертирования.
Изменено: флаги 16 и 32 во внешнем вызове с кодом 1 объединены в один - флаг 16.
Добавлено: автоматическое распознавание направления преобразования.

Changed: if flags 1 and 2 in the external call with code 1 are not specified, automatic direction of conversion is used.
Changed: flags 16 and 32 in the external code with code 1 combined to one - flag 16.
Added: automatic direction of conversion.


HexSel plugin v5.3

Posted: Sun Apr 08, 2012 7:16 pm
by Andrey_A_A
Instructor
В связи с обновлением плагина пример GetHexSel.js не работает
можно его переделать...
и ещё просьба переделать на vbs, потому что эти функции использую в vbs скриптах.

Было так, кривовато, но работало, сейчас нет:

Code: Select all

' Функция конвертации Hex в Текст
Function HexToStr(ppText)
  With AkelPad
    Call .Command(4101)
    WScript.Sleep 10
    sText = RunScript(ppText, 42)
    HexToStr = Left(sText, Len(sText))
    Call .SendMessage(.GetEditWnd(), 3087, false, 0)
    Call .SendMessage(.GetEditWnd(), 3079, 0, 0)
    Call .Command(4318)  
  End With 
End Function

' Функция конвертации Текст в Hex
Function StrToHex(ppText)
  StrToHex = RunScript(ppText, 41)
End Function

Function RunScript(pText, hFlag)
  With AkelPad
    hWndEdit = .GetEditWnd()
    If Len(hWndEdit) > 0 And Len(pText) > 0 Then
      If X64 Then
        mm = 112 : cc = 24 : vv = 48
      Else
        mm = 56 : cc = 12 : vv = 24
      End If
      lpSel = .MemAlloc(mm)
      lpCaret = .MemAlloc(cc)
      'Сохранить состояние
      Call .SendMessage(hWndEdit, 3185, 3, true)
      Call SetRedraw(hWndEdit, false)
      Call .SendMessage(hWndEdit, 3125, lpCaret, lpSel)
      Call .SetSel(0,0)
      Call .ReplaceSel(pText, true)
      Call .Call("HexSel::Main", 1, hFlag)
      RunScript = .GetSelText()
      Call .SendMessage(hWndEdit, 3077, 0, 0)
      Call .SendMessage(hWndEdit, 3077, 0, 0)
      'Восстановление состояния
      dwFlags=.MemRead(lpSel + vv, 3)
      Call .MemCopy(lpSel + vv, dwFlags, 3)
      Call .SendMessage(hWndEdit, 3126, lpCaret, lpSel)
      Call SetRedraw(hWndEdit, true)
      Call .SendMessage(hWndEdit, 3185, 3, false)
      Call .MemFree(lpCaret)
      Call .MemFree(lpSel)
    End If
  End With
End Function

Function SetRedraw(hWnd, bRedraw)
  With AkelPad
    Call .SendMessage(hWnd, 11, bRedraw, 0)
    if bRedraw Then Call .SystemFunction().Call("user32::InvalidateRect", hWnd, 0, true)
  End With
End Function


Можно ли подправить

Posted: Mon Apr 09, 2012 2:12 pm
by Instructor
Andrey_A_A
В GetHexSel.js 25 вместо 41.

Code: Select all

AkelPad.Call("HexSel::Main", 1, 25, "", ""); 

Posted: Mon Apr 09, 2012 2:24 pm
by DrakonHaSh
можно ли добавить функционал не только для 16-ных цифр, но и 8-ричных [встречается тоже достаточно часто - строки в c/c++ , php , js ].

Posted: Mon Apr 09, 2012 2:28 pm
by Instructor
DrakonHaSh
См. в описании "однобайтовое преобразование".

Posted: Mon Apr 09, 2012 2:38 pm
by DrakonHaSh
Instructor wrote:DrakonHaSh
См. в описании "однобайтовое преобразование".
я не про ansi или unicode

я про восьмеричные преобразования
echo "\041";
=>
!
(041 - это 0x21)

т.е. хочется иметь возможность преобразовывать строки
\041 => !
! => \041

Posted: Mon Apr 09, 2012 4:51 pm
by Instructor
Добавлено: внешний вызов с кодом 2 - конвертировать указанный текст.

Added: external call with code 2 - convert specified text.


HexSel plugin v5.6

Posted: Mon Apr 09, 2012 5:02 pm
by Andrey_A_A
Instructor
В GetHexSel.js 25 вместо 41.
Спасибо, уже к утру методом тыка разобрался...

Posted: Mon Apr 09, 2012 5:27 pm
by Instructor
Andrey_A_A
В скрипте GetHexSel.js уже нет необходимости, см. HexSel v5.6.