[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1269
  • Репутация:126

    [+] [-]
LauncherPB
Скачать

Скриншоты

Последнее обновление:
Добавлено действие по правой кнопки мыши на кнопке, в ini-файл добавляется параметр url=ссылка. Если указана ссылка, то открывает её, иначе открывает исполняемый файл (exe=) в проводнике. Можно указать файл из текущей папки, из системных или прямой путь (C:\...). Раскрытие переменных тут не работает.
Исправление подсказки, не смешивается мультяшная балон с квадратной.
LargeIcon перенесён в глобальные настройки, LargeIcon2 - для кнопок с координатами.

параметры

Параметры ini-файла
[gui]
Title=Launcher - Заголовок окна
icon=launcher.ico - иконка окна
FormX=10 - x-координата окна, если не указаны обе координаты, то по центру
FormY=10 - y-координата окна, если не указаны обе координаты, то по центру
FormWidth=430 - Ширина окна
FormHeight=310 - Высота окна
FormStyle=2156396544 - стиль окна, обычно заголовка. 13107200 - без кнопки "Свернуть", 13107204 - узкий заголовок - панель инструментов, 2156396544 - без заголовка
Picture = Launcher.bmp - картинка
GuiBkColor=3F3F3F - Цвет фона если картинка не найдена
AreaX=90 - x-координата заданной области для кнопок
AreaY=70 - y-координата области
AreaWidth=320 - ширина области
AreaHeight=220 - высота области
Margin=5 - промежутки между кнопок
Columns=2 - число колонок, вертикальных рядов
FontName=Consolas - название шрифта
FontSize=14 - размер шрифта
FontStyle=256 - стиль шрифта
BtnAlign=256 - Выравнивание текста на кнопке (по умолчанию по центру, 256 - слева, 512 - справа, 8192 - многостроковый, 1 - выбранная). Для многострокового тильда "~" используется в качестве переноса строки и заменяется на CRLF.
BtnMinW= - минимальная ширина кнопки
BtnMinH= - минимальная высота кнопки
BtnColor= - пока не используется (цвет кнопки)
Wow64=1 - отключает перенаправление в SysWOW64 для 32-битной программы на ОС x64
Esc=1 - добавляет хоткей Esc для закрытия программы.
TipStyle=1 - задаёт стиль всплывающей подсказки. Может быть суммой флагов 1, 2, 64, где 1 - включает заголовок и иконку, 2 - показывает exe и arg, 64 - мультяшный вид подсказки.
TipWidth=220 - ширина всплывающей подсказки.
TipTime=15 - время отображения всплывающей подсказки.
CRLF=~ - символ переноса используемый в параметрах warntext, hint, в названии кнопки при включенном флаге "многострочный текст". Например "warntext=текст~подсказки" будет 2 строки.
LargeIcon = 1 - Размер иконки, если 1 то 32, если 0, то 16
LargeIcon2 = 1 - Размер иконки для кнопок с координатами
Если данные области Area не указаны, то по умолчанию вся площадь окна.
Если FormX и FormY не указана или оба равны 0, то применяется центрирование окна.
Если не задан Picture, то применяется GuiBkColor, если и он не указан, то стандартное серое окно.
Если FontName не указан, то никакие настройки шрифта не применяются.
Если указан минимальный размер кнопки (чтобы вместился текст) и размер кнопок вычислен меньше минимального, то область Area или окно будет увеличено, а кнопки создаются с минимальным указанным размером.
Кнопки
[6] - название секции не имеет значения, главное чтобы не повторялись
name=Calc - Название программы - отображается на кнопке
hint=Run Calc - Подсказка при наведении мыши
exe=calc.exe - Исполняемый файл, полный путь или относительный
arg=\k - аргументы/параметры для исполняемого файла
hotkey=Alt + q - Горячая клавиша. Если использована, то добавиться в контекстное меню, вызываемое правым кликом мыши.
url=https://... - если указана ссылка, то открывает её, иначе открывает исполняемый файл (exe=) в проводнике. Можно указать файл из текущей папки или прямой путь (C:\...)..
icon=calc.exe - иконка, полный путь или относительный
Admin = 1 - Запускает программу от админа
exit = 1 - Закрывает лаунчер после нажатия кнопки, запуская перед этим программу
hide = 1 - Скрывает процесс, полезно для запуска консольных программ
warn=1 - Показать сообщение с требованием подтверждения операции, если кнопка опасна (перезагрузка и т.д.)
warntext=моя подсказка - при использовании warn задаёт свой текст диалога предупреждения перед запуском. При этом указать warn=2
[7]
name=Выход
exe=Exit - особый случай, если Exit, то закрывает окно ничего не запуская
[8]
bhide=1 - создаёт пустое пространство по размеру кнопки, чтобы визуально разделить кнопки между собой.
Ком-строка
Можно передать программе ini-файл, чтобы открыть копию программы с другим конфигурационным файлом. Указывается имя файла или относительный путь, относительно текущей папки программы.
Различные сборки/компиляции
Launcher.exe - поддерживает только *.bmp-файлы в качестве фона и имеет минимальный размер исполняемого файла. Этот вариант идеален без использования фона.
Launcher-OWNER.exe - Поддерживает цвет кнопок (цвет фона, каймы, шрифта).
LauncherXYWH-UDLR_Uni.exe - поддерживает координаты кнопки, например xywh=5,5,155,40. Позволяет сделать отдельные кнопки, например как кнопки переключения вкладок, при этом загружая иной конфиг. Также можно сделать кнопки с указанием автора сборника или информационная кнопка, указывающая как пользоваться сборником. Аббревиатура UDLR означает выбор кнопок стрелками клавиатуры и Enter. Uni - означает поддержка jpg, gif, png, tga в качестве фона
Стиль шрифта FontStyle поддерживает флаги:
256 - жирный
512 - курсив
4 - подчёркнутый
8 - перечёркнутый
16 - наилучшее качество
просто суммировать флаги, например 264 (256+8) включит соответствующее.
Автовычисление
Можно указать только минимальный размер кнопок и число колонок, при этом размер окна вычисляется автоматически, чтобы кнопки уместились.
BtnMinW = 200
BtnMinH = 44
Columns = 2
Важно учесть, что задавая область кнопок "Area", её размер условный, например при вычислении 10 кнопок на высоте области 335 получим высоту кнопки 33,5 пиксел, но так как пиксел не делится на десятые доли, то размер кнопки будет 33 пиксел, умножаем на 10 кнопок и получаем область кнопок 330, а не 335, конечно с учётом отступом, но они опущены, чтобы показать пример того, что размер области кнопок не будет соответствовать действительности, поэтому когда отступ под кнопками или справа от кнопок не соответствует действительности и выглядит несимметрично, то учитывайте эту погрешность и самостоятельно определяйте правильный размер окна и области кнопок. Если у вас 20 кнопок по высоте и изменение размера кнопки на 1 пиксел провоцирует изменение области кнопок на 20 пикселов Вычислить самостоятельно область кнопок так: высоту кнопки (28) прибавить отступ (2), умножить на число кнопок (20) и прибавить ещё отступ (2) получим высоту области 602, т.е. (28 + 2) * 20 + 2 = 602. Можно было бы делать округление и получить 33 пиксел, потом 37 пиксел вместо 36, но тогда кнопки бы скакали по размерам и по отступам в пределах пиксела и если отступ то 2, то 3 пиксела, это будет выглядеть неприглядно.
Поиск
Используйте Ctrl+F или пункт меню, чтобы быстро найти кнопку по тексту, кнопка будет подсвечена и активирована, достаточно нажать Enter. Вводить достаточно часть слова и даже одну букву, текст проверяется что он есть в названии кнопки без учёта регистра. Если найдено 2 и более кнопок, то выводится сообщения о найденных кнопках и можно указать более точный запрос, при этом первая найденная станет активной. Если ничего не найдено, то сбрасывается активность какой либо кнопки.
Прочее
Если нажать F1 (не удерживая), и после этого кликнуть любую кнопку, то вместо запуска появится диалоговое окно с отображением данных для этой кнопки, которые указываются в ini-файле. Таким образом понятно, что будет запущено, возможно будет важно посмотреть ключи запуска и т.д.
Переменная %%P в параметрах "exe", "arg" заменяется на x86 или x64 взависимости от того на какой ОС запущен лаунчер. Это позволяет запускать exe-файлы взависимости от битности ОС. Определяется по наличию папка SysWow64. А также передаёт переменную окружения %P%. Для примеры можно из лаунчера запустить bat-файл с таким содержанием:
echo %P%
pause


Последний раз редактировалось: AZJIO (2022-02-22 20:44), всего редактировалось 27 раз(а)

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1269
  • Репутация:126

    [+] [-]
dimo70, я вижу в окне 4 настройки, и какая из них даёт сбой? Попробуй сам поиграйся с переключением всех 4-х настроек. Разрешение - маловероятно, Scale (масштабирование) тоже маловероятно, а вот HDR и Ориентация монитора вполне возможны, так как я встречал код, где DPI получают отдельно для вертикали и отдельно для горизонтали, хотя судя по скринам там по обоим осям есть нестыковка.
Добавлено через 1 час 8 минут 51 секунда:
Вычитал информацию, что проблема может быть связана с подключением монитора с разными DPI. Если по каким то причинам DPI берётся с основного монитора, а окно переносится на второй монитор, тогда получаем эту проблему. Получается что, когда срабатывает событие перерисовки при перетаскивании окна на другой монитор, то надо запрашивать GetDpiForMonitor, то есть получать DPI для конкретного монитора.

[Цитировать]

    dimo70
  • 17296
  • Стаж: 6 лет 4 месяца
  • Сообщений: 3990
  • Репутация:26

    [+] [-]
  • Откуда: BG
AZJIO, скачал комплект и пробовал. У меня сейчас все нормально. ay az
AZJIO, а можешь сделать "драг енд дроп" в поле лаунчера чтоб работало, подобно Minst и автоуразмерение? aa
Если больше программ нужно ввести будет намного быстрее и проще.

_________________
Подпись отключена за нарушение правил форума

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1269
  • Репутация:126

    [+] [-]
dimo70, посмотрел картинки и исправил, обновление на яндексе.
1. в Launcher-OWNER.exe не центрируется иконка, исправлено.
2. Launcher_Uni - шрифт размытый, включил DPI. Вспомнил что это тоже что LauncherXYWH-UDLR_Uni.exe но без поддержки картинок во всех форматах, так что теперь там поддерживается и поиск, в общем всё что в LauncherXYWH-UDLR_Uni.exe но без картинок, то есть ради компактного размера 88.5 кб против 347 кб.
И тут же вижу ещё прокол на скрине, картинка не масштабируется.

[Цитировать]

    dimo70
  • 17296
  • Стаж: 6 лет 4 месяца
  • Сообщений: 3990
  • Репутация:26

    [+] [-]
  • Откуда: BG
AZJIO, картинка не проблема. ab

_________________
Подпись отключена за нарушение правил форума

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1269
  • Репутация:126

    [+] [-]
Обновил.
Добавил принудительное масштабирование картинки флагом PicResize.
Флаг PicResize может иметь следующие значения:
0 - без масштабирования совсем, как раньше. Позволяют использовать маленькие картинки-текстуры заливкой.
1 - принудительное по DPI, если задано масштабирование больше 100%. Удобен если размер окна и картинки совпадают, иначе будет разный вид из-за растягивания при DPI отличном от 100%.
2 - принудительное всегда, даже когда не требуется.
3 - если размер окна и картинки не совпадают или DPI больше 100%. Идеальный по отображению в отличии от 1 и эконом режим в отличии от 2. Ниже подробнее об этом режиме
Правила масштабирования для PicResize=3 следующие:
1. Масштабирование не происходит если масштаб = 100% и картинка соответствует размеру окна.
2. Предположим ситуацию, что у пользователя изначально масштаб экрана задан 125% и картинка подбирается под размер окна, при этом если лаунчер будет запущен на компе с масштабированием 100%, то картинка как бы обрежется по границам окна, например если сверху был текст до краёв экрана, то он будет обрезан, так как картинка больше чем окно. В этом случае лучше всего ставить PicResize = 3 (т.е. когда картинка больше окна, указанного в ini-файле).
3. Размер окна заданный в ini-файле должен совпадать с размером картинки, тогда будут идеальные условия, когда нет необходимости масштабировать картинку при заданном масштабировании 100% и можно задать PicResize = 3. Также при этих условиях совпадения размеров окна и картинки если флаг будет PicResize = 3, то картинка всё равно не будет масштабироваться, так как размер окна и картинки совпадает (в коде проверяется размеры окна и картинки, чтобы не делать бесполезные действия).
4. Полезно ли масштабирование? В коде включен флаг масштабирования с интерполяцией, то есть сглаженное, точнее оно по умолчанию, можно только отключить. Если картинка имеет тонкие линии или текст, то масштабирование может сделать это расплывчатым, поэтому по возможности делать картинку точно по размеру окна, не пикселом меньше или больше.
5. Если размер картинки и окна не пропорциональны, то будет растягивание рисунка, то есть он не масштабируется пропорционально.

[Цитировать]

    rezorustavi
  • 2337
  • Стаж: 8 лет 3 месяца
  • Сообщений: 928
  • Репутация:55

    [+] [-]
  • Откуда: Грузия, город Рустави
AZJIO,
aa Приветствую. Огромное Вам спасибо за труды! az

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1269
  • Репутация:126

    [+] [-]
Обновление
Исправление DPI
Также добавил 2 защиты от сбоя, если число колонок указать 0 (Columns=0), то будет исправлено на минимальное 1. И если число кнопок 0, то есть ini-файл не содержит кнопок, то просто не запускается.
Как ранее просили передать подтвердилось. Проблема проявляется если кнопка в один ряд или в одну строку. Причина в том что для рисования создаётся слой размером с окно и с него копируются линии для рисования каймы вокруг кнопки. Для поддержки прог не знающих о масштабировании все размеры в программе используются без масштабирования, поэтому создаётся слой размером меньше чем масштабированное окно. Конечно, когда ширина окна в 2 кнопки этой длины хватает то есть уменьшенное окно всё равно больше чем одна кнопка, а если в один ряд, когда ширина окна и ширина кнопки одинаковы (почти), то длины не хватает.

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1269
  • Репутация:126

    [+] [-]
Есть отдалённая надежда для исходника "Launcher-OWNER" добавить возможность индивидуального цвета каждой кнопки чтобы группировать по группам. Ну или указать указать цвет той кнопки после которой дефолтным станет указанный, тогда не нужно указывать для каждой кнопки, а только в местах переключения. Вот только надо как то связать структуру кнопки с DRAWITEMSTRUCT, тогда можно обращаться к настройкам кнопки в функции WinCallback().
Ещё планирую проверить ОС - OSVersion(), если меньше Висты, то есть WinXP, то принудительно переключить флаг перенаправления в 0, тогда на WinXP будет запускаться при любых настройках.
Ну и потерянная возможность при отсутствии ini-файла предупредить сообщением, а пока эта возможность перекрыта функцией проверки числа кнопок, естественно при отсутствии ini-файла кнопок 0 и прога выпрыгивает раньше молча не доходя до проверки наличии самого файла.
Вот такие намётки появились.

[Цитировать]

    rezorustavi
  • 2337
  • Стаж: 8 лет 3 месяца
  • Сообщений: 928
  • Репутация:55

    [+] [-]
  • Откуда: Грузия, город Рустави
95917Вот такие намётки появились.
aa ay

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1269
  • Репутация:126

    [+] [-]
Обновил, всё как перечислил ранее.
Для Launcher-OWNER добавлен индивидуальный цвет кнопки (color=550000).
Для WindowsXP принудительно отключено перенаправление, так как не существует (устранение сбоя).
Восстановлена последовательность диалога отсутствия ini-файла.

[Цитировать]

    wert
  • 23213
  • Стаж: 4 года 4 месяца
  • Сообщений: 87
  • Репутация:2

    [+] [-]
AZJIO, во классно но вот прозьба или даж необходимость а надпись без рамки не льзя делать например ссылка на сайт aa

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1269
  • Репутация:126

    [+] [-]
wert, в Launcher-OWNER можно цвет рамки сделать цветом фона.

[Цитировать]

    wert
  • 23213
  • Стаж: 4 года 4 месяца
  • Сообщений: 87
  • Репутация:2

    [+] [-]
AZJIO, спасибо чет не догодался aa az

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1269
  • Репутация:126

    [+] [-]
В идеале можно кнопку нарисовать как ссылку, то есть переделать немного Launcher-OWNER. Если фон сделать без картинки и кнопки в виде ссылки можно сделать сейчас, сделав цвет кнопок как у фона окна и цвет активной кнопки только меняется цвет текста. Но чтобы сделать фон картинкой и как бы работала прозрачность кнопки надо фактически нарисовать кнопку используя фон, то есть взять прямоугольник под кнопкой в координатах кнопки сделать его кистью-узором и закрасить кнопку, жаль данные BMP дублируются при этом, было бы удобней создать текст на фоне непосредственно. Прозрачность не поддерживается, вернее она берёт цвет под фоном - серый. В общем лень эту заморочку делать, тем более её нельзя сделать как бы ответвлением в коде, чтобы включить флагом, надо целый исходник отдельно поддерживать.

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1269
  • Репутация:126

    [+] [-]

проблема

Удалось потестить на WinXP, проблема, такой код не работает.
If OSVersion() < #PB_OS_Windows_Vista
  Import "Kernel32.lib"
    Wow64DisableWow64FsRedirection(*OldValue) ; значение *OldValue является параметром вывода, и его не следует изменять
    Wow64EnableWow64FsRedirection(bValue)    ; bValue - 0 или 1 (0 - следует отключить виртуализацию)
  EndImport
EndIf
В общем надо выпилить этот код и все упоминания (6 шт) Wow64EnableWow64FsRedirection, тогда все исходники Launcher, Launcher-OWNER и LauncherXYWH-UDLR-Search работают.
Переделал код перенаправления, теперь проверено на WinXP и на Win10, все исходники работают и проверено что перенаправление тоже работает. Это видно по msconfig, без перенаправления нет иконки и не запускается.
Ещё перезалил, подправил пункт выхода и номер версии 6.3. Во первых пункт выхода сделан через общую функцию, а изначально он был отдельно и я забыл добавить закрытие дескрипторов, и добавлял только в то событие что на крестик нажатие, поэтому если выйти через меню, то дескрипторы оставались висеть в памяти, не критично но каждый запуск отъедает память на текущей сессии, без отдачи её винде, это называют утечкой памяти, хотя есть худшие утечки, когда в процессе работы с программой она отъедает память.
Во вторых перенаправление нужно только для EXE x32 на оси х64, отсюда можно исключить код при работе EXE x64 или на оси x32, что и было сделано.

Страница 28 из 32


Показать сообщения:    

Текущее время: 18-Апр 21:33

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы