Seite 1 von 1
Daten speichern und Abfragen
Verfasst: 11.02.2005 15:38
von sobi
Hallo,
aus einem StringGadget würde ich gerne die Daten speichern. Allerdings tut er das noch nicht so, wie ich das will!

Folgendes habe ich zusammengebaut:
Code: Alles auswählen
If OpenWindow(0,140,140,400,300,#PB_Window_SystemMenu,"Daten speichern")
If CreateGadgetList(WindowID())
ButtonGadget(2,140,20,100,20,"Speichern")
hallo.b = StringGadget(4, 100, 60, 60, 20, "Halllo ")
EndIf
EndIf
Procedure Speichern()
If OpenFile(1,"Daten.txt")
WriteStringN(Str(hallo.b))
CloseFile(1)
EndIf
EndProcedure
Repeat
EventID.l = WaitWindowEvent()
If EventID = #PB_Event_Gadget
;Schalter SPEICHERN
If EventGadgetID()=2
Speichern()
EndIf
EndIf
Until EventID = #PB_EventCloseWindow
End
Was muss ich denn falsch gemacht?
Liebe Grüße,
Simon
Verfasst: 11.02.2005 15:43
von DarkDragon
hallo.b ist das handle vom Fenster(Gadget).
Code: Alles auswählen
If OpenWindow(0,140,140,400,300,#PB_Window_SystemMenu,"Daten speichern")
If CreateGadgetList(WindowID())
ButtonGadget(2,140,20,100,20,"Speichern")
StringGadget(4, 100, 60, 60, 20, "Halllo ")
EndIf
EndIf
Procedure Speichern()
If OpenFile(1,"Daten.txt")
WriteStringN(GetGadgetText(4))
CloseFile(1)
EndIf
EndProcedure
Repeat
EventID.l = WaitWindowEvent()
If EventID = #PB_Event_Gadget
;Schalter SPEICHERN
If EventGadgetID()=2
Speichern()
EndIf
EndIf
Until EventID = #PB_EventCloseWindow
End
Verfasst: 11.02.2005 15:50
von sobi
Hi Daniel,
meine Güte, jetzt wo du es mir sagst... *grins* ich mache Vortschritte (auch wenn man das noch mehr als "krabbeln" bezeichnen kann!

)
Jetzt nur mal nachgefragt, ob ich das richtig sehe:
Code: Alles auswählen
If EventID = #PB_Event_Gadget
;Schalter SPEICHERN
If EventGadgetID()=2
Speichern()
EndIf
EndIf
nach der Prozedur "Speichern" kann ich doch eigentlich eine zweite Aufrufen, die dann anzeigt, dass die Daten gespeichert wurden - richtig?
Verfasst: 11.02.2005 15:57
von DarkDragon
Ja, du kannst eine zweite danach Aufrufen, die sagt, dass alles gespeichert wurde. Dann würde ich aber die erste Prozedur mit einem Rückgabewert preparieren.
Also so ungefähr:
Code: Alles auswählen
Procedure Speichern()
If OpenFile(1,"Daten.txt")
If WriteStringN(GetGadgetText(4))
Result = 1
EndIf
CloseFile(1)
EndIf
ProcedureReturn Result ;Wenn etwas in die Datei reingeschrieben wurde, dann wird ja Result auf 1 gesetzt
EndProcedure
Procedure Ausgabe()
MessageRequester("Info", "Die Datei wurde erfolgreich beschrieben.")
EndProcedure
...
...
If EventGadgetID()=2
If Speichern()
Ausgabe()
EndIf
EndIf
Verfasst: 11.02.2005 16:06
von sobi
DarkDragon hat geschrieben:
Code: Alles auswählen
If EventGadgetID()=2
If Speichern()
Ausgabe()
EndIf
EndIf
Das habe ich gleich ausprobiert, allerdings funktioniert das bei mir nur ohne die If Speichern() - Schleife. Ist das auch in Ordnung? (Er speichert mit und ohne Schleife, aber ein Bestätigung erhalte ich nur ohne Schleife)
Verfasst: 11.02.2005 16:11
von sobi
tata...
So funktioniert es (Result ist bei mir aber 0 - ist das schlimm?)
Code: Alles auswählen
Repeat
EventID.l = WaitWindowEvent()
If EventID = #PB_Event_Gadget
;Schalter SPEICHERN
If EventGadgetID()=2
Speichern()
If Result = 0
Ausgabe()
EndIf
EndIf
EndIf
Until EventID = #PB_EventCloseWindow
Verfasst: 11.02.2005 16:34
von NicTheQuick
Nein, nein, nein. So geht das nicht. Die Variable [c]Result.l[/c] ist nur in deiner Procedure gültig, d.h. sie ist sowieso immer Null, wenn du sie im Hauptprogramm nicht entsprechend änderst.
Hier mal ein funktionierender Code mit ein paar Kommentaren:
Code: Alles auswählen
Procedure Speichern()
If OpenFile(1, "o:\Daten.txt")
WriteStringN(GetGadgetText(4))
CloseFile(1)
; Die Daten wurden geschrieben, also gib #True (wahr = 1) zurück
ProcedureReturn #True
Else
; Die Datei konnte nicht geöffnet oder erstellt werden. Gib #False (falsch = 0) zurück
ProcedureReturn #False
EndIf
EndProcedure
If OpenWindow(0, 140, 140, 400, 300, #PB_Window_SystemMenu, "Daten speichern")
If CreateGadgetList(WindowID())
ButtonGadget(2, 140, 20, 100, 20, "Speichern")
StringGadget(4, 100, 60, 60, 20, "Halllo ")
Repeat
EventID.l = WaitWindowEvent()
If EventID = #PB_Event_Gadget
;Schalter SPEICHERN
If EventGadgetID() = 2
If Speichern() ; = #True nicht nötwendig, da Ausdruck nur ungleich Null sein muss.
; Wenn die Speichern-Funktion #True zurückgibt hat alles geklappt, also gib die Meldung aus.
MessageRequester("Daten speichern", "Die Daten wurden erfolgreich gespeichert.")
Else
; Wenn die Speichern-Funktion #False zurückgibt gab es einen Fehlern, also gib ihn aus.
MessageRequester("Daten speichern", "Es trat ein Fehler beim Speichern der Daten auf.")
EndIf
EndIf
EndIf
Until EventID = #PB_EventCloseWindow
EndIf
EndIf
Verfasst: 11.02.2005 18:20
von sobi
NicTheQuick hat geschrieben:Nein, nein, nein. So geht das nicht. Die Variable [c]Result.l[/c] ist nur in deiner Procedure gültig, d.h. sie ist sowieso immer Null, wenn du sie im Hauptprogramm nicht entsprechend änderst.
Hier mal ein funktionierender Code mit ein paar Kommentaren:
*gg* das war ein sehr entschiedenes Nein! Das habe ich verstanden! - Allerdings macht das Script noch nicht das, was es soll. Es speichert nicht und ich weiß nicht warum!
Ich bekomme ständig die Fehlermeldung, dass es eben "schief gelaufen ist"! - Wo muss ich das ändern?
LG
Simon
Verfasst: 11.02.2005 19:04
von sobi
sobi hat geschrieben:Es speichert nicht und ich weiß nicht warum!

ähm...

habe den Fehler gefunden!
Vielen Dank, jetzt läuft es prima! Die zweite Zeile habe ich übersehen
Dankeschön Nic,