Auf dieser Seite sind einige von mir geschriebene Funktionen und diverse Informationen für die Programmiersprache PureBasic zu finden.
Funktionsbibliotheken
In diesem Abschnitt werden komplexere Funktionen und Sammlungen mehrerer solcher Funktionen bereitgestellt.
Die Quelltexte können einfach mit XIncludeFile
in anderen Programmen eingebunden werden.
Variablen formatiert in Strings einsetzen
Die Funktion FormatString()
dient dazu, Variablen verschiedener Typen in einen String einzufügen und dabei auf eine bestimmte Art zu formatieren.
Sie erfüllt damit einen vergleichbaren Zweck wie sprintf()
unter C.
Eine ausführliche Beschreibung und einige Beispiele sind im Quelltext enthalten.
Quelltext: NhFormatString.pbi.
Öffnen- und Speichern-Dialogfenster mit erweiterten Funktionen
Mit den Funktionen OpenFileDialog()
und SaveFileDialog()
können Dialogfenster zum Öffnen und Speichern von Dateien angezeigt werden.
Im Gegensatz zu den PureBasic-Befehlen OpenFileRequester()
und SaveFileRequester()
bieten diese Funktionen einige nützliche Extras.
Dies sind zum Beispiel die Verwendung eines vom Betriebssystem vorgegebenen Fenstertitels,
das automatische Anfügen einer Erweiterung an den Dateinamen, oder die Anzeige einer Warnung beim Überschreiben vorhandener Dateien.
Die Benutzung der Funktionen wird ausführlich im Quelltext beschrieben.
Nur für Windows.
Quelltext: NhOpenSaveDialog.pbi.
Codeschnipsel
In diesem Abschnitt sind einige Quelltextfragmente und kleinere Funktionen zu finden.
String rotieren
Mit RotateString()
können die Zeichen in einem String um eine beliebige Anzahl von Stellen rotiert werden.
Dabei werden die Zeichen innerhalb des Strings verschoben und die an einem Ende „herausfallenden“ Zeichen am anderen Ende wieder eingefügt.
*String
ist ein Zeiger auf der String, welcher bearbeitet werden soll.
Es wird direkt die entsprechende Variable geändert; die Funktion hat keinen Rückgabewert.
Pos
gibt die Anzahl von Stellen an, um welche der String rotiert werden soll.
Wenn Pos
negativ ist, werden die Zeichen linksherum rotiert, andernfalls rechtsherum.
Die Funktion wurde darauf ausgelegt, das gewünschte Ergebnis mit minimalem Aufwand zu erreichen.
; String um bestimmte Anzahl von Stellen rotieren Procedure RotateString(*String, Pos) Protected Length, Dir, TempLen, *TempStr Length = MemoryStringLength(*String) If Length = 0 ProcedureReturn #True EndIf Pos % Length If Pos = 0 ProcedureReturn #True EndIf If Pos < 0 Pos = -Pos Dir = -1 Else Dir = 1 EndIf If Pos > Length / 2 Pos = Length - Pos Dir = -Dir EndIf TempLen = Length - Pos *TempStr = AllocateMemory(TempLen*SizeOf(Character), #PB_Memory_NoClear) If Not *TempStr ProcedureReturn #False EndIf If Dir = 1 CopyMemory(*String, *TempStr, TempLen*SizeOf(Character)) CopyMemory(*String+TempLen*SizeOf(Character), *String, Pos*SizeOf(Character)) CopyMemory(*TempStr, *String+Pos*SizeOf(Character), TempLen*SizeOf(Character)) ElseIf Dir = -1 CopyMemory(*String+Pos*SizeOf(Character), *TempStr, TempLen*SizeOf(Character)) CopyMemory(*String, *String+TempLen*SizeOf(Character), Pos*SizeOf(Character)) CopyMemory(*TempStr, *String, TempLen*SizeOf(Character)) EndIf FreeMemory(*TempStr) ProcedureReturn #True EndProcedure ; Beispiel For n = -12 To 12 s$ = "Abcdef" RotateString(@s$, n) Debug Str(n) + ": " + s$ Next
String ROT13-kodieren
Mit der folgenden Funktion kann ein String ROT13-kodiert werden. Die Funktion erwartet einen Zeiger auf den String als Parameter.
; String ROT13-kodieren Procedure Rot13(*String.Character) While *String\c Select *String\c Case 'A' To 'M', 'a' To 'm' *String\c + 13 Case 'N' To 'Z', 'n' To 'z' *String\c - 13 EndSelect *String + SizeOf(Character) Wend EndProcedure ; Beispiel s$ = "Falsches Üben von Xylophonmusik quält jeden größeren Zwerg." Debug s$ Rot13(@s$) Debug s$ Rot13(@s$) Debug s$
Wert eines HTTP-Header-Feldes ermittlen
Mit der folgenden Funktion kann der Wert eines bestimmten Feldes in einem HTTP-Header ermittelt werden. Die Funktion erwartet den Header und den Namen des Feldes als Parameter. Wenn das Feld nicht existiert, wird ein leerer String zurückgegeben.
; Wert eines Feldes aus einem HTTP-Header ermitteln Procedure.s GetHTTPHeaderFieldValue(Header$, FieldName$) Protected n, Pos, Line$ n = 2 ; Mit zweiter Zeile beginnen, da erste Zeile den Statuscode enthält Line$ = StringField(Header$, n, #CRLF$) While Line$ <> "" Pos = FindString(Line$, ":") If Pos > 0 If LCase(Left(Line$, Pos-1)) = LCase(FieldName$) ProcedureReturn Trim(Mid(Line$, Pos+1)) EndIf EndIf n + 1 Line$ = StringField(Header$, n, #CRLF$) Wend EndProcedure ; Beispiel InitNetwork() Debug GetHTTPHeaderFieldValue(GetHTTPHeader("http://www.google.de/"), "Date")
Popup-Menü unter einem Gadget anzeigen
Mit DisplayPopupMenuBelowGadget()
kann ein Popup-Menü unterhalb eines Gadgets angezeigt werden.
; Popup-Menü unterhalb eines Gadgets anzeigen Procedure DisplayPopupMenuBelowGadget(Menu, WindowID, Gadget) Protected Position.POINT MapWindowPoints_(GadgetID(Gadget), #Null, @Position, 1) DisplayPopupMenu(Menu, WindowID, Position\x, Position\y+GadgetHeight(Gadget)) EndProcedure ; Beispiel If OpenWindow(0, 0, 0, 200, 200, "", #PB_Window_SystemMenu|#PB_Window_ScreenCentered) If CreatePopupMenu(0) MenuItem(0, "Eintrag") EndIf ButtonGadget(0, 5, 5, 100, 20, "Menü") Repeat Event = WaitWindowEvent() If Event = #PB_Event_Gadget If EventGadget() = 0 DisplayPopupMenuBelowGadget(0, WindowID(0), 0) EndIf EndIf Until Event = #PB_Event_CloseWindow EndIf