то есть нельзя что-то сделать красиво не прибегая к WinAPI
Не во всех приложениях нужны красивости. Минимально необходимой набор контролов присутствует в кроссплатформенной библиотеке
https://www.purebasic.com/documentation/gadget/index.htmlhttps://www.purebasic.com/documentation/dialog/index.htmlНа канвасе разработан не один контрол и обычно они платформонезависимые.
соответственно почти ни одна прога не будет в легкую переделана под другую платформу
Количество платформозависимого кода обычно незначительно по сравнению с объемом кода программы.
нельзя делать оболочку, то есть тупо можно было бы на PureBasic написать библиотеку бесплатную и вызывать из неё все функции, которые содержаться в PureBasic, вот это нельзя, так как покупка PureBasic теряет смысл.
Нельзя писать обвертку над функциями.
ProcedureDLL Open_Window(Window, x, y, InnerWidth, InnerHeight, Title$, Flags, ParentWindowID)
ProcedureReturn OpenWindow(Window, x, y, InnerWidth, InnerHeight, Title$, Flags, ParentWindowID)
EndProcedure
ProcedureDLL CloseWindow(Window)
ProcedureReturn CloseWindow(Window)
EndProcedure
придётся серьёзно перелапачивать код
Если в коде есть платформозависимый код. Библиотека PB кроссплатформенная.
Не такой в пб простой синтаксис. Если вообще не в теме пб- не проще ли будет изучить Си (без плюсов)...
В Си нет строк. Элементарные действия потребуют много усилий. PB хорош тем что изначально поддерживает строки, динамические и ассоциативные массивы, двусвязные списки и др. Их применение возможно в структурах. И все это без явного использования указателей. Для примера Сканирование папки компилятора и отображение древовидной структуры файлов.
Structure FileList
N.s ; Имя файла
S.q ; Размер файла
EndStructure
Structure TreeFiles
DN.s ; Имя текущей папки.
List D.TreeFiles() ; Список вложенных папок текущей папки.
List F.FileList() ; Список файлов текущей папки.
EndStructure
EnableExplicit
Procedure ScanDisk(List Tree.TreeFiles(), Dir.s) ; Сохранение структуры указаной папки
Protected ID, Name.s
ID = ExamineDirectory(#PB_Any, Dir, "*.*")
If ID
While NextDirectoryEntry(ID)
If DirectoryEntryType(ID) = #PB_DirectoryEntry_File ; Файл
If AddElement(Tree()\F())
Tree()\F()\N = DirectoryEntryName(ID)
Tree()\F()\S = DirectoryEntrySize(ID)
EndIf
Else ; Папка
Name = DirectoryEntryName(ID)
If Name<>"." And Name<>".."
If AddElement(Tree()\D())
Tree()\D()\DN = Name
ScanDisk(Tree()\D(), Dir+Name+"/") ; Рекурсивный вызов процедуры
EndIf
EndIf
EndIf
Wend
FinishDirectory(ID)
EndIf
EndProcedure
Procedure SetTreeGadget(Gadget, List Tree.TreeFiles(), Depth)
If Tree()\DN<>""
AddGadgetItem(Gadget, -1, Tree()\DN, 0, Depth)
Depth+1
EndIf
ForEach Tree()\D()
SetTreeGadget(Gadget, Tree()\D(), Depth)
Next
ForEach Tree()\F()
AddGadgetItem(Gadget, -1, Tree()\F()\N+" ("+Tree()\F()\S+")", 0, Depth)
Next
EndProcedure
Define NewList Tree.TreeFiles()
AddElement(Tree())
ScanDisk(Tree(), #PB_Compiler_Home)
If OpenWindow(0, 0, 0, 500, 300, "TreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TreeGadget(0, 0, 0, 500, 300)
SetTreeGadget(0, Tree(), 0)
ClearList(Tree()) ; Очистка списка с освобождением всех данных.
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Список D имеет тип структуры в которой расположен, а это значит что каждый элемент списка содержит аналогичный список D, т. е. возможна практически неограниченная вложенность. Это позволяет получить древовидную структуру хранения данных.
Надо максимально привлечь к нам тех, кто уже в теме пб
Сложность в том что почти все они и я в том числе пишут под винду.
Это из-за большей распространенности винды и сложности поиска информации по API Linux. Для винды несложно найти описание и примеры WinAPI, чего не скажешь про линукс...
Только вот оптимален ли pb для изучения по сравнению с другими языками для наших нужд (написание гуй к консольным утилитам)
Зависит от решаемых задач. Пример с GUI и многопоточностью рассчитывающий различные хеши.
https://www.cyberforum.ru/beta-testing/thread1576230.html