Verfasst: 11.02.2009 20:16
oh, sehs gerade.
Naja, kann man ja ändern, falls einem türkisch nicht liegt
Naja, kann man ja ändern, falls einem türkisch nicht liegt

Das deutsche PureBasic-Forum
https://www.purebasic.fr/german/
Code: Alles auswählen
EnableExplicit
Enumeration
#fenster
#liste
#vorname
#nachname
#alter
#pb_version
#eintragen
#eintrag_loeschen
#alles_loeschen
#laden
#speichern
#counter
EndEnumeration
Procedure speichern()
; Als Trennzeichen wird Chr(9) statt wie im Gadget Chr(10) benutzt,
; so kann man ganz leicht einen Eintrag pro Zeile abspeichern und
; wir brauchen kein spezielles Dateiformat wie INI oder XML
Protected n, i, datei$
datei$=SaveFileRequester("Wohin speichern?", "", "Text-Datei (*.txt)|*.txt", 0)
If datei$
datei$+".txt" ; Dateiendung manuell hinzufügen, der Requester macht das nicht automatisch
If FileSize(datei$) <> -1 And MessageRequester("Frage", "Die Datei existiert bereits. Überschreiben?", #PB_MessageRequester_YesNo) = #PB_MessageRequester_No
MessageRequester("Information", "Dem Wunsch entsprechend wird die Datei nicht überschrieben. Abbruch.")
Else
If CreateFile(0, datei$)
Protected erzeugte_zeile$
For n=0 To CountGadgetItems(#liste)-1 ; Index der Einträge nullbasiert!
erzeugte_zeile$=""
For i=0 To 3 ; nullbasiert; gehe jede Spalte jeden Eintrags durch und führe sie zu einer Zeile zusammen
erzeugte_zeile$+GetGadgetItemText(#liste, n, i)+Chr(9)
Next
WriteStringN(0, erzeugte_zeile$) ; hierdurch entsteht am Dateiende eine Leerzeile, was beim Lesen zu einem Leereintrag führt. Beim Einlesen darauf achten! Vergleiche mit WriteString()
Next
CloseFile(0)
MessageRequester("Erfolg", "Die Daten wurden erfolgreich gespeichert.")
Else
MessageRequester("Fehler", "Die Datei konnte nicht angelegt werden.")
EndIf
EndIf
Else
MessageRequester("Information", "Das Speichern der Datei wurde abgebrochen.")
EndIf
EndProcedure
Procedure laden()
; Da wir als Trennzeichen Chr(9) benutzen, das Gadget aber als Trennzeichen
; Chr(10) erwartet, wenden wir ReplaceString() auf jede gelesene Zeile an
Protected datei$, zeile$
datei$=OpenFileRequester("Einen Datensatz öffnen", "", "Text-Datei (*.txt)|*.txt|Alle Dateien (*.*)|*.*", 0)
If datei$
If ReadFile(0, datei$)
ClearGadgetItems(#liste) ; vor dem Laden die Liste leeren
While Not Eof(0) ; solange Dateiende NICHT erreicht...
zeile$=ReadString(0) ; ...lese eine Zeile
If zeile$ ; die Leerzeile, die beim Speichern passiert, hierdurch abfangen
zeile$=ReplaceString(zeile$, Chr(9), Chr(10))
AddGadgetItem(#liste, -1, zeile$)
EndIf
Wend
CloseFile(0)
MessageRequester("Erfolg", "Der Datensatz wurde eingelesen.")
Else
MessageRequester("Fehler", "Die Datei konnte nicht gelesen werden.")
EndIf
Else
MessageRequester("Information", "Das Laden einer Datei wurde abgebrochen.")
EndIf
EndProcedure
Procedure counter()
Protected anzahl=CountGadgetItems(#liste)
SetGadgetText(#counter, "Anzahl der Einträge: "+Str(anzahl))
EndProcedure
OpenWindow(#fenster, 0, 0, 640, 500, "Beispielhafte Dateiverwaltung", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
ListIconGadget(#liste, 5, 5, 630, 350, "Vorname", 200, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines)
AddGadgetColumn(#liste, 1, "Nachname", 200)
AddGadgetColumn(#liste, 2, "Alter", 50)
AddGadgetColumn(#liste, 3, "PB Version", 140)
AddGadgetItem(#liste, -1, "Max"+Chr(10)+"Mustermann"+Chr(10)+"42"+Chr(10)+"3.94")
Frame3DGadget(#PB_Any, 5, 355, 630, 140, "Ein-/Ausgabe")
TextGadget(#PB_Any, 10, 370, 100, 14, "Vorname")
TextGadget(#PB_Any, 205, 370, 100, 14, "Nachname")
TextGadget(#PB_Any, 400, 370, 40, 14, "Alter")
TextGadget(#PB_Any, 445, 370, 100, 14, "PB Version")
StringGadget(#vorname, 10, 385, 185, 20, "")
StringGadget(#nachname, 205, 385, 185, 20, "")
SpinGadget(#alter, 395, 385, 45, 20, 0, 150, #PB_Spin_Numeric)
SetGadgetState(#alter, 20)
ComboBoxGadget(#pb_version, 445, 385, 135, 20, #PB_ComboBox_Editable)
AddGadgetItem(#pb_version, -1, "3.30")
AddGadgetItem(#pb_version, -1, "3.94")
AddGadgetItem(#pb_version, -1, "4.00")
AddGadgetItem(#pb_version, -1, "4.10")
AddGadgetItem(#pb_version, -1, "4.20")
AddGadgetItem(#pb_version, -1, "4.30")
SetGadgetState(#pb_version, 0)
TextGadget(#counter, 10, 410, 250, 14, "Anzahl der Einträge: 1")
ButtonGadget(#eintragen, 395, 410, 185, 20, "Eintragen")
ButtonGadget(#eintrag_loeschen, 395, 435, 185, 20, "Eintrag löschen")
ButtonGadget(#alles_loeschen, 395, 460, 185, 20, "Liste löschen")
ButtonGadget(#laden, 200, 435, 185, 20, "<--| Laden")
ButtonGadget(#speichern, 200, 460, 185, 20, "-->| Speichern")
Define position
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
Case #liste
position=GetGadgetState(#liste)
If position <> -1
SetGadgetText(#vorname, GetGadgetItemText(#liste, position, 0))
SetGadgetText(#nachname, GetGadgetItemText(#liste, position, 1))
SetGadgetText(#alter, GetGadgetItemText(#liste, position, 2))
SetGadgetText(#pb_version, GetGadgetItemText(#liste, position, 3))
EndIf
Case #eintragen
position=GetGadgetState(#liste)
If position = -1
AddGadgetItem(#liste, position, GetGadgetText(#vorname)+Chr(10)+GetGadgetText(#nachname)+Chr(10)+GetGadgetText(#alter)+Chr(10)+GetGadgetText(#pb_version))
Else
SetGadgetItemText(#liste, position, GetGadgetText(#vorname), 0)
SetGadgetItemText(#liste, position, GetGadgetText(#nachname), 1)
SetGadgetItemText(#liste, position, GetGadgetText(#alter), 2)
SetGadgetItemText(#liste, position, GetGadgetText(#pb_version), 3)
EndIf
SetGadgetText(#vorname, "")
SetGadgetText(#nachname, "")
SetGadgetState(#alter, 20)
SetGadgetState(#pb_version, 0)
counter()
Case #eintrag_loeschen
position=GetGadgetState(#liste)
If position <> -1
RemoveGadgetItem(#liste, position)
EndIf
counter()
Case #alles_loeschen
ClearGadgetItems(#liste)
counter()
Case #laden
laden()
counter()
Case #speichern
speichern()
counter()
EndSelect
EndSelect
ForEver
wo wir schon dabei sind...Andesdaf hat geschrieben:> Das Eventhandling, also das Auswerten von WaitWindowEvent() und EventGadget() bevorzuge ich mit Select/Case zu erledigen, aber das kann jeder selbst gestalten.
Mach ich auch, finde ich besser als diese ewigen If Abfragen.
Code: Alles auswählen
Select WaitWindowEvent()
...
Select EventGadget()
Code: Alles auswählen
EventID = WaitWindowEvent()
EvGadget = EventGadget()
Select EventID
...
Select EvGadget
Code: Alles auswählen
Repeat
Select WaitWindowEvent()
...
EndSelect
Until WindowEvent() = #PB_Event_CloseWindow
Code: Alles auswählen
Repeat
EventID = WaitWindowEvent()
Select EventID
...
EndSelect
Until EventID = #PB_Event_CloseWindow