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

    Joker-2013
  • 1039
  • Стаж: 8 лет 9 месяцев
  • Сообщений: 2053
  • Репутация:120

    [+] [-]
  • Откуда: из прошлого
Иногда требуется собрать какое то количество программ в оболочку, для удобного запуска.
Программ AutoPlay, имеется множество, но если по каким то критериям, они не устраивают, можно написать свою.
В данной теме, покажу (напишу и выложу исходник) как создать оболочку в PureBasic (если у пользователей появится интерес к данной теме)
Как то давно, пытался понять, принципы написания программ на PureBasic...
Но язык не в какую не поддавался осмыслению.
Хотелось написать лаунчер, нарисовал окно в редакторе форм и... завис...
Долго думал, как навесить события на нажатие клавиш, как подправить дизайн созданного окна,
так как в редакторе форм, нет возможности изменять все свойства элементов...
Но так и не справился...
Теперь чуть накопил знаний, могу научить и вас.
В чем же преимущество данного Лаунчера:
Малый размер файла
Можно создать как х86 так и х64
Можно добавить любой функционал, ограниченный лишь вашими знаниями языка.
Познакомитесь с PureBasic и возможно возьмете его на вооружение.
Минусы:
Сам язык платный, но не дорогой... (в интернете можно найти, полные, свежие версии)
Рисовать интерфейс лучше вручную, указывая позицию и размер элементов
Ну или в редакторе форм, набросать интерфейс, а потом перенести код, в основной...
Набросал тестовый проект, прошу протестировать правильное отображение кнопок (сверить с картинкой)

(в PureBasic изначально нет функции показа картинки с текстом на кнопке, поэтому сделана отдельная процедура на API)
Вложение


Последний раз редактировалось: Joker-2013 (2019-03-03 16:32), всего редактировалось 2 раз(а)

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

    Joker-2013
  • 1039
  • Стаж: 8 лет 9 месяцев
  • Сообщений: 2053
  • Репутация:120

    [+] [-]
  • Откуда: из прошлого
AZJIO, смена иконки у запущенного\запускаемого файла:
SendMessage_(WindowID(0),#WM_SETICON,0,ExtractIcon_(0,"Shell32.dll",23))
If PathFileExists_(GetExePath()+"icon.ico")
    LoadImage(0, GetExePath()+"icon.ico")
    If IsImage(0)
      SendMessage_ (WindowID(0, #WM_SETICON, 0, ImageID(0))
    EndIf
  EndIf
Извлечение иконок из файла:
OpenWindow(0,0,0,320,240,"Window",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
ListIconGadget(1,10,10,300,220,"Icon #",280)
  count.l = ExtractIconEx_("C:\WINDOWS\explorer.exe",-1,0,0,0)
  For i = 0 To count - 1
   hIcon.l = 0
   ExtractIconEx_("C:\WINDOWS\explorer.exe",i,0,@hIcon,1)
   AddGadgetItem(1,-1,"Icon #" + Str(i),hIcon)
  Next
Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow


Последний раз редактировалось: Joker-2013 (2019-03-02 22:10), всего редактировалось 1 раз

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

    Joker-2013
  • 1039
  • Стаж: 8 лет 9 месяцев
  • Сообщений: 2053
  • Репутация:120

    [+] [-]
  • Откуда: из прошлого
В вообще, по поводу Лаунчера с ini...
Если есть время, то можно сделать приложение, без ручной конфигурации файла ini
Видел код, когда объекты можно двигать по окну.
В итоге, делаем небольшой конструктор, в котором можно создавать объекты, например кнопки,
размещать их в окне приложения, растягивать окно итд итп...
Или как делфи7 отдельное окно с объектами и рабочее окно...
Но нужно много сил и времени.

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

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

    [+] [-]
Joker-2013
Но нужно много сил и времени.
вот это наверно определяющее, и ещё желание. Я уже делал прогу для создания гуи где можно перемещать элементы и делать доводку до пикселей стрелками, но это в лаунчере лишнее. Я наоборот делал чтобы кнопки сами размещались автоматически. Вариант на AutoIt3 протестирован, можно указать область размещения кнопок, указать число колонок, отступы между кнопками и они сами подстроятся под размеры.
Но я пробовал лаунчеры с пропиской координат кнопок, не знаю насколько это удобно, каждому своё, но там проблема допустим втиснуть кнопку, надо все переписывать.
LauncherPB - добавил Выход, сворачивание и область в ini

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

    Joker-2013
  • 1039
  • Стаж: 8 лет 9 месяцев
  • Сообщений: 2053
  • Репутация:120

    [+] [-]
  • Откуда: из прошлого
AZJIO, Вот ещё волшебная команда для управления только клавиатурой (Tab Enter)
;Навешиваем на окно:
AddKeyboardShortcut(0, #PB_Shortcut_Return, #Menu_Enter)
;А в действиях: (#Menu_Enter)
PostEvent(#PB_Event_Gadget, GetActiveWindow(), GetGadgetEnter, #PB_EventType_LeftClick)
По Enter выполняется действие как по ЛКМ и не надо дописывать дополнительные события...
Могу рабочий вариант накропать, если надо...

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

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

    [+] [-]
Добавил поддержку иконок. Но в варианте AutoIt3 была функция _WinAPI_PathFindOnPath, то есть найти dll для иконок, я сделал проще, так как скорее всего для иконок и картинок лучше использовать соседнюю папку, то если относительный путь не содержит "\", то ищем в System32. Также остался баг с вычислением колонок, при нечётном, когда не помещаются идеально квадратом, то есть в одной колонке 3 кнопки в другой 2, то не как ожидалось. Скорее всего это связано с тем что в PureBasic интегрер всегда округляется то целого, в AutoIt3 вычисляется в с плавающей точкой, при этом в PureBasic это решается добавлением десятичного к числу, например d*1.0, тогде вычисления будут в типе с плавающей точкой, а округлятся итоговый, но пока не разгадал где нестыковка, надо осмысливать, а я просто конвертировал код.

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

    MBTY
  • 1499
  • Стаж: 8 лет 6 месяцев
  • Сообщений: 77
  • Репутация:6

    [+] [-]
Насчет запускатора с INI - написан давно.
Называется "Menu 4.2.2.56" функционал гибкий, осваивается быстро, работает уже у меня лет 15.
Автораны для пиратских игровых CD только на нем и писались. Всё время в сети распространяется с примером и хелпами от автора.
P.S. Блин, я такой старый, что вижу снова и снова на форумах одно и то же. Прогеры пишут то, шо давно написано, потом про их труды забывают и новые прогеры пишут то же самое по новой...

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

    dialmak
  • 2607
  • Стаж: 8 лет 1 месяц
  • Сообщений: 842
  • Репутация:40

    [+] [-]
да есть уже ланчер давно универсальный, скрин, называется TBLauncher, есть x86 и x64
можно запускать что угодно, настраивается в INI
единственная загвоздка - не работает на XP, только на 7 и выше, ну и re\pe соответствующем
может и на виста, не проверял..
как пример используется в TBPortable

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

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

    [+] [-]
khiluck, ButtonBar попробуй. Там вообще кидаешь файл/ярлык и он добавляется, можно перетаскивать кнопки.

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

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

    [+] [-]
Интересный вариант - (zip-архив)

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

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

    [+] [-]
xnik
А как ссылку назначить на кнопку?
в ini
[6]
name=Ссылка
exe=https://usbtor.ru/viewtopic.php?t=1467
или имеется ввиду это (?):
Result = HyperLinkGadget(#Gadget , x , y , Width , Height , Text$ , Color [, Flags])

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

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

    [+] [-]
xnik

вот

EnableExplicit
Define EventID
CreateImage(1, 50, 50, 24, RGB(100, 200, 255))
If OpenWindow(0, 0, 0, 500, 400, "Пример", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ButtonImageGadget(1, 50, 50, 60, 60, ImageID(1), #BS_OWNERDRAW)
  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget
      Select EventGadget()
        Case 1
          Debug "Клик"
      EndSelect
    EndIf
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf
Так же кучка готовых примеров здесь, также русская справка здесь, на вкладке "Указатель" вводишь "Гаджет" и выбираешь что читать.
И в этом лаунчере нет ini, а есть исходники
ранее там не было исходников, поэтому я не понял.

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

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

    [+] [-]
mat.86, продолжение тут, а то я там дописываю обновы, а ветка не поднимается в топ. Вроде всё сделал.


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

Текущее время: 28-Мар 14:50

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


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