Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Drag&Drop на главной панели инструментов 
Author Message
Orion9



PostPosted: Thu Jul 16, 2026 14:14    Post subject: Reply with quote

sa wrote:
Можно использовать и 2926 (Цепочки навигации: вкл/выкл) и 2910 (Командная строка: вкл/выкл) и т.п.

Ну, пока и так работает Very Happy Целый час вчера гонял. Нельзя назвать это стресс-тестом панели, конечно, но уже что-то.

И кстати, ошибок никаких не словил, это радует! Думаю, сейчас ошибки могут быть только на стадии поиска и загрузки панели (первые три функции - HBarShowHint, HBarGetFile, HBarLoad). Плохо, что окно панели не хранит путь к панели, это создает трудности. Т.ч. придется пересматривать эти функции и делать проверку на конфликт имен, что-то вроде
Code:
Func HBarConflict()
    Local bars = List(), text, num = 0
    bars.Text = FileFind(COMMANDER_PATH, "*.bar", -1, 1)
    For i = 0 To bars.Count - 1
        If StrPos(bars[i], gHBarName, -1) > 0 Then
           num += 1
           text &= bars[i] & auCRLF
        Endif   
    Next
    If num < 2 Then text = ""
    Return text   
EndFunc

Но здесь не учитывается путь к панели из wincmd.ini и путь активной панели. От последнего, думаю, надо избавляться, чтобы он не создавал путаницу. Но это всё-равно не поможет, если OPENBAR будет вызван из самого ТС с произвольным путем к панели.

Самое неприятное, что когда OPENBAR открывает файл, дескриптор панели не меняется. Т.е. если я открою DEFAULT.BAR из каталога D:\Temp и если у меня открыта главная панель как %COMMANDER_PATH%\DEFAULT.BAR, то нет никакой возможности узнать, какая из этих двух панелей открыта в данный момент только по имени файла.

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

sa wrote:
У меня команда заработала, когда вместо %A0 записал просто %A.

Спасибо, подправил. Убрал заодно снятие оконной процедуры при открытии через OPENBAR. Видимо, в нем была проблема. Еще Loopback писал, что вешается-то она легко, а вот снимается с ошибками. У меня она, похоже, вообше не снималась или снималась через раз
Code:
DllCall("SetWindowLong" & (auX64 ? "PtrW" : "W"), _
         "hwnd", hBarWnd, "int", -4, "long_ptr", gHBarWndProc, "ptr")

Добавил еще пункт "Индекс удаления 1", чтобы можно было сразу очистить панель и проверку в HBarSaveAs, хотя там лучше сделать через копипование файла, но это потом.

Последний тестовый модуль.

 Bars.aucfg


Если кто-то хочет попробовать не подключая к своему ТС, можно взять готовую сборку и заменить модуль Bars.aucfg в каталоге Scripts
Ссылка 1
Ссылка 1
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group