[Quote]

    Joker-2013
  • 1039
  • Longevity: 9 years 3 months
  • Posts: 2053
  • REPUTATION:120

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

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


Last edited by Joker-2013 on 2019-03-03 16:32; edited 2 times in total

[Quote]

    Joker-2013
  • 1039
  • Longevity: 9 years 3 months
  • Posts: 2053
  • REPUTATION:120

    [+] [-]
  • Location: из прошлого
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


Last edited by Joker-2013 on 2019-03-02 22:10; edited 1 time in total

[Quote]

    Joker-2013
  • 1039
  • Longevity: 9 years 3 months
  • Posts: 2053
  • REPUTATION:120

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

[Quote]

    AZJIO
  • 17953
  • Longevity: 6 years 7 months
  • Posts: 1320
  • REPUTATION:127

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

[Quote]

    Joker-2013
  • 1039
  • Longevity: 9 years 3 months
  • Posts: 2053
  • REPUTATION:120

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

[Quote]

    AZJIO
  • 17953
  • Longevity: 6 years 7 months
  • Posts: 1320
  • REPUTATION:127

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

[Quote]

    MBTY
  • 1499
  • Longevity: 9 years 1 month
  • Posts: 86
  • REPUTATION:9

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

[Quote]

    dialmak
  • 2607
  • Longevity: 8 years 8 months
  • Posts: 842
  • REPUTATION:40

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

[Quote]

    AZJIO
  • 17953
  • Longevity: 6 years 7 months
  • Posts: 1320
  • REPUTATION:127

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

[Quote]

    AZJIO
  • 17953
  • Longevity: 6 years 7 months
  • Posts: 1320
  • REPUTATION:127

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

[Quote]

    AZJIO
  • 17953
  • Longevity: 6 years 7 months
  • Posts: 1320
  • REPUTATION:127

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

[Quote]

    AZJIO
  • 17953
  • Longevity: 6 years 7 months
  • Posts: 1320
  • REPUTATION: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, а есть исходники
ранее там не было исходников, поэтому я не понял.

[Quote]

    AZJIO
  • 17953
  • Longevity: 6 years 7 months
  • Posts: 1320
  • REPUTATION:127

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


Display posts:    

Current time is: 16-Oct 02:02

All times are UTC + 3


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum