Переход к следующему расширению
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
Если я нахожусь в середине панели с длинным списком файлов/каталогов (скажем, в папке Windows), то файл со следующим расширением у меня почему-то оказывается последним в панели, хотя до запуска скрипта он располагался практически в середине панели (экрана). У тебя иначе?Flasher писал(а):Никаких стаскиваний в низ панели не вижу
Тотал прокручивает список ровно настолько, насколько это необходимо. При кратком режиме файл будет необязательно последним, но в последней колонке. При подробном - естественно, последним.sa писал(а):файл со следующим расширением у меня почему-то оказывается последним в панели
Последний раз редактировалось MVV Пн окт 03, 2011 11:19, всего редактировалось 2 раза.
sa
Откровенно, в подробном режиме эта штука сама по себе неудобная. При подходе к последнему видимому в панели файлу (берём предложенный тобой способ) курсор будет позиционироваться снизу при дальнейшем переходе. А поскольку этот способ часто требуется для манипуляций с группой однотипных файлов, то имеет смысл данный скрипт использовать именно в кратком режиме.
Откровенно, в подробном режиме эта штука сама по себе неудобная. При подходе к последнему видимому в панели файлу (берём предложенный тобой способ) курсор будет позиционироваться снизу при дальнейшем переходе. А поскольку этот способ часто требуется для манипуляций с группой однотипных файлов, то имеет смысл данный скрипт использовать именно в кратком режиме.
Как вариант, можно добавить в конец скрипта пару-тройку команд от колеса мыши. Т.е. тотал будет фокусироваться на найденном файле, а затем вся страница будет прокручиваться, тем самым вынося файл на середину панели. Вот так можно поднять последний файл на 1 строчку:
Здесь 1 - не число строк, а константа SB_LINEDOWN, указывающая направление прокручивания (на строку вниз). Поэтому для подъёма на большее число строк придётся вызвать несколько раз. Хотя, есть вариант поставить 3 вместо 1 - это будет константа SB_PAGEDOWN, при этом выполнится прокрутка на страницу и последний элемент окажется первым. Но если он был не последним...
Код: Выделить всё
SendMessage(дескриптор_активной_панели, WM_VSCROLL, 1, 0);Ну это был просто пример. Может, в VBS или вашем хелпере есть нечто подобное.
А если нету - добавить можно функции прокрутки каждой панели на нужную величину=) будете юзать. Если браться серьёзно, то можно и на точное число пикселей прокручивать, но надо будет указывать точную позицию относительно самого верха, для этого придётся эту позицию узнать.
Заодно можно добавить функцию помещения файла под курсором в заданную позицию сверху - тот же скроллинг, но вначале надо спросить у панели координаты фокусированного элемента, чтобы правильно определить позицию прокрутки.
Впрочем, если общаться с листбоксом, то можно делать ещё красивее - посылать LB_SETTOPINDEX для прокрутки панели так, чтобы элемент с заданным индексом стал первым в панели - нужно лишь узнать индекс текущего элемента с помощью сообщения LB_GETCARETINDEX и вычесть желаемую позицию для отображения на экране (типа, мы поставили фокус на элемент номер 40 и хотим, чтобы он оказался 5-м на экране - посылаем LB_SETTOPINDEX с номером 35).
А если нету - добавить можно функции прокрутки каждой панели на нужную величину=) будете юзать. Если браться серьёзно, то можно и на точное число пикселей прокручивать, но надо будет указывать точную позицию относительно самого верха, для этого придётся эту позицию узнать.
Заодно можно добавить функцию помещения файла под курсором в заданную позицию сверху - тот же скроллинг, но вначале надо спросить у панели координаты фокусированного элемента, чтобы правильно определить позицию прокрутки.
Впрочем, если общаться с листбоксом, то можно делать ещё красивее - посылать LB_SETTOPINDEX для прокрутки панели так, чтобы элемент с заданным индексом стал первым в панели - нужно лишь узнать индекс текущего элемента с помощью сообщения LB_GETCARETINDEX и вычесть желаемую позицию для отображения на экране (типа, мы поставили фокус на элемент номер 40 и хотим, чтобы он оказался 5-м на экране - посылаем LB_SETTOPINDEX с номером 35).
Добавил цикличность в старый скрипт:
Add
Ввёл параметр %Z чтобы обеспечить работоспособность скрипта внутри архивов, которая была утрачена по сравнению со старым скриптом.
Add_2
Из-за возникшей проблемы с макросом GetSrcSelectedFiles ввёл вместо него функцию определения имени файла (GetName), использующую копирование имени в буфер.
Add_3
Установил во всех вызовах команд TC параметр ожидания в значение True.
Код: Выделить всё
' Описание: Перейти к следующему расширению
' Параметры: %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
Ввёл параметр %Z чтобы обеспечить работоспособность скрипта внутри архивов, которая была утрачена по сравнению со старым скриптом.
Add_2
Из-за возникшей проблемы с макросом GetSrcSelectedFiles ввёл вместо него функцию определения имени файла (GetName), использующую копирование имени в буфер.
Add_3
Установил во всех вызовах команд TC параметр ожидания в значение True.
Из справки:Flasher писал(а):Но предоставленный Хелпером макрос возвращает массив имён без путей, увы.
- GetSrcSelectedFiles [True, если нужен полный путь]
возвращает массив имен выделенных файлов в панели-источнике.
Последний раз редактировалось sa Сб окт 15, 2011 20:43, всего редактировалось 5 раз.