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! :D)

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! :(
:oops: ähm... :roll: habe den Fehler gefunden!

Vielen Dank, jetzt läuft es prima! Die zweite Zeile habe ich übersehen

Code: Alles auswählen

If OpenFile(1, "o:\Daten.txt") 
Dankeschön Nic,