Scripts discussion (1)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

И да, к хозяину InsertFile.js там есть кусочек

Code: Select all

if (lpStructure=AkelPad.MemAlloc(_X64?136:76))  //sizeof(OPENFILENAMEA) or sizeof(OPENFILENAMEW)
Попрошу оставить в комментарие sizeof(OPENFILENAME), ибо я когда первый раз увидел этот комментарий, то сразу же подумал что он поясняет оператор _X64?136:76, и долго ломал голову почему на 64-битной версии используют OPENFILENAMEA а на 32-битной OPENFILENAMEW. Аж потом дошло что комментарий не это поясняет. Какого-нибудь новичка оно может на долго ввести в заблуждение.

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

Post by VladSh »

FeyFre
Спасибо за доку!

Только непонятно, как передать в структуру lpstrInitialDir...
По идее надо сделать что-то типа:

Code: Select all

if (lpDirBuffer = AkelPad.MemAlloc(256 * _TSIZE))
{
	AkelPad.MemCopy(lpDirBuffer, pInitialDir.substr(0, 255), _TSTR);
	...
А потом, как его значение запихнуть?
Что означают эти циферки 48:28:

Code: Select all

AkelPad.MemCopy(lpStructure + (_X64?48:28), lpFileBuffer, 2 /*DT_QWORD*/);		 //lpstrFile
и как получить те, что нужны в моём случае?

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

По идее надо сделать что-то типа:
Да.
_X64?48:28
Смещение поля от начала структуры в байтах. в 64-битных архитектурах 64битные адреса, занимают по 8 байт
В вашем случае это будет _X64?68:44
68 = 5*sizeof(DWORD) + 4*sizeof(LPTSTR) + sizeof(HWND) + sizeof(HINSTANCE)
= 5*4 + 4*8+8+8
для 32 бит =5*4+4*4+4+4 = 44

Но для уверенности стоит спросить компилятор смещение(например, не играет ли там роли выравнивание на границу кратную битности или размеру поля).

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

Post by VladSh »

FeyFre
Спасибо огромнейшее за подробный ответ!!! 8)
Только компилятора у меня никакого нет.. Буду пробовать, надеюсь на попадание :)


Updated: Всё работает! Спасибо ещё раз! Теперь это выглядит так: CommonFunctions.js.
По ходу изменил SaveAs.js.
Last edited by VladSh on Mon Jan 31, 2011 11:24 am, edited 1 time in total.

SVM
Offline
Posts: 2
Joined: Sat Jan 15, 2011 8:24 am

Post by SVM »

Kaк сделать чтобы скрипт getLinks оставлял не только ссылку но и то что есть после неё в строке?
Спасибо.

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

Post by Infocatcher »

SVM wrote:Kaк сделать чтобы скрипт getLinks оставлял не только ссылку но и то что есть после неё в строке?
Этот?
Вот так: getLinks2.htm (результат).

SVM
Offline
Posts: 2
Joined: Sat Jan 15, 2011 8:24 am

Post by SVM »

Infocatcher Спасибо!

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

Post by Andrey_A_A »

Подскажите как в vds убрать перевод на новую строку
Пример:
Text = Text & vbNewLine
а теперь необходимо как-то сделать обратное действие, чтобы Text был без перевода строки

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Andrey_A_A
Функция Mid возвращает указанную часть строки.

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

Post by Andrey_A_A »

Функция Mid - это не совсем то, что хотелось, может я не так объяснил
есть текст

Code: Select all

строка_1
строка_2
строка_3

то есть vbNewLine увеличила текст на одну пустую строку
а мне нужно получить

Code: Select all

строка_1
строка_2
строка_3
без перебора всего текста, может есть такая функция...

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Andrey_A_A
str = Left(str, Len(str)-1)
Только строка не должна быть пустой.

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

Post by KDJ »

Andrey_A_A

Code: Select all

Text = Text & vbNewLine
If (Right(Text, Len(vbNewLine)) = vbNewLine) Then
  Text = Left(Text, Len(Text) - Len(vbNewLine))
End If

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

Post by Andrey_A_A »

KDJ Спасибо, то что надо! Интересное условие, сам бы ни в жись не догадался!

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

Post by VladSh »

Andrey_A_A wrote:Подскажите как в vds убрать перевод на новую строку
Пример:
Text = Text & vbNewLine
а теперь необходимо как-то сделать обратное действие, чтобы Text был без перевода строки
Andrey_A_A wrote:то есть vbNewLine увеличила текст на одну пустую строку
Проще изначально делать, чтобы не было лишнего перевода строки, т.е. например так:

Code: Select all

Text = Join(ARR, vbNewLine)

Instructor
Пользуюсь ChmKeyword.js, есть парочка неприятностей:
1. При запуске любой chm-доки таким образом

Code: Select all

-"Справочник JS" Call("Scripts::Main", 1, "ChmKeyword.js", "JS.chm")
скрипты, к сожалению, не запускаются, т.е. образуется очередь запущенных скриптов, и только после закрытия доки они тут же все и выполняются. Это очень неудобно... можно ли сделать так, чтобы при открытой доке скрипты выполнялись?
2. При открытии файла VBS.chm почему-то валится AkelPad... (chm-файл сейчас вышлю на почту).

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

Post by Infocatcher »

VladSh
ChmKeyword.js
В версии 1.3 там добавлено

Code: Select all

if (bCatchEsc)
  ...
  AkelPad.ScriptNoMutex();
У меня с этой версией проблем нет.
Locked