Page 50 of 97

Posted: Fri Jan 14, 2011 3:25 pm
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. Аж потом дошло что комментарий не это поясняет. Какого-нибудь новичка оно может на долго ввести в заблуждение.

Posted: Fri Jan 14, 2011 3:54 pm
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
и как получить те, что нужны в моём случае?

Posted: Fri Jan 14, 2011 5:30 pm
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

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

Posted: Fri Jan 14, 2011 5:56 pm
by VladSh
FeyFre
Спасибо огромнейшее за подробный ответ!!! 8)
Только компилятора у меня никакого нет.. Буду пробовать, надеюсь на попадание :)


Updated: Всё работает! Спасибо ещё раз! Теперь это выглядит так: CommonFunctions.js.
По ходу изменил SaveAs.js.

Posted: Sat Jan 15, 2011 8:41 am
by SVM
Kaк сделать чтобы скрипт getLinks оставлял не только ссылку но и то что есть после неё в строке?
Спасибо.

Posted: Sat Jan 15, 2011 10:36 am
by Infocatcher
SVM wrote:Kaк сделать чтобы скрипт getLinks оставлял не только ссылку но и то что есть после неё в строке?
Этот?
Вот так: getLinks2.htm (результат).

Posted: Sat Jan 15, 2011 11:30 am
by SVM
Infocatcher Спасибо!

Posted: Sat Jan 15, 2011 12:28 pm
by Andrey_A_A
Подскажите как в vds убрать перевод на новую строку
Пример:
Text = Text & vbNewLine
а теперь необходимо как-то сделать обратное действие, чтобы Text был без перевода строки

Posted: Sat Jan 15, 2011 12:51 pm
by FeyFre
Andrey_A_A
Функция Mid возвращает указанную часть строки.

Posted: Sat Jan 15, 2011 1:02 pm
by Andrey_A_A
Функция Mid - это не совсем то, что хотелось, может я не так объяснил
есть текст

Code: Select all

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

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

Code: Select all

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

Posted: Sat Jan 15, 2011 1:06 pm
by FeyFre
Andrey_A_A
str = Left(str, Len(str)-1)
Только строка не должна быть пустой.

Posted: Sat Jan 15, 2011 1:16 pm
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

Posted: Sat Jan 15, 2011 1:47 pm
by Andrey_A_A
KDJ Спасибо, то что надо! Интересное условие, сам бы ни в жись не догадался!

Posted: Sat Jan 15, 2011 2:10 pm
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-файл сейчас вышлю на почту).

Posted: Sat Jan 15, 2011 2:23 pm
by Infocatcher
VladSh
ChmKeyword.js
В версии 1.3 там добавлено

Code: Select all

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