Страница 4 из 11

Добавлено: Пн окт 03, 2011 10:25
Flasher
sa
Я рассматривал данный способ, но, во-первых, он медленнее (и это заметно), а во-вторых, при быстром нажатии видно моргание самого выделения, что куда хуже, чем незначительная елеуловимая разница в передёргиваниях.

Добавлено: Пн окт 03, 2011 10:51
sa
Flasher писал(а):незначительная елеуловимая разница в передёргиваниях.
Это у меня названо перерисовкой.
Под передёргиванием понимал постоянное стаскивание найденного файла в низ панели (насколько это позволяет сделать общая длина списка файлов/каталогов).

Добавлено: Пн окт 03, 2011 10:57
Flasher
sa писал(а):Под передёргиванием понимал постоянное стаскивание найденного файла в низ панели
Никаких стаскиваний в низ панели не вижу, хоть убей...
Отчего бы им происходить?

Добавлено: Пн окт 03, 2011 11:08
sa
Flasher писал(а):Никаких стаскиваний в низ панели не вижу
Если я нахожусь в середине панели с длинным списком файлов/каталогов (скажем, в папке Windows), то файл со следующим расширением у меня почему-то оказывается последним в панели, хотя до запуска скрипта он располагался практически в середине панели (экрана). У тебя иначе?

Добавлено: Пн окт 03, 2011 11:14
MVV
sa писал(а):файл со следующим расширением у меня почему-то оказывается последним в панели
Тотал прокручивает список ровно настолько, насколько это необходимо. При кратком режиме файл будет необязательно последним, но в последней колонке. При подробном - естественно, последним.

Добавлено: Пн окт 03, 2011 11:16
Flasher
А, я же в подробном режиме не сижу. Там есть - подтверждаю. Хм. Интересно. Это TCMC такой глюк даёт, наверно.
MVV писал(а):При кратком режиме файл будет необязательно последним, но в последней колонке.
Вот этого у меня точно нет. В кратком поведение адекватное.

Добавлено: Пн окт 03, 2011 11:20
MVV
При переходе к файлу, который находится дальше текущего, тотал прокрутит панель настолько, чтобы стало возможным показать файл - т.е. колонка будет последней полностью видимой.

Ровно то же поведение наблюдается при обычном быстром поиске вперёд. И при переходе к файлу в другой папке по команде cd.

Добавлено: Пн окт 03, 2011 11:22
sa
Забыл уточнить: я говорил о подробном режиме.

Добавлено: Пн окт 03, 2011 11:25
Flasher
MVV писал(а):При переходе к файлу, который находится дальше текущего, тотал прокрутит панель настолько, чтобы стало возможным показать файл - т.е. колонка будет последней полностью видимой.
Вот это уже точнее. Т.е. если мы видим полторы колонки, то фокус будет оставаться всё время на первой.

Добавлено: Пн окт 03, 2011 13:47
sa
MVV писал(а):Тотал прокручивает список ровно настолько, насколько это необходимо.
Точно так.
MVV писал(а):При подробном - естественно, последним.
Всё-таки необязательно последним.

Добавлено: Пн окт 03, 2011 13:55
Flasher
sa
Откровенно, в подробном режиме эта штука сама по себе неудобная. При подходе к последнему видимому в панели файлу (берём предложенный тобой способ) курсор будет позиционироваться снизу при дальнейшем переходе. А поскольку этот способ часто требуется для манипуляций с группой однотипных файлов, то имеет смысл данный скрипт использовать именно в кратком режиме.

Добавлено: Пн окт 03, 2011 14:16
MVV
Как вариант, можно добавить в конец скрипта пару-тройку команд от колеса мыши. Т.е. тотал будет фокусироваться на найденном файле, а затем вся страница будет прокручиваться, тем самым вынося файл на середину панели. Вот так можно поднять последний файл на 1 строчку:

Код: Выделить всё

SendMessage(дескриптор_активной_панели, WM_VSCROLL, 1, 0);
Здесь 1 - не число строк, а константа SB_LINEDOWN, указывающая направление прокручивания (на строку вниз). Поэтому для подъёма на большее число строк придётся вызвать несколько раз. Хотя, есть вариант поставить 3 вместо 1 - это будет константа SB_PAGEDOWN, при этом выполнится прокрутка на страницу и последний элемент окажется первым. Но если он был не последним...

Добавлено: Пн окт 03, 2011 14:21
Flasher
MVV
VBS с API не работает, только через COM-объекты. Тут AutoIt нужен.

Добавлено: Пн окт 03, 2011 14:26
MVV
Ну это был просто пример. Может, в VBS или вашем хелпере есть нечто подобное.

А если нету - добавить можно функции прокрутки каждой панели на нужную величину=) будете юзать. Если браться серьёзно, то можно и на точное число пикселей прокручивать, но надо будет указывать точную позицию относительно самого верха, для этого придётся эту позицию узнать.
Заодно можно добавить функцию помещения файла под курсором в заданную позицию сверху - тот же скроллинг, но вначале надо спросить у панели координаты фокусированного элемента, чтобы правильно определить позицию прокрутки.

Впрочем, если общаться с листбоксом, то можно делать ещё красивее - посылать LB_SETTOPINDEX для прокрутки панели так, чтобы элемент с заданным индексом стал первым в панели - нужно лишь узнать индекс текущего элемента с помощью сообщения LB_GETCARETINDEX и вычесть желаемую позицию для отображения на экране (типа, мы поставили фокус на элемент номер 40 и хотим, чтобы он оказался 5-м на экране - посылаем LB_SETTOPINDEX с номером 35).

Добавлено: Пн окт 03, 2011 17:33
sa
Добавил цикличность в старый скрипт:

Код: Выделить всё

'  Описание: Перейти к следующему расширению
' Параметры: %Z%N
'Требования: Необходима регистрация WSH Helper for TC by Volniy 
Option Explicit
Dim TCS, Sp, Sn, TextClip
Set TCS = CreateObject("TCScript.Helper")
TCS.LockTC True
TCS.SendCommand 524, True
If WScript.Arguments.Count < 1 Then
  TCS.SendCommand 2050, True
Else
  TextClip = TCS.GetTextFromClip
  Sp = GetName
  If InStrRev(Sp,"") = Len(Sp) Then
    TCS.SendCommand 2050, True
  Else
    TCS.SendCommand 527, True
    TCS.SendCommand 525, True
    TCS.SendCommand 2053, True
    TCS.SendCommand 524, True
    Sn = GetName
    If Sn = Sp Then TCS.SendCommand 2050, True
  End If
  TCS.SetTextToClip(TextClip)
End If
TCS.LockTC False
Set TCS = Nothing
Wscript.Quit 

Function GetName 
  TCS.SendCommand 2017, True
  GetName = TCS.GetTextFromClip
End Function
Add
Ввёл параметр %Z чтобы обеспечить работоспособность скрипта внутри архивов, которая была утрачена по сравнению со старым скриптом.
Add_2
Из-за возникшей проблемы с макросом GetSrcSelectedFiles ввёл вместо него функцию определения имени файла (GetName), использующую копирование имени в буфер.
Add_3
Установил во всех вызовах команд TC параметр ожидания в значение True.
Flasher писал(а):Но предоставленный Хелпером макрос возвращает массив имён без путей, увы.
Из справки:
  • GetSrcSelectedFiles [True, если нужен полный путь]
    возвращает массив имен выделенных файлов в панели-источнике.