Руководство - Создание графического интерфейса пользователя (GUI)
В дополнение к консоли PureBasic также поддерживает создание графических интерфейсов пользователя (GUI). Поэтому давайте возьмём предыдущий пример с выводом свойств файлов на консоль и превратим его в приложение с графическим интерфейсом (GUI).; Структура для получения информации о файле. Structure FILEITEM Name.s Attributes.i Size.q DateCreated.i DateAccessed.i DateModified.i EndStructure ; Это - константа для идентификации окна. Enumeration #WindowFiles EndEnumeration ; Это - перечисление, для идентификации средств управления, которые появятся в окне. Enumeration #Folder #Files EndEnumeration ; Теперь мы определяем список файлов, используя ранее определенную структуру. NewList Files.FILEITEM() ; И некоторые переменные, которые нам понадобятся. Define.s Access, Attrib, Create, Folder, Modify, Msg, Num, Size Define.l Result, Flags ; Эти переменные будут получать информацию о произошедших событиях графического интерфейса. Define.l Event, EventWindow, EventGadget, EventType, EventMenu ; Эта функция получает корневой каталог вошедшего в систему пользователя. Folder = GetHomeDirectory() ; Открывает каталог, чтобы перечислить все его содержимое. Result = ExamineDirectory(0, Folder, "*.*") ; Если Result - истина (т.е. каталог открыть удалось), начинаем перечисление записей. If Result ; Цикл пока NextDirectoryEntry(0) не станет нулем - что означает, что больше нет записей. While NextDirectoryEntry(0) ; Если запись каталога - файл, а не папка. If DirectoryEntryType(0) = #PB_DirectoryEntry_File ; Добавить новый элемент к списку. AddElement(Files()) ; И заполнить его свойствами файла. Files()\Name = DirectoryEntryName(0) Files()\Size = DirectoryEntrySize(0) Files()\Attributes = DirectoryEntryAttributes(0) Files()\DateCreated = DirectoryEntryDate(0, #PB_Date_Created) Files()\DateAccessed = DirectoryEntryDate(0, #PB_Date_Accessed) Files()\DateModified = DirectoryEntryDate(0, #PB_Date_Modified) EndIf Wend ; Закрыть каталог. FinishDirectory(0) EndIf ; Сортируем список, путём упорядочения имён файлов в возрастающем алфавитном порядке (A, B, C, D...). SortStructuredList(Files(), #PB_Sort_Ascending, OffsetOf(FILEITEM\Name), #PB_String) ; Интересный материал начинается здесь... ; Эта строка определяет флаг для атрибутов окна, посредством объединения вместе через ИЛИ желаемых констант атрибута. Flags = #PB_Window_SystemMenu - #PB_Window_SizeGadget - #PB_Window_MinimizeGadget - #PB_Window_MaximizeGadget - #PB_Window_TitleBar ; Открыть окно GUI. OpenWindow(#WindowFiles, 50, 50, 450, 400, "File Properties", Flags) ; Текстовый Гаджет для отображения имени папки TextGadget(#Folder, 5, 40, 440, 25, Folder) ; Гаджет значка списка, для хранения списка файлов и свойств. ListIconGadget(#Files, 5, 70, 440, 326, "#", 35) ; Добавить столбцы в ListIconGadget, для хранения каждого свойства.. AddGadgetColumn(#Files, 1, "Name", 200) AddGadgetColumn(#Files, 2, "Created", 100) AddGadgetColumn(#Files, 3, "Accessed", 100) AddGadgetColumn(#Files, 4, "Modified", 100) AddGadgetColumn(#Files, 5, "Attributes", 150) AddGadgetColumn(#Files, 6, "Size", 100) ; Загрузить файлы в виде списка. ForEach Files() ; Выведите на экран Номер пункта и Имя файла. Num = StrU(ListIndex(Files()) + 1) ; Эти строки преобразовывают значения дат создания и т.д. файла в привычный вид. Create = FormatDate("%dd/%mm/%yyyy", Files()\DateCreated) Access = FormatDate("%dd/%mm/%yyyy", Files()\DateAccessed) Modify = FormatDate("%dd/%mm/%yyyy", Files()\DateModified) ; Преобразуем размер файла в строку с дополнением пробелов, так же как с индексным значением выше, ; но зададим размер строки для размещения максимального размера значения типа quad. Size = StrU(Files()\Size) ; Преобразуем атрибуты в строку. Attrib = StrU(Files()\Attributes) ; Создайте строку для вывода. ; Символ перевода строки "Chr(10)" указывает Гаджету перейти к следующему столбцу Msg = Num + Chr(10) + Files()\Name + Chr(10) + Create + Chr(10) + Access + Chr(10) + Modify + Chr(10) + Attrib + Chr(10) + Size ; Добавьте строку к Гаджету представления списка. AddGadgetItem(#Files, -1, Msg) Next Files() ; Это - цикл событий для окна. ; Он будет иметь дело со всеми событиями взаимодействия с пользователем, которые мы хотим использовать. Repeat ; Ожидание, пока не произойдёт новое событие окна или Гаджета. Event = WaitWindowEvent() ; Используется в программах с более чем одной формой, выдаёт, в каком окне произошло событие. EventWindow = EventWindow() ; Какой Гаджет произвёл событие. EventGadget = EventGadget() ; Какое событие имело место. EventType = EventType() ; Принятие мер, в зависимости от события. Select Event Case #PB_Event_Gadget ; Имело место событие Гаджета. If EventGadget = #Folder ElseIf EventGadget = #Files EndIf Case #PB_Event_CloseWindow ; Закрыть окно. If EventWindow = #WindowFiles CloseWindow(#WindowFiles) Break EndIf EndSelect ; Возврат к началу цикла и повторение до бесконечности. ; На практике цикл не бесконечен, потому что его можно остановить, щелкнув кнопку Close окна. ForEver
На этом этапе приложение уже имеет некоторые полезные функции. Однако есть также и некоторые проблемы:Навигация Руководства
< Отображение в текстовом режиме (Консоль) - Обзор - Отображение графики & простых рисунков >