HexSel plugin

Discuss and announce AkelPad plugins
  • Author
  • Message
Offline
Posts: 84
Joined: Fri May 28, 2010 1:28 pm

Post by private_joker »

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

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

Post by Instructor »

private_joker
Реализовано.

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

Post 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

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

Можно ли как-то добавить ещё один параметр в метод (текст), чтобы можно было его вызывать в скриптах, так чтобы в работе скрипта преобразовывался текст. Пример:

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

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

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

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

Post 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);
}

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

Instructor = "Спасибо!!!"

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

Post 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

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post 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


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

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

Post by Instructor »

Andrey_A_A
В GetHexSel.js 25 вместо 41.

Code: Select all

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

Offline
Posts: 122
Joined: Sat Mar 19, 2011 10:20 pm

Post by DrakonHaSh »

можно ли добавить функционал не только для 16-ных цифр, но и 8-ричных [встречается тоже достаточно часто - строки в c/c++ , php , js ].

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

Post by Instructor »

DrakonHaSh
См. в описании "однобайтовое преобразование".

Offline
Posts: 122
Joined: Sat Mar 19, 2011 10:20 pm

Post by DrakonHaSh »

Instructor wrote:DrakonHaSh
См. в описании "однобайтовое преобразование".
я не про ansi или unicode

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

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

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

Post by Instructor »

Добавлено: внешний вызов с кодом 2 - конвертировать указанный текст.

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


HexSel plugin v5.6

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

Instructor
В GetHexSel.js 25 вместо 41.
Спасибо, уже к утру методом тыка разобрался...

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

Post by Instructor »

Andrey_A_A
В скрипте GetHexSel.js уже нет необходимости, см. HexSel v5.6.
Post Reply