Orion9

|
Posted: Sat May 03, 2025 13:02 Post subject: |
|
|
AkulaBig wrote: | Что тут неудобного? |
А что удобного? Но если хотите пользоваться, то, наверное, это имеет право на жизнь, никто ведь не запрещает.
AkulaBig wrote: | Вот надо форматирование правильно сделать. |
Не уверен, что можно считать правильным, учитывая особенности вывода, но пара мыслей возникла. Хотя вы и сами наверняка что-нибудь придумаете со временем, если будете пользоваться таким набором.
Для примера взял 20 колонок, но можно и 30, если это максимальное число:
 Hidden text Widths27=80,30,40,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80
Headers27=C1\nC2\nC3\nC4\nC5\nC6\nC7\nC8\nC9\nC10\nC11\nC12\nC13\nC14\nC15\nC16\nC17\nC18\nC19\nC20
Contents27=[=autorun.C1]\n[=autorun.C2]\n[=autorun.C3]\n[=autorun.C4]\n[=autorun.C5]\n[=autorun.C6]\n[=autorun.C7]\n[=autorun.C8]\n[=autorun.C9]\n[=autorun.C10]\n[=autorun.C11]\n[=autorun.C12]\n[=autorun.C13]\n[=autorun.C14]\n[=autorun.C15]\n[=autorun.C16]\n[=autorun.C17]\n[=autorun.C18]\n[=autorun.C19]\n[=autorun.C20]
Options27=-1|1|96
Так как есть ограничение, то можно попробовать двигать окно данных, вернее сдвигать его построчно или от источника к источнику.
 Hidden text TOTALCMD#BAR#DATA
60021
%COMMANDER_EXE%
Сброс колонок|Alt - сдвиг строк|Ctrl - сдвиг источника|Shift - Тип шаблона / Реверс
-1
Кнопка будет управлять движением. Alt - сдвиг на 20 строк. Alt+Shift - сдвиг назад на 20 строк. Ctrl - сдвиг на следующий источник. Ctrl+Shift - сдвиг на предыдущий источник. Простое нажатие на кнопку сбрасывает номер строки и номер источника в 0. Вызов с Shift меняет тип подсказки.
Глобальные переменные желательно объявить сразу после Pragma AutorunPluginFields "C1:::JoinHint" в файле autorun.cfg, иначе при старте ТС могут появляться сообщения об ошибках (если пользовательские колонки уже загружены, а функция JoinHint начинает выполняться раньше, чем переменные были инициализированы):
Code: | Global MI_LINE = 0, MI_SOURCE = 0, MI_HINT = 1 |
Остальной код может быть в отдельном модуле:
 Hidden text Code: | RegisterCommand 60021 "MediaInfoFields"
Func MediaInfoFields(lParam)
Local b_SHIFT = IsPressed (0x10), b_CTRL = IsPressed (0x11), b_ALT = IsPressed (0x12)
IF b_SHIFT And Not (b_ALT Or b_CTRL) Then
MI_HINT += 1
If MI_HINT > 2 Then MI_HINT = 1
If MI_HINT = 1 Then
ShowHint("MediaInfo: ru.csv")
Else
ShowHint("MediaInfo: hint.txt")
Endif
Return
EndIf
Local nMode = 0
If b_CTRL Then
nMode = 2
If b_SHIFT Then
MI_SOURCE -= 1
If MI_SOURCE = 0 Then MI_LINE = 0
Else
MI_SOURCE += 1
EndIf
ElseIf b_ALT Then
If MI_SOURCE > 0 Then
ShowHint("Сдвиг невозможен: источник > 0")
Return
EndIf
nMode = 1
If b_SHIFT Then
MI_LINE -= 20
Else
MI_LINE += 20
EndIf
Else
MI_LINE = 0
MI_SOURCE = 0
EndIf
If MI_LINE < 0 Then MI_LINE = 0
If MI_SOURCE < 0 Then MI_SOURCE = 0
CommandExec cm_RereadSource
If nMode < 2 Then
ShowHint("Lines: " & MI_LINE)
Else
ShowHint("Source: " & MI_SOURCE)
EndIf
EndFunc
Func JoinHint(FileName, FieldIndex, UnitIndex)
If StrPos(FileGetAttr(FileName), "D") Then Return ""
Static pipe, line = 0
Static sLib = "MediaInfo" & (auX64 ? "" : "_i386") & ".dll"
Static hLib = DllCall("LoadLibrary", _
"wstr", COMMANDER_PATH & "\Utilities\MediaInfo\" & sLib, _
"ptr")
If hLib = 0 Then
Return "Error LoadLibrary " & sLib
EndIf
If FieldIndex = 1 Then
Local hMI = DllCall(sLib & "\MediaInfo_New", "ptr")
If hMI = 0 Then
Return "MediaInfo_New returned 0"
Endif
Local lng_MI ="file://" & COMMANDER_PATH & "\Utilities\MediaInfo\ru.csv"
DllCall(sLib & "\MediaInfo_Option", _
"ptr", hMI, "wstr", "Language", "wstr", lng_MI, _
"wstr")
If DllCall(sLib & "\MediaInfo_Open", _
"ptr", hMI, "wstr", FileName, _
"uint") <> 1 Then
DllCall(sLib & "\MediaInfo_Delete", "ptr", hMI)
Return "MediaInfo_Open failed to open file " & FileName
EndIf
DllCall(sLib & "\MediaInfo_Option", _
"ptr", hMI, "wstr", "Complete", "wstr", "0", _
"wstr")
If MI_HINT = 2 Then
DllCall(sLib & "\MediaInfo_Option", _
"ptr", hMI, _
"wstr", "Output", _
"wstr", "file://" & COMMANDER_PATH & "\Utilities\MediaInfo\hint.txt", _
"wstr")
Else
DllCall(sLib & "\MediaInfo_Option", "ptr", hMI, "wstr", "Output", "wstr", "", "wstr")
Endif
pipe = DllCall(sLib & "\MediaInfo_Inform", "ptr", hMI, "uint", 0, "wstr")
DllCall(sLib & "\MediaInfo_Delete", "ptr", hMI)
If MI_SOURCE > 0 Then
Local aPipe = List(), j, s = 0
aPipe.Text = pipe
For j = 0 To aPipe.Count - 1
If aPipe[j] = "" Then s += 1
If s = MI_SOURCE Then
MI_LINE = j + 1
Break
EndIf
Next
Free(aPipe)
Endif
Endif
Return TrimSpacesFix(StrPart(pipe, auLF, FieldIndex + MI_LINE))
EndFunc
|
Вряд ли это можно считать готовым решением, но как рабочий пример вдруг наведёт на какие-то другие мысли и идеи использования. |
|