Переход к следующему расширению

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

sa
Я рассматривал данный способ, но, во-первых, он медленнее (и это заметно), а во-вторых, при быстром нажатии видно моргание самого выделения, что куда хуже, чем незначительная елеуловимая разница в передёргиваниях.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Flasher писал(а):незначительная елеуловимая разница в передёргиваниях.
Это у меня названо перерисовкой.
Под передёргиванием понимал постоянное стаскивание найденного файла в низ панели (насколько это позволяет сделать общая длина списка файлов/каталогов).
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

sa писал(а):Под передёргиванием понимал постоянное стаскивание найденного файла в низ панели
Никаких стаскиваний в низ панели не вижу, хоть убей...
Отчего бы им происходить?
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Flasher писал(а):Никаких стаскиваний в низ панели не вижу
Если я нахожусь в середине панели с длинным списком файлов/каталогов (скажем, в папке Windows), то файл со следующим расширением у меня почему-то оказывается последним в панели, хотя до запуска скрипта он располагался практически в середине панели (экрана). У тебя иначе?
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

sa писал(а):файл со следующим расширением у меня почему-то оказывается последним в панели
Тотал прокручивает список ровно настолько, насколько это необходимо. При кратком режиме файл будет необязательно последним, но в последней колонке. При подробном - естественно, последним.
Последний раз редактировалось MVV Пн окт 03, 2011 11:19, всего редактировалось 2 раза.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

А, я же в подробном режиме не сижу. Там есть - подтверждаю. Хм. Интересно. Это TCMC такой глюк даёт, наверно.
MVV писал(а):При кратком режиме файл будет необязательно последним, но в последней колонке.
Вот этого у меня точно нет. В кратком поведение адекватное.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

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

Ровно то же поведение наблюдается при обычном быстром поиске вперёд. И при переходе к файлу в другой папке по команде cd.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Забыл уточнить: я говорил о подробном режиме.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):При переходе к файлу, который находится дальше текущего, тотал прокрутит панель настолько, чтобы стало возможным показать файл - т.е. колонка будет последней полностью видимой.
Вот это уже точнее. Т.е. если мы видим полторы колонки, то фокус будет оставаться всё время на первой.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

MVV писал(а):Тотал прокручивает список ровно настолько, насколько это необходимо.
Точно так.
MVV писал(а):При подробном - естественно, последним.
Всё-таки необязательно последним.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

sa
Откровенно, в подробном режиме эта штука сама по себе неудобная. При подходе к последнему видимому в панели файлу (берём предложенный тобой способ) курсор будет позиционироваться снизу при дальнейшем переходе. А поскольку этот способ часто требуется для манипуляций с группой однотипных файлов, то имеет смысл данный скрипт использовать именно в кратком режиме.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

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

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

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

Сообщение Flasher »

MVV
VBS с API не работает, только через COM-объекты. Тут AutoIt нужен.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Ну это был просто пример. Может, в VBS или вашем хелпере есть нечто подобное.

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

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

Сообщение 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, если нужен полный путь]
    возвращает массив имен выделенных файлов в панели-источнике.
Последний раз редактировалось sa Сб окт 15, 2011 20:43, всего редактировалось 5 раз.
Ответить