Autorun

Обсуждение только плагинов и утилит для Total Commander.

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

Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Orion9 писал(а):умение Autorun каким-то образом сообщать статус долгих операций
Не очень понятно, что под этим понимается. Долгие операции обычно всё же состоят из каких-то более мелких подопераций, ну выводите состояние через сколько-нибудь штук. А уж формат вывода - тут вообще всё зависит от пользователя, как он захочет, так и сделает. Можно в заголовок, можно подсказкой, можно еще как-нибудь.
AkulaBig писал(а):В DllCall не работает:
Присвоил переменной util_MI путь к библиотеке - далее всё работает.
Проверяйте тщательно, что в util_MI. Может dll другой битности (скорее всего) или малозаметная ошибка какая.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Loopback писал(а):роверяйте тщательно, что в util_MI
Вроде все сто раз посмотрел. Тогда-бы и в TCMediaInfo не работало.
Вот так у меня:

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

If AUTORUN_TCARCH = 32 Then
	SetEnv /EV util_MI %COMMANDER_PATH%\Utilities\MediaInfo\MediaInfo.dll
Else 
	SetEnv /EV util_MI %COMMANDER_PATH%\Utilities\MediaInfo\MediaInfo_x64.dll
EndIf
Вот так давно работает:

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

	Static sLib = "MediaInfo" & (auX64 ? "_x64" : "") & ".dll"
	Static hLib = DllCall("LoadLibrary", _
			"wstr", COMMANDER_PATH & "\Utilities\MediaInfo" & sLib, _
			"ptr")
	If hLib = 0 Then
		Return "Error LoadLibrary " & sLib
	EndIf
Так что надо именно через SetEnv.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

Loopback писал(а):Можно в заголовок, можно подсказкой, можно еще как-нибудь.
Вот о "еще как-нибуть" как раз и речь )

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

Добавлено спустя 5 минут:

AkulaBig

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

SetEnv /EV util_MI %COMMANDER_PATH%\Utilities\MediaInfo\MediaInfo.dll 
А зачем /EV и почему кавычек в пути нет?
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

AkulaBig писал(а):Так что надо именно через SetEnv.
Проверил через SetEnv, работает всё равно.
Orion9 писал(а):А зачем /EV и почему кавычек в пути нет?
/EV у многих кочует с древних времен, сейчас он просто ничего не делает. Лучше убирать, чтобы не засорять код.

Без кавычек в командной записи можно, если пробелов нет.
Orion9 писал(а):По идеи нужна отдельная форма или панель для отрисовки прогресса и вывода сообщений
Ну может быть когда-нибудь в Tweaks можно будет засунуть что-то простенькое типа ProgressOn/ProgressSet из Autoit. Не более того и точно не в первую очередь.

С треем и так есть рабочие несложные примеры.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):По идеи нужна отдельная форма или панель для отрисовки прогресса и вывода сообщений, как это сделано, например, в TCIMG
Приятно, что вы изменили свое мнение о TCIMG. Я вообще не представляю свою жизнь без прогресс-бара TCIMG. Он стоит вторым пунктом, почему я пользуюсь TCIMG. Первым моя кнопка ПИ.
Orion9 писал(а):А зачем /EV и почему кавычек в пути нет?
Loopback писал(а):/EV у многих кочует с древних времен, сейчас он просто ничего не делает.
Присутствует именно по этой причине. В свое время у кого-то скопипастил.
Loopback писал(а):Лучше убирать, чтобы не засорять код.
Понял, уберу.
Loopback писал(а):Без кавычек в командной записи можно, если пробелов нет.
Хм. Жестко тестил свою сборку на кавычки именно с путями с пробелами, причем вложенными. От вложенности тоже зависит. Эти записи работали. Ладно, попробую еще раз потестить. Может именно в этом причина.

Добавлено спустя 42 минуты:

Так, условия немного изменились. Когда не загружается сама библиотека, сообщение о ошибке свое. Это как-раз если перепутаны разрядность или неправильный путь.
А сейчас вот эту выдает ошибку:

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

		Local hMI = DllCall(sLib & "\MediaInfo_New", "ptr")
		If hMI = 0 Then
			Return "MediaInfo_New returned 0"
		Endif
То-есть не может создать дескриптор. Получается при использовании переменной формат записи должен быть другой.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

AkulaBig писал(а):Жестко тестил свою сборку на кавычки именно с путями с пробелами, причем вложенными. От вложенности тоже зависит. Эти записи работали. Ладно, попробую еще раз потестить. Может именно в этом причина.
Имелось в виду, что в командной записи так можно без кавычек

SetEnv util_MI %COMMANDER_PATH%\Utilities\MediaInfo\MediaInfo.dll

а так, например, нельзя:

SetEnv util_MI %COMMANDER_PATH%\My Utilities\MediaInfo\MediaInfo.dll

Во втором случае надо окавычивать.

Если пробелы появляются из переменной окружения, то это уже не будет проблемой.

Но в принципе, я бы советовал кавычки для строк использовать всегда.
AkulaBig писал(а):А сейчас вот эту выдает ошибку:
Да, а вот тут действительно есть баг в DllCall с обработкой полного пути dll. Исправлю, а пока можно решить, просто передавая имя модуля без полного пути:

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

    Static sLib = util_MI
    Local sLibName = FileGetName(util_MI)

    ...

    Local hMI = DllCall(sLibName & "\MediaInfo_New", "ptr")
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

Гы-гы...) Если в примере со значком заменить инстансы на 6 и 10:

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

    Local hWnd = WinFind(AUTORUN_TCHANDLE, _
                        (AUTORUN_TCARCH = 32 ? "TMyPanel" : "Window"), _
                        (AUTORUN_TCARCH = 32 ? 6 : 10))
И добавить пикселей до 16:

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

    DllCall("DrawIconEx", _
                   "ptr", hDC, _
                   "int", w - 20, _
                   "int", 1, _
                   "ptr", hIco, _
                   "int", 16, _
                   "int", 16,  _
                   "uint", 0, _
                   "ptr", 0,  _
                   "uint", 0x0003)
То "пропеллер" будет вращаться над панелью, что, на мой взгляд, смотрится ещё лучше и интереснее. Но... С 64-битном ТС не всё так однозначно. Loopback, хочу у вас спросить: он что, инстансы динамически нумерует? :shock: Вот те' раз... Однако.) А что же делать тогда? Как определять контрол?
Loopback писал(а):/EV у многих кочует с древних времен, сейчас он просто ничего не делает. Лучше убирать, чтобы не засорять код.
Да, вспомнил. Было такое уже.
Loopback писал(а):Без кавычек в командной записи можно, если пробелов нет.
Т.е. переменная %COMMANDER_PATH% раскрывается и работает даже с пробелами? Не знал о таком. Думал, что кавычки обязательны, или по крайней мере желательны.
Loopback писал(а):Ну может быть когда-нибудь в Tweaks можно будет засунуть что-то простенькое типа ProgressOn/ProgressSet из Autoit.
Как ни посмотри, а иметь что-то нужно для таких задач. Вы, например, в последних версиях вставили симпатичную формочку сообщающую об ошибках Autorun, лучше же стало намного.
AkulaBig писал(а):Приятно, что вы изменили свое мнение о TCIMG.
Разве? ) Не так давно я действительно сравнивал эти две утилиты, но с тех пор ничего не изменялось. Это два похожих, но разноплановых инструмента. Оба пригодятся в хозяйстве, но для разных задач. Например, с помощью TCIMG вы не сможете создавать и изменять переменные окружения процесса TOTALCMD, и это ограничение ничем не обойти. А в Autorun для этого есть функция SetEnv, которую вы сейчас хотите использовать.
AkulaBig писал(а):Я вообще не представляю свою жизнь без прогресс-бара TCIMG.
Без прогресс-бара я свою жизнь тоже не представляю, но почему этот прогресс-бар должен обязательно быть в TCIMG? )
AkulaBig писал(а):Он стоит вторым пунктом, почему я пользуюсь TCIMG. Первым моя кнопка ПИ.
С высоким приоритетом в целом согласен, у меня возможность вывода удобных сообщений о статусе операции тоже не на последних ролях, поэтому и написал об этом. Странно, что Loopback придаёт этому низкое значение и приоритет.
AkulaBig писал(а):А сейчас вот эту выдает ошибку:
А почему вы хотете использовать переменную окружения для этого? Можно же просто создать глобальную переменную дополнительно для этих целей. У меня сейчас так и сделано практически для всех внешних утилит и каталогов первыми строками основного модуля.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Loopback писал(а):а так, например, нельзя
Это конечно понятно. Но тут даже более интересная фича. %COMMANDER_PATH% где-то можно и без кавычек использовать, а где-то нельзя. Я имею ввиду не Autorun. В Autorun как-раз можно без кавычек. Проверено. Но от греха подальше закавычил все.
Loopback писал(а):Да, а вот тут действительно есть баг в DllCall с обработкой полного пути dll.
Ой, хорошо что это не мой косяк. А то я уже волноваться начал :twisted:
Loopback писал(а): а пока можно решить
Спасибо, попробую. Кстати, полезное дело я сделал. Помимо выявленного бага еще попутно одну проблемку решил из взаимодействия MI в разных плагинах. Хинты через Autorun отлично подхватывают русский язык. А вот у TCMediaInfo какая-то проблема возникла. Для ее решения пришлось в Autorun вынести подключение языка из функции хинтов в основную. Объяснить трудно. Вот скрины:
Изображение
Изображение

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

		<source name="G_OverallBitRate" field="OverallBitRate/String"/>
Первый скрин просмотр из MI через TCMI. Второй скрин с подключение языка в Autorun:

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

# Установить язык названий параметров
# Set language of parameters
Switch AUTORUN_TCLANG
	Case 'RUS'
		# Имя DLL в зависимости от разрядности TC
		# DLL name depending on discharge TC
		Static sLib = "MediaInfo" & (auX64 ? "_x64" : "") & ".dll"
		# Static sLib = util_MI
	
		# Загрузить DLL
		# Open DLL
		Static hLib = DllCall("LoadLibrary", _
				"wstr", COMMANDER_PATH & "\Utilities\MediaInfo" & sLib, _
				"ptr")
		If hLib = 0 Then
			Return "Error LoadLibrary " & sLib
		EndIf
	
			# Получить дескриптор DLL
			# Get DLL descriptor
			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")

		# Удалить дескриптор DLL
		# Delete DLL descriptor
		DllCall(sLib & "\MediaInfo_Delete", "ptr", hMI)
EndSwitch
Я не думаю, что это глюк.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Orion9 писал(а):он что, инстансы динамически нумерует?
А что такое инстанс? Это просто порядковый номер контрола.

И в x64 есть проблема, что некоторые контролы создаются со значительной задержкой. С этой проблемой сталкивались в ModifyDialog. Autorun пытается найти контрол с определенным экземпляром, но в момент поиска некоторые контролы еще не созданы, в результате получает либо неправильный контрол, либо вообще не может его найти.
Orion9 писал(а):Т.е. переменная %COMMANDER_PATH% раскрывается и работает даже с пробелами?
Да, главное чтобы строку мог прочитать парсер, а пробелы, которые возникнут внутри после раскрытия переменной уже не страшны.
Orion9 писал(а):симпатичную формочку сообщающую об ошибках Autorun, лучше же стало намного.
Ну там было несколько резонов: и в целях лучшей читабельности значений, и возможности поменять шрифт на моноширинный, и лучшая стабильность под х64, и возможность продолжить/прервать скрипт. Прогресс мне представляется намнооого менее полезным и применимым.
Orion9 писал(а):Странно, что Loopback придаёт этому низкое значение и приоритет.
Потому что Autorun не интерактивное графическое приложение, с диалогами, статусными строками и тому подобным. Таким приложением является тотал, а Autorun лишь дополнение к нему.
Orion9 писал(а):Первый скрин просмотр из MI через TCMI.
Каким образом и где производится просмотр?
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Loopback писал(а):передавая имя модуля без полного пути
Да, так работает. Но в загрузке библиотеке надо использовать переменную util_MI.

Добавлено спустя 10 минут:
Orion9 писал(а):Без прогресс-бара я свою жизнь тоже не представляю, но почему этот прогресс-бар должен обязательно быть в TCIMG? )
Элементарно, Кэп. Потому что его нет в Autorun :lol: Ну и даже если он появится в каком-то простейшем варианте, меня это не устроит. Мне-же надо выводить проценты после определенных шагов операций.
Orion9 писал(а):А почему вы хотете использовать переменную окружения для этого?
Потому что даже в файле autorun.example.cfg именно этот метод показан.

Добавлено спустя 7 минут:
Loopback писал(а):Каким образом и где производится просмотр?
Просто запустил просмотр пользовательских колонок, сформированных в плагине TCMediaInfo. Почему-то единицы измерения на английском показывает. А по Ф3 на русском. Вообще не понятно. Наверное мы немного офтопим. Вообще-то это к TCMediaInfo относится. Но мы и не так офтопили. Поэтому сердце мое спокойно 8) С другой стороны проблема TCMediaInfo решается через Autorun. Вроде-бы все по теме.

Добавлено спустя 5 минут:

Orion9
Кстати, вы-же забраковали мой набор пользовательских колонок со всеми существующими значениями. А я тут запускал его именно в альбоме каком-нибудь. Нормально смотрится, когда файлы из одного альбома.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

AkulaBig писал(а):Почему-то единицы измерения на английском показывает.
Потому что используется поле OverallBitRate/String. Такие поля (уже содержащие единицы) встроенной в плагин системой перевода не переводятся.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Loopback писал(а): Такие поля (уже содержащие единицы) встроенной в плагин системой перевода не переводятся.
Значит я прикольную фичу нашел. Если подключить родной язык, все переводится.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

Loopback
GetSelectedItems действительно быстрее стала работать, проверил сейчас. Изначально хотел вставить такую строку:

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

If GetSelectedItems(3, 0) = '' And GetCurrentItem(3, 2) = 0 Then
Чтобы проверять наличие объекта под курсором, когда на панели ничего не выделено. Иначе ТС выкидывает MessageBox при выполнении команды cm_CopyHdrFileDetailsToClip. Но на больших списках скорости все-равно недостаточно. Поэтому решил, что лучше сначала посылать команду cm_GoToFirstEntry, если под курсором пусто, и только потом делать повторную проверку. Также убрал обнуление массивов, теперь и без этого работает, спасибо за фиксы в новой версии. Ниже последний код функции для подсчета значений в колонках:

[cut]

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

RegisterCommand 62015 "Summarize"

Global SUM_THREAD = 0, SUM_MX = 0, SUM_MY = 0

Func Summarize(lParam)
    If SUM_THREAD > 0 Then
       SUM_THREAD = 0
       Sleep(250)
       Return
    EndIf
    If Not IsPressed(0x11) Then
       MouseGetPos("SUM_MX", "SUM_MY")
       SumUpColumns(1)
       Return
    EndIf
    # CTRL запуск потока   
    RunThread ThreadSumCustomView    
EndFunc    

Func ThreadSumCustomView()
    Local i
    SUM_THREAD = 1    
    MouseGetPos("SUM_MX", "SUM_MY")    
    While SUM_THREAD > 0    
       SumUpColumns(0)
       For i = 1 To 10
           If SUM_THREAD = 0 Or (IsPressed (0x11) And IsPressed (0x1B)) Then
              SUM_THREAD = 0
              ShowHint("Операция прервана")
              Break
           EndIf   
           Sleep(50)
       Next
    Wend
    SUM_THREAD = 0
EndFunc

Func SumUpColumns(lWait = 0)
    Local txt, i, j, T1 = GetUptime()
    If GetCurrentItem(3, 2) = 0 Then 
       SendCommand(2049, 0, 1)		#cm_GoToFirstEntry
    Endif   
    If GetCurrentItem(3, 2) = 0 Then     
       ShowHint("Index = 0", SUM_MX, SUM_MY, 1000, 1)
       Return
    EndIf    
    ShowHint("Clipboard Waiting", SUM_MX, SUM_MY, (lWait ? "" : 1000), (lWait ? "" : 1))
    Local bReady = false, sMsg   
    Local aSel = List(), aCol = List(), _
          aVal = List(), aRow = List()
    SendCommand(2090, 0, 1)		# cm_CopyHdrFileDetailsToClip
    txt = ClipGet()
    If StrLen(txt) > 0 Then 
       bReady = true
       aSel.Text = txt
    EndIf
    If StrPos(aSel[0], auTAB) = 0 Then
       bReady = false
       sMsg = "Clipboard Data Incorrect"
    Endif   
    If Not bReady Then
       If lWait Then
          ShowHint(sMsg, SUM_MX, SUM_MY)
       Else
          ShowHint(sMsg, SUM_MX, SUM_MY, 1000, 1)
       Endif      
       Free(aSel, aCol, aRow, aVal)       
       Return
    Endif
    aCol.Split(aSel[0], auTAB)
    aVal.Count = aCol.Count
    txt = ""
    For j = 1 To aSel.Count - 1 
        aRow.Split(aSel[j], auTAB)
        For i = 0 To aRow.Count - 1
            If StrPos(aRow[i], Chr(160)) Then
               aRow[i] = StrReplace(aRow[i], Chr(160), "")
            EndIf   
            If IsNumber(aRow[i]) Then aVal[i] += aRow[i]
        Next
    Next
    For j = 0 To aCol.Count - 1 
        txt &= aCol[j] & ": " & aVal[j] & auCRLF        
    Next
    Local TL = Round(GetUptime() - T1, 0) / 1000    
    txt &= "---" & auCRLF & _
           "Selected: " & aSel.Count - 1 & auCRLF & _
           "Powered by Autorun.wdx" & auCRLF & _
           "Время операции: " & StrFormat("%.3f", TL) & " sec"
    Free(aSel, aCol, aRow, aVal)
    If lWait Then
       ShowHint(StrTrim(txt), SUM_MX, SUM_MY)
    Else
       ShowHint(StrTrim(txt), SUM_MX, SUM_MY, 1000, 1)
    Endif   
EndFunc
[/cut]
Код, конечно, можно ещё пересматривать и дорабатывать, но сделать пока этого не смогу.
Loopback писал(а):А что такое инстанс? Это просто порядковый номер контрола.
А когда он присваивается, на стадии проектирования или при запуске процесса?

Я думал, это значение постоянное и надежное, и что оно не должно меняться на лету. Autorun тут ни при чём. Я смотрел через Autoit v3 Windows Info. Если в ТС х86 строка состояния левой панели всегда равна TMyPanel5, то в ТС х64 значение инстанса данного элемента меняется прямо на ходу в зависимости от общего числа элементов интерфейса, которые отображаются в окне ТС, т.е. кнопки дисков, выпадающий список дисков, панель инструментов и т.д. Для удобства я использовал TCFS2, чтобы сразу убирать и добавлять по несколько элементов. Строка состояния левой панели при этом болтается как маятник - то Window 7, то Window 6, то опять Window 7, то снова Window 6. Но даже если просто через меню "Настройки" -> "Вид окна" убирать или добавлять компоненты по одной галочке, значение инстанса будет становиться другим, например Window 9 или Window 5, короче, таким, каким ему вздумается. Хочу еще раз отметить: такое происходит только в х64. В обычном 32-битном ТС всё нормально, хотя я не проводил глубоких тестов. Но вы видите у себя такую проблему?
Loopback писал(а):Потому что Autorun не интерактивное графическое приложение, с диалогами, статусными строками и тому подобным.
Ну, вы так расписываете, словно вам действительно ставят задачу сделать из Autorun интерактивное графическое приложение ) На деле лишь просят добавить 1-2 формы для более удобного вывода сообщений и отображения статуса операций. В общем, нужно что-то вроде эквивалента командам infbx и prgrs в TCIMG. Если это возможно сделать, хотелось бы увидить в будущих версиях.
AkulaBig писал(а): Мне-же надо выводить проценты после определенных шагов операций
Ну так сам прогресс-бар и запрос к Loopback как раз об этом.
AkulaBig писал(а):Потому что даже в файле autorun.example.cfg именно этот метод показан.
Да, давненько я не открывал этот файл. Вижу, есть в нём некоторые изменения. А установкой переменных окружения в зависимости от разрядности я тоже пользуюсь, например:

[cut]

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

If SYSINFO_OSARCH = 64 and AUTORUN_TCARCH = 32 Then
   SetEnv COMMANDER_SYSTEM32 "%windir%\Sysnative"
Else
   SetEnv COMMANDER_SYSTEM32 "%windir%\system32"
EndIf

SetEnv NIRSOFT "%COMMANDER_PATH%\Utilites\NirSoft\NirSoft"
If SYSINFO_OSARCH = 64 Then
   SetEnv NIRSOFT %"NIRSOFT & '\x64'"
Endif
[/cut]
AkulaBig писал(а):Кстати, вы-же забраковали мой набор пользовательских колонок со всеми существующими значениями. А я тут запускал его именно в альбоме каком-нибудь. Нормально смотрится, когда файлы из одного альбома.
Где же я его забраковал, если я как раз писал, что нормально смотрится только на похожих файлах, например дискографиях исполнителей. А альбомы и есть составная часть дискографий.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Orion9 писал(а):А когда он присваивается, на стадии проектирования или при запуске процесса?
Он не присваивается, он определяется порядком, в котором в макете диалога создаются контролы. Или порядком, в каком они создаются при создании в рантайме. Когда начинается поиск контрола с определенным классом, первый найденный считаем 1, второй - 2 и т.д. Так что можно считать "на стадии проектирования".

Но это в обычных окнах, да и c формами Delphi всё ок. А вот в Lazarus, на котором пишется TC64, что-то странное. Возможно, там есть какой-то механизм "ленивой" загрузки формы, который создает контролы не сразу, а постепенно. Как иначе объяснить такое поведение я не знаю.
Orion9 писал(а):Если это возможно сделать, хотелось бы увидить в будущих версиях.
Ну я же написал, что возможно. Но не сейчас.
Orion9 писал(а):Да, давненько я не открывал этот файл.
Там много лет ничего практически не менялось. Перед релизом надо будет обновить, конечно.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):Да, давненько я не открывал этот файл
Я тоже давно. Но смотрел.
Orion9 писал(а):нормально смотрится только на похожих файлах, например дискографиях исполнителей. А альбомы и есть составная часть дискографий.
Ну да.
Ответить