Einsteiger-Kapitel - Erstellen einer grafischen Benutzeroberfläche (GUI)
In Ergänzung zum Konsolen-Fenster unterstützt PureBasic auch die Erstellung grafischer Benutzeroberflächen (GUI). Daher lasst uns das Beispiel mit den Datei-Eigenschaften aus den vorhergehenden Artikeln erneut ansehen und es in eine GUI-Applikation umwandeln.; Die Struktur für die Datei-Informationen wie zuvor. Structure FILEITEM Name.s Attributes.i Size.q DateCreated.i DateAccessed.i DateModified.i EndStructure ; Dies ist eine Konstante zum Identifizieren des Fensters. Enumeration #WindowFiles EndEnumeration ; Dies ist eine Aufzählung (von Konstanten) zum Identifizieren der Gadgets, welche auf dem Fenster erscheinen. Enumeration #Folder #Files EndEnumeration ; Jetzt können wir eine Liste von Dateien definieren, indem wir dafür die zuvor spezifizierte Struktur verwenden. NewList Files.FILEITEM() ; Und einige Variablen für weitere Dinge. Define.s Access, Attrib, Create, Folder, Modify, Msg, Num, Size Define.l Result, Flags ; Diese Variablen werden Details von den GUI-Ereignissen empfangen, wie diese im Programm auftreten. Define.l Event, EventWindow, EventGadget, EventType, EventMenu ; Diese Funktion ermittelt das Benutzer-Verzeichnis des angemeldeten Anwenders. Folder = GetHomeDirectory() ; Öffnen des Verzeichnisses zum Auflisten all seiner Inhalte. Result = ExamineDirectory(0, Folder, "*.*") ; Ist dies ok, beginnen wir das Auflisten der Einträge. If Result ; Durchlauf bis NextDirectoryEntry(0) Null zurückgibt - was anzeigt, dass es keine weiteren Einträge gibt. While NextDirectoryEntry(0) ; Wenn der Verzeichnis-Eintrag eine Datei und kein Ordner ist. If DirectoryEntryType(0) = #PB_DirectoryEntry_File ; Fügt ein neues Element zur verketteten Liste hinzu. AddElement(Files()) ; Und füllt sie mit den Eigenschaften der Datei. 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 ; Schließt das Verzeichnis. FinishDirectory(0) EndIf ; Sortiert die Liste in alphabetisch aufsteigender Reihenfolge der Dateinamen. SortStructuredList(Files(), #PB_Sort_Ascending, OffsetOf(FILEITEM\Name), #PB_String) ; Der interessante Stoff beginnt hier... ; Diese Zeile definiert ein Flag für die Fenster-Attribute, indem die gewünschten Attribut-Konstanten mittels 'OR' (hier das '|' Zeichen) miteinander verknüpft werden. Flags = #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar ; Öffnet ein GUI-Fenster. OpenWindow(#WindowFiles, 50, 50, 450, 400, "File Properties", Flags) ; Ein Text-Gadget zum Anzeigen des Verzeichnis-Namens. TextGadget(#Folder, 5, 40, 440, 25, Folder) ; Ein ListIcon Gadget, welches die Dateinamen und -eigenschaften beinhaltet. ListIconGadget(#Files, 5, 70, 440, 326, "#", 35) ; Hinzufügen von Spalten zum ListIconGadget, welche jede Eigenschaft darstellen sollen. 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) ; Laden der Dateien in die Listenansicht. ForEach Files() ; Anzeigen der Eintragsnummer und des Dateinamens. Num = StrU(ListIndex(Files()) + 1) ; Diese Zeilen konvertieren die drei Datumswerte in eine gebräuchlichere Ansicht. Create = FormatDate("%dd/%mm/%yyyy", Files()\DateCreated) Access = FormatDate("%dd/%mm/%yyyy", Files()\DateAccessed) Modify = FormatDate("%dd/%mm/%yyyy", Files()\DateModified) ; Konvertiert die Dateigröße in einen String - genauso wie vorhin den Index-Wert, ; lässt aber Platz für die maximale Größe eines Quad-Wertes. Size = StrU(Files()\Size) ; Konvertiert die Attribute vorerst in einen String. Attrib = StrU(Files()\Attributes) ; Erstellt einen String für die gesamte Zeile. ; Das Zeilenvorschub-Zeichen 'Chr(10)' sagt dem Gadget, dass es zur nächsten Spalte springen soll. Msg = Num + Chr(10) + Files()\Name + Chr(10) + Create + Chr(10) + Access + Chr(10) + Modify + Chr(10) + Attrib + Chr(10) + Size ; Hinzufügen der Zeile zum Listen-Gadget. AddGadgetItem(#Files, -1, Msg) Next Files() ; Dies ist die Ereignis-Schleife des Fensters. ; Sie wird sich um all die Ereignisse aus der Interaktion mit dem Anwender kümmern, welche wir unterstützen möchten. Repeat ; Warten bis ein neues Fenster- oder Gadget-Ereignis auftritt. Event = WaitWindowEvent() ; In Programmen mit mehr als einem Fenster ermitteln wir, in welchem Fenster das Ereignis auftrat. EventWindow = EventWindow() ; Bei welchem Gadget trat das Ereignis auf. EventGadget = EventGadget() ; Welche Art von Ereignis trat auf. EventType = EventType() ; Hier beginnen nun die entsprechenden Aktionen. Select Event Case #PB_Event_Gadget ; Ein Gadget-Ereignis ist aufgetreten. If EventGadget = #Folder ElseIf EventGadget = #Files EndIf Case #PB_Event_CloseWindow ; Das Fenster wurde geschlossen. If EventWindow = #WindowFiles CloseWindow(#WindowFiles) Break EndIf EndSelect ; Wir gehen zurück und tuen das gleiche erneut. ; In der Praxis ist diese Schleife nicht unendlich, weil sie durch Anklicken des Schließ-Knopfes vom Fenster gestoppt werden kann. ForEverAn diesem Punkt hat die Applikation bereits einige nützliche Feature. Sie hat jedoch auch noch einige Probleme:
Einsteiger-Kapitel Navigation
< Vorheriges: Anzeigen von Text-Ausgabe (Konsole) | Überblick | Nächstes: Anzeigen von Grafik-Ausgabe & einfaches Zeichnen >