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: Autorun 
Author Message
Orion9



PostPosted: Sat Nov 01, 2025 20:45    Post subject: Reply with quote

И всё-таки я ещё раз спрошу у Гислера: ну и где здесь "случайное" перетаскивание кнопок на панели?

 Hidden text

Ладно, шучу я. Понятно, что он просто не захотел этим заморачиваться, а я взял и заморочился Smile

Последняя версия модуля.
 Bars.aucfg

Добавлена отмена действия и возврат к первоначальной панели, а также возможность создания бэкапов. Исправлено масштабирование экрана. Ветка с загрузкой панели в ANSI или UTF-16 получается не сильно нужна и остается пока недоделанной по причинам описанным выше. Однако важное замечание: если панель хранится в юникоде, по умолчанию она сохраняться будет как ANSI, если не поставить соответствующую галочку в меню. Галочка между сессиями не сохраняется, тоже имейте это в виду. У меня все панели храняться в ANSI, а к модулю я могу еще вернуться не скоро, хотя автосохранение в корректной кодировке само напрашивается.

Окно панели хранит только имя файла, информация о пути недоступна. Поэтому файлы ищутся только в каталоге ТС или подкаталоге \Bars. Если и там, и там есть одинаковое имя файла, это может привести к проблемам.

У Гислера висит своя оконная процедура, во избежание проблем приходится передавать ей управление. Чтобы избавится от клика, которая посылает эта процедура, используется подмена х-координаты указателя мыши:
Code:
MouseGetPos("x","y")
lParam = MakeInt(y, x + 200, 2)

Клик происходит на 200 пикселей правее и не приводит к запуску кнопки. Но если используется слишком большое масштабирование, запуск может произойти.

В остальном проблем не замечено. Пользуюсь с большим удовольствием )

Loopbak wrote:
А всё потому, что это не реальная функция в dll, а враппер

Понятно. Спасибо, что разобрались. Хотел было использовать что-то вроде:
Code:
Local pX, pY
Local nScale = 0, bRes
If DllCall("Ntdll.dll\IsWindows8Point1OrGreater", "bool") Then
   bRes = DllCall("Shcore.dll\GetDpiForMonitor", "hwnd", hMon, "int", 0, "uint*", @pX, "uint*", @pY)
   bRes = DllCall("Shcore.dll\GetScaleFactorForMonitor", "hwnd", hMon, "dword*", @nScale)
   nDPI = pX       
EndIf

Но почитав немного про эти функции и про DPI в целом, понял, что оно того не стоит.
Loopbak wrote:
Так задумано. Если файл содержит BOM, он всегда читается в кодировке, определяемой BOM.

Имхо, правильно задумано. А если во взятом таким образом массиве есть маркер BOM то сохраняться через SaveToFile он тоже будет корректно?

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

Забыл написать, что меню вызывается по правому клику мыши с зажатым Ctrl.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group