Seite 1 von 2

Daten in eine Datenbank eingeben,ausgeben,ändern und löschen

Verfasst: 30.09.2006 22:59
von HemSA
Hallole Ihr alle, ich bin noch Anfänger, und hatte oft Probleme, wie man das Problem einer "kompletten Datenbank" angeht (Daten eingeben, ausgeben, ändern, abfragen und löschen). Manchmal fehlt ja nur der "erste" Anstoß in die richtige Richtung um das Problem anzupacken.

Ich habe 5 Programme ( in PureBasic 4.0 ) geschrieben die dieses Thema behandeln ==> In einer Textdatenbank Werte eingeben und danach bearbeiten. Und dieses will ich der Allgemeinheit hier zur Verfügung stellen.
Die Programme sind natürlich nur der "rohe" Aufbau - ohne den jeweiligen Sicherheitsabfragen wie: Ob das Fenster auch wirklich geöffnet werden konnte; ob die Datei auch wirklich geöffnet werden konnte etc.

An die Moderatoren: Ich dachte eben ich stelle es hier rein. Wenn ihr meint, das das Thema woanderst besser aufgehoben wäre, könnt Ihr es ruhig verschieben.

Hier der erste Teil: Dateneingabe

Code: Alles auswählen

 ;Dateneingabe
 ;In einem Eingabe-Gadget werden für einen neuen Datensatz die Felder eingegeben und in der Datenbank am 
 ;Schluß von den schon vorhandenen Datensätzen angehängt.
 
 ;PureBasic 4.0

If OpenWindow(0,216,0,500,300,"Termineingabefenster",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar )
  If CreateGadgetList(WindowID(0))
      TextGadget(1, 20, 20, 150, 20, "Dateneingabefenster")
      TextGadget(2, 20, 60, 40, 20, "Datum")                       
      StringGadget(3, 80, 60, 60, 20, "")                          
      TextGadget(4, 20, 100, 50, 20, "Terminart")
      StringGadget(5, 80, 100, 100, 20, "")
      TextGadget(6, 20, 140, 60, 20, "Name")
      StringGadget(7, 80, 140, 150, 20, "")      
      ButtonGadget(8, 60, 200, 100, 30, "Daten hinzufügen")
      ButtonGadget(9, 200, 200, 100, 30, "Beenden")
      TextGadget(10, 150, 60, 380, 20, "Nur die ersten 10 Zeichen werden übernommen")
      TextGadget(11, 190, 100, 380, 20, "Nur die ersten 15 Zeichen werden übernommen")
      TextGadget(12, 240, 140, 380, 20, "Nur die ersten 25 Zeichen werden übernommen")
  
  
  EndIf

  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow 
      Quit = 1
    EndIf
    If EventID = #PB_Event_Gadget
      
      
      
        If EventGadget()=8
      
             text1s.s = GetGadgetText(3)                             ;auslesen vom Stringgadget 
             ergebnis1s.s = LSet(text1s.s, 10)                       ;auffüllen/begrenzen des Stringgadget auf 10 Zeichen
             text2s.s = GetGadgetText(5)
             ergebnis2s.s = LSet(text2s.s, 15)
             text3s.s = GetGadgetText(7)
             ergebnis3s.s = LSet(text3s.s, 25)
             textgesamts.s = ergebnis1s.s+ergebnis2s.s+ergebnis3s.s  ;zusammenlegen von den Feldern ( Gesamttext )
      
          If OpenFile(1,"versuch.txt")
              laengel.l= Lof(1)                                      ; ermitteln der Dateilaenge              
              FileSeek(1,laengel.l)                                  ; setzt den Zeiger ans Dateiende           
      
              WriteStringN(1,textgesamts.s)                          ;schreibt den Gesamttext an das Ende von der Datei
      
              CloseFile(1)                                           ;schließt die Datei
          EndIf
        
        SetGadgetText(3, "")                                         ;Eingabefelder werden gelöscht nachdem der 
        SetGadgetText(5, "")                                         ;"Daten hinzufügen" BUTTON gedrückt wurde
        SetGadgetText(7, "")
        
        EndIf
      
    
        If EventGadget()=9
         Quit = 1
        EndIf
           
    EndIf
 Until Quit=1
  
EndIf
End
Hier der 2. Teil: Datenausgabe komplett

Code: Alles auswählen

 ;Datenausgabe komplett
 ;In einem ListIconGadget werden alle in der Datenbank vorhandene Datensätze aufgelistet
 
 ;PureBasic 4.0
 
 If OpenWindow(0, 100, 100, 355, 200, "Datenausgabe", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar| #PB_Window_ScreenCentered)
   
   If CreateGadgetList(WindowID(0))
     ListIconGadget(0, 5, 5, 345, 190, "Datum", 80,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
     AddGadgetColumn(0, 1, "Terminart", 90)
     AddGadgetColumn(0, 2, "Name", 150)
          
     
      If ReadFile(1,"versuch.txt") 
        laengel.l= Lof(1) 
        zeilenanzahlw.w=laengel.l/52 
              
              
          For iw.w=0 To zeilenanzahlw.w
        
          FileSeek(1,iw.w*52)                                        
                   
          wert2s.s=ReadString(1) 
          datums.s=Left(wert2s.s,10) 
          vornames.s=Mid(wert2s.s,11, 15) 
          nachnames.s=Mid(wert2s.s,26, 25)
       
        
          AddGadgetItem(0, -1,datums.s+Chr(10)+vornames.s+Chr(10)+nachnames.s)
       
         
          Next iw.w
        
        CloseFile(1) 
      EndIf
      
      
      Repeat 
      
      
      Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
   
 EndIf
 
Hier der 3. Teil: Datenänderung

Code: Alles auswählen

 ;"Datenänderung"
 ;In diesem Abschnitt werden die ganzen Datenensätze von einer Datenbank in einem ListIconGadget aufgelistet.
 ;Danach wird durch Auswählen von einem Datensatz (markieren) der Datensatz in einem Eingabe-Gadget, wie
 ;bei der Dateneingabe, angezeigt. Darin können dann in den gewünschten Datenfeldern die Änderungen
 ;vorgenommen werden und der Datensatz wird danach wieder an der gleichen Stelle von der Datenbank
 ;abgespeichert.
 
 ;PureBasic 4.0 
 
 If OpenWindow(0, 100, 100, 355, 275, "Datenänderung", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar| #PB_Window_ScreenCentered)
   
   If CreateGadgetList(WindowID(0))
     ListIconGadget(0, 5, 35, 345, 200, "Datum", 80,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
     AddGadgetColumn(0, 1, "Terminart", 90)
     AddGadgetColumn(0, 2, "Name", 150)
     TextGadget(1, 5,  10, 250, 20, "Bitte den Datensatz markieren")
     ButtonGadget(2, 5, 245, 70, 20, "Weiter")
   
   
   
      If ReadFile(1,"versuch.txt") 
        laengel.l= Lof(1) 
        zeilenanzahlw.w=laengel.l/52 
              
              
          For iw.w=0 To zeilenanzahlw.w
        
          FileSeek(1,iw.w*52)                                        
                   
          wert2s.s=ReadString(1) 
          datums.s=Left(wert2s.s,10) 
          vornames.s=Mid(wert2s.s,11, 15) 
          nachnames.s=Mid(wert2s.s,26, 25)
       
        
          AddGadgetItem(0, -1,datums.s+Chr(10)+vornames.s+Chr(10)+nachnames.s)
       
          ;Debug "Datum:  "+datums.s+"  Vorname:  "+vornames.s+"  Nachname:  "+nachnames.s
        
          Next iw.w
        
        CloseFile(1) 
      EndIf
      
   
   
     
   EndIf  
 EndIf 
  
  
   Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow 
      Quit = 1
    EndIf
    
      If EventID = #PB_Event_Gadget
      
      
      
        If EventGadget()=2
         
            wertw.w = GetGadgetState(0)
            ergebniss.s = Str(wertw.w)
            
            ;Debug ergebniss.s
            ;Debug EventGadget()
                    
            CloseWindow(0)
        
         
         
         
            If OpenWindow(1,216,0,500,300,"Datenänderungsfenster",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar| #PB_Window_ScreenCentered )
              
               If CreateGadgetList(WindowID(1))
                  TextGadget(3, 20, 20, 150, 20, "Datenänderungsfenster")
                  TextGadget(4, 20, 60, 40, 20, "Datum")                       
                  StringGadget(5, 80, 60, 60, 20, "")                           
                  TextGadget(6, 20, 100, 50, 20, "Terminart")
                  StringGadget(7, 80, 100, 100, 20, "")
                  TextGadget(8, 20, 140, 60, 20, "Name")
                  StringGadget(9, 80, 140, 150, 20, "")      
                  ButtonGadget(10, 20, 200, 160, 30, "Geänderte Daten abspeichern")
                  ButtonGadget(11, 200, 200, 100, 30, "Abrechen")
                  TextGadget(12, 150, 60, 380, 20, "Nur die ersten 10 Zeichen werden übernommen")
                  TextGadget(13, 190, 100, 380, 20, "Nur die ersten 15 Zeichen werden übernommen")
                  TextGadget(14, 240, 140, 380, 20, "Nur die ersten 25 Zeichen werden übernommen")
  
               EndIf
            EndIf
          
              If ReadFile(1,"versuch.txt") 
                               
        
                  FileSeek(1,wertw.w*52)                                        
                   
                  wert2s.s=ReadString(1) 
                  datums.s=Left(wert2s.s,10) 
                  vornames.s=Mid(wert2s.s,11, 15) 
                  nachnames.s=Mid(wert2s.s,26, 25)
       
                  SetGadgetText(5, datums.s)
                  SetGadgetText(7, vornames.s)
                  SetGadgetText(9, nachnames.s)
         
                 CloseFile(1) 
              EndIf
      
      
      
      
          ;Debug EventGadget()
      
   
          ;Debug "Datum:  "+datums.s+"  Vorname:  "+vornames.s+"  Nachname:  "+nachnames.s
        
      EndIf
      
      
          ;Debug EventGadget()
      
      
      
       
        If EventGadget()=10 
         
             text1s.s = GetGadgetText(5)                             ;auslesen vom Stringgadget 
             ergebnis1s.s = LSet(text1s.s, 10)                       ;auffüllen/begrenzen des Stringgadget auf 10 Zeichen
             text2s.s = GetGadgetText(7)
             ergebnis2s.s = LSet(text2s.s, 15)
             text3s.s = GetGadgetText(9)
             ergebnis3s.s = LSet(text3s.s, 25)
             textgesamts.s = ergebnis1s.s+ergebnis2s.s+ergebnis3s.s  ;zusammenlegen von den Feldern ( Gesamttext )
      
          If OpenFile(1,"versuch.txt")
                            
              FileSeek(1,wertw.w*52)                                 ; setzt den Zeiger an die Adresse           
      
              WriteStringN(1,textgesamts.s)                          ;schreibt den Gesamttext in die Adresse von der Datei
      
              CloseFile(1)                                           ;schließt die Datei
          EndIf
        
             Quit=1
        
        EndIf
      
            
        EndIf

       
      
        If EventGadget()=11 
           Quit=1
        EndIf
 

      Until Quit=1

   
End
Hier der 4. Teil: Terminausgabe - Ausgabe nach Suchanforderung

Code: Alles auswählen

 ;"Terminausgabe - Ausgabe nach Suchanforderung"
 ;In dem Beispielprogramm geht es um eine Datenbank, wo "Terminarten" ( Geburtstag oder andere Termine )
 ;mit dem Datum und Namen abgespeichert werden. Danach werden die Daten von der Datenbank Satz für Satz
 ;mit dem heutigen Datum verglichen (Monat und Tag) und bei Übereinstimmung in einem ListIconGadget
 ;aufgelistet. Es kann natürlich auch nach anderen "Suchmerkmalen" ausgesondert werden, es soll nur
 ;der Weg beschrieben werden, wie man das Problem angeht.
 
 ;PureBasic 4.0 
 
 If OpenWindow(0, 100, 100, 355, 200, "Terminausgabe", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget |#PB_Window_TitleBar| #PB_Window_ScreenCentered)
   
   If CreateGadgetList(WindowID(0))
     ListIconGadget(0, 5, 5, 345, 190, "Datum", 80,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
     AddGadgetColumn(0, 1, "Terminart", 90)
     AddGadgetColumn(0, 2, "Name", 150)
          
     
      If ReadFile(1,"versuch.txt") 
          laengel.l= Lof(1) 
          zeilenanzahlw.w=laengel.l/52 
        
          tags.s=FormatDate("%dd",Date()) 
          monats.s=FormatDate("%mm",Date())
          jahrs.s=FormatDate("%yyyy",Date())      
              
          For iw.w=0 To zeilenanzahlw.w
        
          FileSeek(1,iw.w*52)                                        
                   
          wert2s.s=ReadString(1) 
          datums.s=Left(wert2s.s,10) 
          vornames.s=Mid(wert2s.s,11, 15) 
          nachnames.s=Mid(wert2s.s,26, 25)
       
          tagdateis.s=Left(datums.s,2)
          monatdateis.s=Mid(datums.s,4,2)

          If monatdateis.s=monats.s And tagdateis.s=tags.s
          

                 AddGadgetItem(0, -1,datums.s+Chr(10)+vornames.s+Chr(10)+nachnames.s)
       
          EndIf
          
        
          Next iw.w
        
        CloseFile(1) 
      EndIf
      
      
      Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
   
 EndIf
Hier der letzte Teil: Daten löschen

Code: Alles auswählen

 ;Daten löschen
 ;Der zu löschende Datensatz wird im ListIconGadget markiert und durch "------" aufgefüllt.
 ;Danach wird die Datei Satz für Satz in eine neue "Kopiedatei" kopiert, mit Ausnahme von dem "------ Satz".
 ;Wenn dies fertig ist, wird die alte Datei gelöscht und die "Kopiedatei" wird umbenannt in den ursprünglichen
 ;Dateinamen. Danach können durch Neustart andere Datensätze gelöscht werden.
 
 ;PureBasic 4.0
 
 If OpenWindow(0, 100, 100, 355, 275, "Datenlöschung", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar| #PB_Window_ScreenCentered)
   
   If CreateGadgetList(WindowID(0))
     ListIconGadget(0, 5, 35, 345, 200, "Datum", 80,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
     AddGadgetColumn(0, 1, "Terminart", 90)
     AddGadgetColumn(0, 2, "Name", 150)
     TextGadget(1, 5,  10, 250, 20, "Bitte den Datensatz markieren")
     ButtonGadget(2, 5, 245, 70, 20, "Weiter")
   
   
      If ReadFile(1,"versuch.txt") 
        laengel.l= Lof(1) 
        zeilenanzahlw.w=laengel.l/52 
              
              
          For iw.w=0 To zeilenanzahlw.w
        
          FileSeek(1,iw.w*52)                                        
                   
          wert2s.s=ReadString(1) 
          datums.s=Left(wert2s.s,10) 
          vornames.s=Mid(wert2s.s,11, 15) 
          nachnames.s=Mid(wert2s.s,26, 25)
       
        
          AddGadgetItem(0, -1,datums.s+Chr(10)+vornames.s+Chr(10)+nachnames.s)
       
        
          Next iw.w
        
        CloseFile(1) 
      EndIf
      
     
   EndIf  
 EndIf 
  
  
   Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow 
      Quit = 1
    EndIf
    
      If EventID = #PB_Event_Gadget
      
      
        If EventGadget()=2
         
            wertw.w = GetGadgetState(0)
            ergebniss.s = Str(wertw.w)
            
                     
            CloseWindow(0)
        
         
            If OpenWindow(1,216,0,380,250,"Datenlöschungsfenster",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar| #PB_Window_ScreenCentered )
              
               If CreateGadgetList(WindowID(1))
                  TextGadget(3, 20, 20, 150, 20, "Datenlöschungsfenster")
                  TextGadget(4, 20, 60, 40, 20, "Datum")                       
                  StringGadget(5, 80, 60, 60, 20, "")                           
                  TextGadget(6, 20, 100, 50, 20, "Terminart")
                  StringGadget(7, 80, 100, 100, 20, "")
                  TextGadget(8, 20, 140, 60, 20, "Name")
                  StringGadget(9, 80, 140, 150, 20, "")      
                  ButtonGadget(10, 20, 180, 230, 30, "Daten löschen ( sind sie wirklich sicher?)")
                  ButtonGadget(11, 270, 180, 100, 30, "Abbrechen")
                  
               EndIf
            EndIf
          
              If ReadFile(1,"versuch.txt") 
                               
        
                  FileSeek(1,wertw.w*52)                                        
                   
                  wert2s.s=ReadString(1) 
                  datums.s=Left(wert2s.s,10) 
                  vornames.s=Mid(wert2s.s,11, 15) 
                  nachnames.s=Mid(wert2s.s,26, 25)
       
                  SetGadgetText(5, datums.s)
                  SetGadgetText(7, vornames.s)
                  SetGadgetText(9, nachnames.s)
         
                 CloseFile(1) 
              EndIf
          
      EndIf
   
        
        If EventGadget()=10 
         
                                     
             loeschs.s = LSet("-", 50,"-")                       
             
          If OpenFile(1,"versuch.txt")
                            
              FileSeek(1,wertw.w*52)                                            
      
              WriteStringN(1,loeschs.s)                          
      
              CloseFile(1)                                       
          EndIf
        
           
          If OpenFile(2,"versuchkopie.txt")
                            
          EndIf
          
          
          If ReadFile(1,"versuch.txt") 
          laengefile1l.l= Lof(1) 
          zeilenanzahlfile1w.w=laengefile1l.l/52 
        
              
              
              For iw.w=0 To zeilenanzahlfile1w.w
        
              FileSeek(1,iw.w*52)                                        
                   
              textgesamtfile1s.s=ReadString(1) 
          
       
          
                  If textgesamtfile1s.s<>loeschs.s
          
                      laengefile2l.l= Lof(2)                                                    
                      FileSeek(1,laengefile2l.l)                                            
      
                      WriteStringN(2,textgesamtfile1s.s)                  
                                           
                  EndIf
          
              
              Next iw.w
        
                  CloseFile(1) 
                  CloseFile(2)  
          
          EndIf     
            
            
          DeleteFile("versuch.txt")
          RenameFile("versuchkopie.txt", "versuch.txt")  
            
            
          Quit=1
        
        EndIf
      
            
        EndIf
    
      
        If EventGadget()=11 
           Quit=1
        EndIf
 

      Until Quit=1

   
End

Verfasst: 01.10.2006 13:13
von mk-soft
Es gibt viele möglichkeiten Datendanken anzulegen.
Über SQl -> ODBC, gepackte Dateien (müssen aber komplett gelesen und geschrieben werden.
Oder mit fester strukture wo ein zugriff mit fileseek() sehr gut geht.

Code: Alles auswählen

Structure udtDatenbank
  flag.l              ; flage für löschen und etc
  id.l                ; eindeutige ID für Index
  anrede.s{16}        ; *.s{16} Feste breite
  name.s{16}
  vorname.s{16}
  vorname2.s{16}
  strasse.s{24}
  hausnummer.s{16}
  plz.s{16}
  ort.s{24}
  land.s{24}
  tel_privat.s{24}
  tel_arbeit.s{24}
  tel_mobil.s{24}
  email.s{24}
EndStructure

Debug SizeOf(udtDatenbank)
FF :wink:

Verfasst: 01.10.2006 17:23
von HemSA
Hallo mk-soft,
da hast du Recht mit den mehreren Möglichkeiten eine Datenbank anzulegen.
Ich wollte eben Beispiele für andere Leute mitgeben, die - wie ich früher zum Beispiel - eben nicht wissen wie es dann weitergeht nachdem man eine Datenbank angelegt hat. Wie man z. B. die Werte eingibt, ändert, ausgibt, löscht, oder nach bestimmten Kriterien aussucht.
Man steht dann doch am Anfang doch eher vor dem Berg. Und damit wollte ich eben eine Hilfe (Beispiel) für die Leute mitgeben.

Verfasst: 04.10.2006 21:09
von HemSA
Hallole Ihr alle,
ich habe mal jetzt die ganzen verschiedenen Einheiten zu einer kompletten Einheit zusammengebaut.

Ich habe einige "GOTO Sprungadresse:" vielleicht habt Ihr eine bessere Idee was die Steuerung mit dem Hauptmenü angeht?

Das Beispiel habe ich als "Terminerinnerungsprogramm" gemacht, das alle Termine von: Gestern, Heute, Morgen und Übermorgen anzeigt.
Ich habe mich früher immer aufgeregt, wenn ich schon Wochen an einen Termin gedacht habe, aber gerade zu der Zeit habe ich ihn vergessen.
Das ursprüngliche Programm habe ich vor langer Zeit mal in Qbasic geschrieben, und ich wollte es als Übung für mich mal mit Windows machen ....... ist ja schon etwas moderner........

Wenn man das Programm ins Startmenü einfügt, wird man bei jedem Einschalten vom PC zuerst an die Termine erinnert.
Allerdings muss ich noch sagen, das die Termine nicht im Vorraus angezeigt werden, wenn ein Monatswechsel vorhanden ist. Wer das will kann das ja noch in den Code mit reinpacken.

Das Hauptanliegen von mir war ja einfach mal ein einfaches Beispiel von einer Datenbank im Allgemeinen zu zeigen wie ich es gemacht habe. Mit Dateneingaben, Anzeigen, Löschen, Ändern, ohne natürlich zu sagen, dass es die beste aller Lösungen ist.
Vielleicht kann jemand das Programm oder brauchbare Teile davon brauchen.

Code: Alles auswählen


Hauptfenster:
 ;Hauptfenster
 ;
 ;PureBasic 4.0
Quit=0

If OpenWindow(0,216,0,320,250,"Terminprogramm",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar )
  If CreateGadgetList(WindowID(0))
      TextGadget(1, 70, 20, 200, 30, "Wählen Sie bitte Ihre Anwendung aus")
      ButtonGadget(2, 30, 50, 100, 30, "Termineingabe")
      ButtonGadget(3, 180, 50, 100, 30, "Datenausgabe")
      ButtonGadget(4, 30, 100, 100, 30, "Datenlöschung")
      ButtonGadget(5, 180, 100, 100, 30, "Datenänderung")
      ButtonGadget(6, 30, 150, 100, 30, "Terminausgabe")
      ButtonGadget(7, 30, 200, 250, 30, "Beenden")
      
  
  EndIf

  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow 
      Quit = 1
    EndIf
    
    If EventID = #PB_Event_Gadget
      
        If EventGadget()=2
        Goto Termineingabefenster:
        EndIf
      
        If EventGadget()=3
        Goto Datenausgabe:
        EndIf
    
        If EventGadget()=4
        Goto Datenloeschung:
        EndIf
    
        If EventGadget()=5
        Goto  Datenaenderung:
        EndIf
    
        If EventGadget()=6
        Goto Terminausgabe:
        EndIf
    
        If EventGadget()=7
        Quit = 1
        EndIf
        
    
    EndIf
 
 Until Quit=1
  
EndIf

End
 

 
 Termineingabefenster:
 ;Dateneingabe
 ;In einem Eingabe-Gadget werden für einen neuen Datensatz die Felder eingegeben und in der Datenbank am 
 ;Schluß von den schon vorhandenen Datensätzen angehängt.
 
 ;PureBasic 4.0

If OpenWindow(0,216,0,500,300,"Termineingabefenster",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar )
  If CreateGadgetList(WindowID(0))
      TextGadget(1, 20, 20, 150, 20, "Dateneingabefenster")
      TextGadget(2, 20, 60, 40, 20, "Datum")                       
      StringGadget(3, 80, 60, 60, 20, "")                          
      TextGadget(4, 20, 100, 50, 20, "Terminart")
      StringGadget(5, 80, 100, 100, 20, "")
      TextGadget(6, 20, 140, 60, 20, "Name")
      StringGadget(7, 80, 140, 150, 20, "")      
      ButtonGadget(8, 60, 200, 100, 30, "Daten hinzufügen")
      ButtonGadget(9, 200, 200, 100, 30, "Beenden")
      TextGadget(10, 150, 60, 380, 20, "Nur die ersten 10 Zeichen werden übernommen")
      TextGadget(11, 190, 100, 380, 20, "Nur die ersten 15 Zeichen werden übernommen")
      TextGadget(12, 240, 140, 380, 20, "Nur die ersten 25 Zeichen werden übernommen")
  
  
  EndIf

  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow 
      Quit = 1
    EndIf
    If EventID = #PB_Event_Gadget
      
            
        If EventGadget()=8
      
             text1s.s = GetGadgetText(3)                             ;auslesen vom Stringgadget 
             ergebnis1s.s = LSet(text1s.s, 10)                       ;auffüllen/begrenzen des Stringgadget auf 10 Zeichen
             text2s.s = GetGadgetText(5)
             ergebnis2s.s = LSet(text2s.s, 15)
             text3s.s = GetGadgetText(7)
             ergebnis3s.s = LSet(text3s.s, 25)
             textgesamts.s = ergebnis1s.s+ergebnis2s.s+ergebnis3s.s  ;zusammenlegen von den Feldern ( Gesamttext )
      
          If OpenFile(1,"termin.dat")
              laengel.l= Lof(1)                                      ; ermitteln der Dateilaenge              
              FileSeek(1,laengel.l)                                  ; setzt den Zeiger ans Dateiende           
      
              WriteStringN(1,textgesamts.s)                          ;schreibt den Gesamttext an das Ende von der Datei
      
              CloseFile(1)                                           ;schließt die Datei
          EndIf
        
        SetGadgetText(3, "")                                         ;Eingabefelder werden gelöscht nachdem der 
        SetGadgetText(5, "")                                         ;"Daten hinzufügen" BUTTON gedrückt wurde
        SetGadgetText(7, "")
        
        EndIf
      
    
        If EventGadget()=9
         Quit = 1
        EndIf
           
    EndIf
 
 Until Quit=1
  
EndIf

CloseWindow(0)

Goto Hauptfenster:


Datenausgabe:
 ;Datenausgabe komplett
 ;In einem ListIconGadget werden alle in der Datenbank vorhandene Datensätze aufgelistet
 
 ;PureBasic 4.0
 
 If OpenWindow(0, 100, 100, 355, 200, "Datenausgabe", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar| #PB_Window_ScreenCentered)
   
   If CreateGadgetList(WindowID(0))
     ListIconGadget(0, 5, 5, 345, 190, "Datum", 80,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
     AddGadgetColumn(0, 1, "Terminart", 90)
     AddGadgetColumn(0, 2, "Name", 150)
          
     
      If ReadFile(1,"termin.dat") 
        laengel.l= Lof(1) 
        zeilenanzahlw.w=laengel.l/52 
              
              
          For iw.w=0 To zeilenanzahlw.w
        
          FileSeek(1,iw.w*52)                                        
                   
          wert2s.s=ReadString(1) 
          datums.s=Left(wert2s.s,10) 
          vornames.s=Mid(wert2s.s,11, 15) 
          nachnames.s=Mid(wert2s.s,26, 25)
       
        
          AddGadgetItem(0, -1,datums.s+Chr(10)+vornames.s+Chr(10)+nachnames.s)
       
         
          Next iw.w
        
        CloseFile(1) 
      
      EndIf
      
      
      Repeat 
      
      Until WaitWindowEvent() = #PB_Event_CloseWindow
  
  
  EndIf
   
 EndIf
 
 CloseWindow(0)
 
 Goto Hauptfenster:
 
 
 
 Datenloeschung:
 ;Daten löschen
 ;Der zu löschende Datensatz wird im ListIconGadget markiert und durch "------" aufgefüllt.
 ;Danach wird die Datei Satz für Satz in eine neue "Kopiedatei" kopiert, mit Ausnahme von dem "------ Satz".
 ;Wenn dies fertig ist, wird die alte Datei gelöscht und die "Kopiedatei" wird umbenannt in den ursprünglichen
 ;Dateinamen. Danach können durch Neustart andere Datensätze gelöscht werden.
 
 ;PureBasic 4.0
 
 If OpenWindow(0, 100, 100, 355, 275, "Datenlöschung", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar| #PB_Window_ScreenCentered)
   
   If CreateGadgetList(WindowID(0))
     ListIconGadget(0, 5, 35, 345, 200, "Datum", 80,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
     AddGadgetColumn(0, 1, "Terminart", 90)
     AddGadgetColumn(0, 2, "Name", 150)
     TextGadget(1, 5,  10, 250, 20, "Bitte den Datensatz markieren")
     ButtonGadget(2, 5, 245, 70, 20, "Weiter")
   
   
      If ReadFile(1,"termin.dat") 
        laengel.l= Lof(1) 
        zeilenanzahlw.w=laengel.l/52 
              
              
          For iw.w=0 To zeilenanzahlw.w
        
          FileSeek(1,iw.w*52)                                        
                   
          wert2s.s=ReadString(1) 
          datums.s=Left(wert2s.s,10) 
          vornames.s=Mid(wert2s.s,11, 15) 
          nachnames.s=Mid(wert2s.s,26, 25)
       
        
          AddGadgetItem(0, -1,datums.s+Chr(10)+vornames.s+Chr(10)+nachnames.s)
       
        
          Next iw.w
        
        CloseFile(1) 
      EndIf
      
     
   EndIf  
 EndIf 
  
  
   Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow 
      Quit = 1
      CloseWindow(0)
      Goto Hauptfenster:
    
    EndIf
    
      If EventID = #PB_Event_Gadget
       
        If EventGadget()=2
         
            wertw.w = GetGadgetState(0)
            ergebniss.s = Str(wertw.w)
                                 
            CloseWindow(0)
            Quit = 1
        
        EndIf
        
       EndIf 
        
     Until Quit=1
     Quit=0   
         
            If OpenWindow(1,216,0,380,250,"Datenlöschungsfenster",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar| #PB_Window_ScreenCentered )
              
               If CreateGadgetList(WindowID(1))
                  TextGadget(3, 20, 20, 150, 20, "Datenlöschungsfenster")
                  TextGadget(4, 20, 60, 40, 20, "Datum")                       
                  StringGadget(5, 80, 60, 60, 20, "")                           
                  TextGadget(6, 20, 100, 50, 20, "Terminart")
                  StringGadget(7, 80, 100, 100, 20, "")
                  TextGadget(8, 20, 140, 60, 20, "Name")
                  StringGadget(9, 80, 140, 150, 20, "")      
                  ButtonGadget(10, 20, 180, 230, 30, "Daten löschen ( sind sie sich wirklich sicher?)")
                  ButtonGadget(11, 270, 180, 100, 30, "Abbrechen")
                  
               EndIf
            
            EndIf
          
              If ReadFile(1,"termin.dat") 
                               
        
                  FileSeek(1,wertw.w*52)                                        
                   
                  wert2s.s=ReadString(1) 
                  datums.s=Left(wert2s.s,10) 
                  vornames.s=Mid(wert2s.s,11, 15) 
                  nachnames.s=Mid(wert2s.s,26, 25)
       
                  SetGadgetText(5, datums.s)
                  SetGadgetText(7, vornames.s)
                  SetGadgetText(9, nachnames.s)
         
                 CloseFile(1) 
              
              EndIf
       
   
      Repeat
        EventID = WaitWindowEvent()
        If EventID = #PB_Event_CloseWindow 
         Quit = 1
          ;CloseWindow(1)
          ;Goto Hauptfenster:
    
        EndIf
   
        
        If EventGadget()=10 
         
                                     
             loeschs.s = LSet("-", 50,"-")                       
             
          If OpenFile(1,"termin.dat")
                            
              FileSeek(1,wertw.w*52)                                            
      
              WriteStringN(1,loeschs.s)                          
      
              CloseFile(1)                                       
          
          EndIf
        
           
          If OpenFile(2,"terminkopie.dat")
                            
          EndIf
          
          
          If ReadFile(1,"termin.dat") 
          laengefile1l.l= Lof(1) 
          zeilenanzahlfile1w.w=laengefile1l.l/52 
        
              
              
              For iw.w=0 To zeilenanzahlfile1w.w-1      ;wegen Löschzeile = 1 Zeile weniger
        
              FileSeek(1,iw.w*52)                                        
                   
              textgesamtfile1s.s=ReadString(1) 
          
          
                  If textgesamtfile1s.s<>loeschs.s
          
                      laengefile2l.l= Lof(2)                                                    
                      FileSeek(1,laengefile2l.l)                                            
      
                      WriteStringN(2,textgesamtfile1s.s)                  
                                           
                  EndIf
          
              
              Next iw.w
        
                  CloseFile(1) 
                  CloseFile(2)  
          
          EndIf     
            
            
          DeleteFile("termin.dat")
          RenameFile("terminkopie.dat", "termin.dat")  
          DeleteFile("terminkopie.dat")  
            
          Quit=1
        
        EndIf
      
       
        If EventGadget()=11 
           Quit=1
        EndIf
 

      Until Quit=1

 CloseWindow(1) 
 
 Goto Hauptfenster:
 
 
 
 Datenaenderung:
 ;"Datenänderung"
 ;In diesem Abschnitt werden die ganzen Datenensätze von einer Datenbank in einem ListIconGadget aufgelistet.
 ;Danach wird durch Auswählen von einem Datensatz (markieren) der Datensatz in einem Eingabe-Gadget, wie
 ;bei der Dateneingabe, angezeigt. Darin können dann in den gewünschten Datenfeldern die Änderungen
 ;vorgenommen werden und der Datensatz wird danach wieder an der gleichen Stelle von der Datenbank
 ;abgespeichert.
 
 ;PureBasic 4.0 
 
 If OpenWindow(0, 100, 100, 355, 275, "Datenänderung", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar| #PB_Window_ScreenCentered)
   
   If CreateGadgetList(WindowID(0))
     ListIconGadget(0, 5, 35, 345, 200, "Datum", 80,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
     AddGadgetColumn(0, 1, "Terminart", 90)
     AddGadgetColumn(0, 2, "Name", 150)
     TextGadget(1, 5,  10, 250, 20, "Bitte den Datensatz markieren")
     ButtonGadget(2, 5, 245, 70, 20, "Weiter")
   
   
      If ReadFile(1,"termin.dat") 
        laengel.l= Lof(1) 
        zeilenanzahlw.w=laengel.l/52 
              
              
          For iw.w=0 To zeilenanzahlw.w
        
          FileSeek(1,iw.w*52)                                        
                   
          wert2s.s=ReadString(1) 
          datums.s=Left(wert2s.s,10) 
          vornames.s=Mid(wert2s.s,11, 15) 
          nachnames.s=Mid(wert2s.s,26, 25)
       
        
          AddGadgetItem(0, -1,datums.s+Chr(10)+vornames.s+Chr(10)+nachnames.s)
       
          
          Next iw.w
        
        CloseFile(1) 
      EndIf
   
     
   EndIf  
 EndIf 
  
  
   Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow 
      Quit = 1
      CloseWindow(0)
      Goto Hauptfenster:
    EndIf
    
      If EventID = #PB_Event_Gadget
      
      
        If EventGadget()=2
         
            wertw.w = GetGadgetState(0)
            ergebniss.s = Str(wertw.w)
                   
            CloseWindow(0)
            Quit=1
        EndIf
      
      EndIf
         
    Until Quit=1
    Quit=0
         
         
            If OpenWindow(1,216,0,500,300,"Datenänderungsfenster",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar| #PB_Window_ScreenCentered )
              
               If CreateGadgetList(WindowID(1))
                  TextGadget(3, 20, 20, 150, 20, "Datenänderungsfenster")
                  TextGadget(4, 20, 60, 40, 20, "Datum")                       
                  StringGadget(5, 80, 60, 60, 20, "")                           
                  TextGadget(6, 20, 100, 50, 20, "Terminart")
                  StringGadget(7, 80, 100, 100, 20, "")
                  TextGadget(8, 20, 140, 60, 20, "Name")
                  StringGadget(9, 80, 140, 150, 20, "")      
                  ButtonGadget(10, 20, 200, 160, 30, "Geänderte Daten abspeichern")
                  ButtonGadget(11, 200, 200, 100, 30, "Abrechen")
                  TextGadget(12, 150, 60, 380, 20, "Nur die ersten 10 Zeichen werden übernommen")
                  TextGadget(13, 190, 100, 380, 20, "Nur die ersten 15 Zeichen werden übernommen")
                  TextGadget(14, 240, 140, 380, 20, "Nur die ersten 25 Zeichen werden übernommen")
  
               EndIf
            EndIf
          
              If ReadFile(1,"termin.dat") 
                               
        
                  FileSeek(1,wertw.w*52)                                        
                   
                  wert2s.s=ReadString(1) 
                  datums.s=Left(wert2s.s,10) 
                  vornames.s=Mid(wert2s.s,11, 15) 
                  nachnames.s=Mid(wert2s.s,26, 25)
       
                  SetGadgetText(5, datums.s)
                  SetGadgetText(7, vornames.s)
                  SetGadgetText(9, nachnames.s)
         
                 CloseFile(1) 
              EndIf
               
  
       Repeat
        EventID = WaitWindowEvent()
        If EventID = #PB_Event_CloseWindow 
         Quit = 1
          ;CloseWindow(1)
          ;Goto Hauptfenster:
        EndIf
        
       
        If EventGadget()=10 
         
             text1s.s = GetGadgetText(5)                             ;auslesen vom Stringgadget 
             ergebnis1s.s = LSet(text1s.s, 10)                       ;auffüllen/begrenzen des Stringgadget auf 10 Zeichen
             text2s.s = GetGadgetText(7)
             ergebnis2s.s = LSet(text2s.s, 15)
             text3s.s = GetGadgetText(9)
             ergebnis3s.s = LSet(text3s.s, 25)
             textgesamts.s = ergebnis1s.s+ergebnis2s.s+ergebnis3s.s  ;zusammenlegen von den Feldern ( Gesamttext )
      
          If OpenFile(1,"termin.dat")
                            
              FileSeek(1,wertw.w*52)                                 ; setzt den Zeiger an die Adresse           
      
              WriteStringN(1,textgesamts.s)                          ;schreibt den Gesamttext in die Adresse von der Datei
      
              CloseFile(1)                                           ;schließt die Datei
          
          EndIf
        
             Quit=1
        
        EndIf
        
       
        If EventGadget()=11 
           Quit=1
        EndIf
 

      Until Quit=1

 
 CloseWindow(1)

Goto Hauptfenster:


Terminausgabe:
 ;"Terminausgabe - Ausgabe nach Suchanforderung"
 ;In dem Beispielprogramm geht es um eine Datenbank, wo "Terminarten" ( Geburtstag oder andere Termine )
 ;mit dem Datum und Namen abgespeichert werden. Danach werden die Daten von der Datenbank Satz für Satz
 ;mit dem heutigen Datum verglichen (Monat und Tag) und bei Übereinstimmung in einem ListIconGadget
 ;aufgelistet. Es kann natürlich auch nach anderen "Suchmerkmalen" ausgesondert werden, es soll nur
 ;der Weg beschrieben werden, wie man das Problem angeht.
 
 ;PureBasic 4.0 
 
 If OpenWindow(0, 100, 100, 450, 200, "Termine - für gestern, heute, morgen und übermorgen", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget |#PB_Window_TitleBar| #PB_Window_ScreenCentered)
   
   If CreateGadgetList(WindowID(0))
     ListIconGadget(0, 5, 5, 440, 190, "Datum", 70,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
     AddGadgetColumn(0, 1, "Terminart", 140)
     AddGadgetColumn(0, 2, "Name", 220)
          
     
      If ReadFile(1,"termin.dat") 
          laengel.l= Lof(1) 
          zeilenanzahlw.w=laengel.l/52 
        
          tags.s=FormatDate("%dd",Date()) 
          monats.s=FormatDate("%mm",Date())
          jahrs.s=FormatDate("%yyyy",Date()) 
          
          tagl.l= Val(tags.s)
               
              
          For iw.w=0 To zeilenanzahlw.w
        
          FileSeek(1,iw.w*52)                                        
                   
          wert2s.s=ReadString(1) 
          datums.s=Left(wert2s.s,10) 
          vornames.s=Mid(wert2s.s,11, 15) 
          nachnames.s=Mid(wert2s.s,26, 25)
       
          tagdateis.s=Left(datums.s,2)
          monatdateis.s=Mid(datums.s,4,2)
          
          tagdateil.l= Val(tagdateis.s)

          If monatdateis.s=monats.s
          
                If tagdateil.l-1=tagl.l Or tagdateil.l=tagl.l Or tagdateil.l+1=tagl.l Or tagdateil.l+2=tagl.l
                 
                 AddGadgetItem(0, -1,datums.s+Chr(10)+vornames.s+Chr(10)+nachnames.s)
       
                EndIf
         
          EndIf
          
        
          Next iw.w
        
        CloseFile(1) 
      EndIf
      
      
      Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
   
 EndIf
 
 CloseWindow(0)
 
 Goto Hauptfenster:
 
 
 End
 

Wichtig war eine Änderung im "Löschbereich"!

Code: Alles auswählen

 For iw.w=0 To zeilenanzahlfile1w.w-1
Die "-1" am Schluss muss eingefügt werden, da die "Kopierdatei" wegen dem Löschen von einer Zeile, eine Zeile weniger hat als die "Ursprungsdatei". Sonst kommt in die letzte Zeile am Anfang ein "Zeilenumbruchzeichen ( was ja am Schluss der Zeile sein sollte ) und die "Architektur" von der Datei kommt durcheinander. In dem Fall können zwar neue Termine eingegeben werden, aber man kann nicht mehr auf die neu eingegebenen Daten zugreifen.

Verfasst: 04.10.2006 23:32
von Kiffi
Hallo HemSA,

finde ich klasse, dass Du Dich als 'Board-Neuling' von Anfang an kontruktiv in
das Geschehen hier einbringst! :allright:

> Ich habe einige "GOTO Sprungadresse:" vielleicht habt Ihr eine bessere
> Idee was die Steuerung mit dem Hauptmenü angeht?

nimm anstelle von Goto einfach Prozeduren. Das macht den Code um einiges
übersichtlicher. Falls Du diesbezüglich Fragen hast, dann sag Bescheid.

Und noch eins fällt mir auf Anhieb auf. Verwende für Fenster und Gadgets
lieber Konstanten. Also nicht so:

Code: Alles auswählen

ButtonGadget(2, 30, 50, 100, 30, "Termineingabe")

sondern beispielsweise so:

Code: Alles auswählen

ButtonGadget(#ButtonTermineingabe, 30, 50, 100, 30, "Termineingabe")


Die Konstante musst Du dann zuvor einmalig festlegen (beispielsweise in
einer Enumeration)

Dann kannst Du auch noch später auf Anhieb erkennen, welches Gadget
welche Funktion hat.

Code: Alles auswählen

If EventGadget()=#ButtonTermineingabe
  Goto Termineingabefenster:
EndIf

liest sich dann auch viel besser als

Code: Alles auswählen

If EventGadget()=2
  Goto Termineingabefenster:
EndIf
Und noch ein Wort zu Deinen If-Abfragen:

Code: Alles auswählen

If EventGadget()=2
	Goto Termineingabefenster:
EndIf

If EventGadget()=3
	Goto Datenausgabe:
EndIf

If EventGadget()=4
	Goto Datenloeschung:
EndIf

If EventGadget()=5
	Goto  Datenaenderung:
EndIf

If EventGadget()=6
	Goto Terminausgabe:
EndIf

If EventGadget()=7
	Quit = 1
EndIf

... ist zwar nicht falsch, aber das kann man auch ein wenig eleganter
formulieren, weil EventGadget pro Eventdurchlauf ja immer nur einen
Zustand annehmen kann:

Code: Alles auswählen

If EventGadget()=2
	Goto Termineingabefenster:
ElseIf EventGadget()=3
	Goto Datenausgabe:
ElseIf EventGadget()=4
	Goto Datenloeschung:
ElseIf EventGadget()=5
	Goto  Datenaenderung:
ElseIf EventGadget()=6
	Goto Terminausgabe:
ElseIf EventGadget()=7
	Quit = 1
EndIf
oder aber mit Select-Case (meinem Favoriten)

Code: Alles auswählen

Select EventGadget()
	Case 2
		Goto Termineingabefenster:
	Case 3
		Goto Datenausgabe:
	Case 4
		Goto Datenloeschung:
	Case 5
		Goto  Datenaenderung:
	Case 6
		Goto Terminausgabe:
	Case 7
		Quit = 1
EndSelect 
(ist auch weniger Tipparbeit ;-) )

Ich hoffe, dass ich Dich dazu animieren kann, Deinen Code noch einmal
unter diesen Gesichtspunkten unter die Lupe zu nehmen.

Grüße ... Kiffi

Verfasst: 05.10.2006 12:12
von HemSA
Hallol Ihr - noch mal eine kleine Berichtigung:

Code: Alles auswählen

If tagdateil.l-1=tagl.l Or tagdateil.l=tagl.l Or tagdateil.l+1=tagl.l Or tagdateil.l+2=tagl.l 
muss:

Code: Alles auswählen

If tagdateil.l+1=tagl.l Or tagdateil.l=tagl.l Or tagdateil.l-1=tagl.l Or tagdateil.l-2=tagl.l 
"+" und "-" verwechselt, sonst werden nicht die nächsten 2 Tage und gestern angezeigt, sondern umgekehrt (morgen und die letzten 2 Tage).


Hallo Kiffi
Ich hoffe, dass ich Dich dazu animieren kann, Deinen Code noch einmal
unter diesen Gesichtspunkten unter die Lupe zu nehmen.
Danke Kiffi für die Tips, ich werde mir das zu Herzen nehmen und den Code dementsprechend nochmal überarbeiten.

Nochmal eine Frage:
1.) Es geht ganz ohne "GOTO Sprungadresse:" ? Ich habe schon mal etwas angefangen, alle Programmteile ( ausser das Hauptmenue ) in Prozeduren gepackt und an den Anfang gestellt. Das Hauptmenue ( jetzt ganz am Schluss vom Code ) habe ich am Schluss von den Prozeduren mit "Goto Hauptfenster:" angesprungen.

2.) Wenn ich das Hauptmenue auch in eine Prozedur packe ( habe dann nur noch Prozeduren im Code ) und es statt: "Goto Hauptfenster:" mit: "Hauptfenster()" anspringen will, kommt immer die Fehlermeldung:
"Das Hauptfenster() sei keine Funktion etc." Kann ein Code nur aus Prozeduren bestehen ( die Hilfe sagt darüber nicht viel aus, sogar nicht einmal wie eine Prozedur überhaupt aufgerufen wird - dieses habe ich von anderen Beispielen erfahren )?

Verfasst: 05.10.2006 12:32
von Kiffi
> 1.) Es geht ganz ohne "GOTO Sprungadresse:" ?

ja, das geht.

> Das Hauptmenue ( jetzt ganz am Schluss vom Code ) habe ich am Schluss
> von den Prozeduren mit "Goto Hauptfenster:" angesprungen.

brauchst Du nicht, weil die Prozedur am Ende wieder dorthin zurückkehrt,
wo sie aufgerufen worden ist.

> kommt immer die Fehlermeldung: "Das Hauptfenster() sei keine Funktion
> etc."

Das liegt am Kompilierungverfahren von PureBasic. Schau Dir mal den
Befehl Declare in der Hilfe an. Das ist dort meines Erachtens ganz gut erklärt.

> Kann ein Code nur aus Prozeduren bestehen

Idealerweise besteht ein Code nur aus Prozeduren plus einem Aufruf der
Hauptprozedur. Beispielsweise so:

Code: Alles auswählen

Procedure Lala()
EndProcedure
Procedure Lulu()
EndProcedure
Procedure Main()
  ;Hier wird Lala() und/oder Lulu() aufgerufen
EndProcedure

Main() ; Ein einziger Aufruf der Main-Prozedur
Ich kann mir vorstellen, dass das für Dich vorerst noch ein wenig
unverständlich ist, weil viele Dinge, die jetzt in Purebasic machbar sind, in
QBasic noch nicht möglich waren. Bei Problemen kannst Du gerne
jederzeit hier nachfragen.

Grüße ... Kiffi

Verfasst: 05.10.2006 22:33
von HemSA
Hallo Kiffi,
irgendwie sitze ich da wohl auf dem Schlauch, ich habe den Code in Prozeduren gepackt, aber es geht nicht so wie ich es will.

1.)Ich bekomme am Anfang das "Hauptmenuefenster" von der Hauptseite, wenn ich dann was auswähle komme ich auch dorthin, und kann auch die Operation ausführen ( löschen, ändern, anzeigen etc. ). Aber wenn ich dann den Programmabschnitt schliesse ( sei es durch das Programm selbst, "Abrechen Button" oder "X" ) beendet sich das Programm komplett ohne wieder mit dem "Hauptmenuefenster" weiterzumachen (im "Kompilieren/Starten" Modus - habe keine EXE gemacht und probiert ).

2.) Wohin springt denn die Prozedur nachdem sie fertig ist? Am Anfang zu der Prozedur wo die Prozedur aufgerufen hat, oder nach der Zeile in der Prozedur bei der sie aufgerufen wurde?



3.) Die
Enumeration
#Window; wird 0 sein
#Gadget1; wird 1 sein
#Gadget2; wird 2 sein
EndEnumeration

müsste ich dann immer gleich nach dem "Procedure blabla()" einfügen?

4.) Eine Fehlermeldung bekomme ich nicht

Hier ist mal der Code:

Code: Alles auswählen

Procedure Termineingabefenster()
 ;Dateneingabe
 ;In einem Eingabe-Gadget werden für einen neuen Datensatz die Felder eingegeben und in der Datenbank am 
 ;Schluß von den schon vorhandenen Datensätzen angehängt.
 
 ;PureBasic 4.0



If OpenWindow(0,216,0,500,300,"Termineingabefenster",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar )
  If CreateGadgetList(WindowID(0))
      TextGadget(1, 20, 20, 150, 20, "Dateneingabefenster")
      TextGadget(2, 20, 60, 40, 20, "Datum")                       
      StringGadget(3, 80, 60, 60, 20, "")                          
      TextGadget(4, 20, 100, 50, 20, "Terminart")
      StringGadget(5, 80, 100, 100, 20, "")
      TextGadget(6, 20, 140, 60, 20, "Name")
      StringGadget(7, 80, 140, 150, 20, "")      
      ButtonGadget(8, 60, 200, 100, 30, "Daten hinzufügen")
      ButtonGadget(9, 200, 200, 100, 30, "Beenden")
      TextGadget(10, 150, 60, 380, 20, "Nur die ersten 10 Zeichen werden übernommen")
      TextGadget(11, 190, 100, 380, 20, "Nur die ersten 15 Zeichen werden übernommen")
      TextGadget(12, 240, 140, 380, 20, "Nur die ersten 25 Zeichen werden übernommen")
  
  
  EndIf

  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow 
      Quit = 1
    EndIf
    If EventID = #PB_Event_Gadget
      
            
        If EventGadget()=8
      
             text1s.s = GetGadgetText(3)                             ;auslesen vom Stringgadget 
             ergebnis1s.s = LSet(text1s.s, 10)                       ;auffüllen/begrenzen des Stringgadget auf 10 Zeichen
             text2s.s = GetGadgetText(5)
             ergebnis2s.s = LSet(text2s.s, 15)
             text3s.s = GetGadgetText(7)
             ergebnis3s.s = LSet(text3s.s, 25)
             textgesamts.s = ergebnis1s.s+ergebnis2s.s+ergebnis3s.s  ;zusammenlegen von den Feldern ( Gesamttext )
      
          If OpenFile(1,"termin.dat")
              laengel.l= Lof(1)                                      ; ermitteln der Dateilaenge              
              FileSeek(1,laengel.l)                                  ; setzt den Zeiger ans Dateiende           
      
              WriteStringN(1,textgesamts.s)                          ;schreibt den Gesamttext an das Ende von der Datei
      
              CloseFile(1)                                           ;schließt die Datei
          EndIf
        
        SetGadgetText(3, "")                                         ;Eingabefelder werden gelöscht nachdem der 
        SetGadgetText(5, "")                                         ;"Daten hinzufügen" BUTTON gedrückt wurde
        SetGadgetText(7, "")
        
        EndIf
      
    
        If EventGadget()=9
         Quit = 1
        EndIf
           
    EndIf
 
 Until Quit=1
  
EndIf

CloseWindow(0)

;Goto Hauptfenster:




EndProcedure 



Procedure Datenausgabe()
 ;Datenausgabe komplett
 ;In einem ListIconGadget werden alle in der Datenbank vorhandene Datensätze aufgelistet
 
 ;PureBasic 4.0
 

 
 If OpenWindow(0, 100, 100, 355, 200, "Datenausgabe", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar| #PB_Window_ScreenCentered)
   
   If CreateGadgetList(WindowID(0))
     ListIconGadget(0, 5, 5, 345, 190, "Datum", 80,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
     AddGadgetColumn(0, 1, "Terminart", 90)
     AddGadgetColumn(0, 2, "Name", 150)
          
     
      If ReadFile(1,"termin.dat") 
        laengel.l= Lof(1) 
        zeilenanzahlw.w=laengel.l/52 
              
              
          For iw.w=0 To zeilenanzahlw.w
        
          FileSeek(1,iw.w*52)                                        
                   
          wert2s.s=ReadString(1) 
          datums.s=Left(wert2s.s,10) 
          vornames.s=Mid(wert2s.s,11, 15) 
          nachnames.s=Mid(wert2s.s,26, 25)
       
        
          AddGadgetItem(0, -1,datums.s+Chr(10)+vornames.s+Chr(10)+nachnames.s)
       
         
          Next iw.w
        
        CloseFile(1) 
      
      EndIf
      
      
      Repeat 
      
      Until WaitWindowEvent() = #PB_Event_CloseWindow
  
  
  EndIf
   
 EndIf
 
 CloseWindow(0)
 
 ;Goto Hauptfenster:
 
 EndProcedure 
 
 
 
 Procedure Datenloeschung()
 ;Daten löschen
 ;Der zu löschende Datensatz wird im ListIconGadget markiert und durch "------" aufgefüllt.
 ;Danach wird die Datei Satz für Satz in eine neue "Kopiedatei" kopiert, mit Ausnahme von dem "------ Satz".
 ;Wenn dies fertig ist, wird die alte Datei gelöscht und die "Kopiedatei" wird umbenannt in den ursprünglichen
 ;Dateinamen. Danach können durch Neustart andere Datensätze gelöscht werden.
 
 ;PureBasic 4.0
 
 If OpenWindow(0, 100, 100, 355, 275, "Datenlöschung", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar| #PB_Window_ScreenCentered)
   
   If CreateGadgetList(WindowID(0))
     ListIconGadget(0, 5, 35, 345, 200, "Datum", 80,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
     AddGadgetColumn(0, 1, "Terminart", 90)
     AddGadgetColumn(0, 2, "Name", 150)
     TextGadget(1, 5,  10, 250, 20, "Bitte den Datensatz markieren")
     ButtonGadget(2, 5, 245, 70, 20, "Weiter")
   
   
      If ReadFile(1,"termin.dat") 
        laengel.l= Lof(1) 
        zeilenanzahlw.w=laengel.l/52 
              
              
          For iw.w=0 To zeilenanzahlw.w
        
          FileSeek(1,iw.w*52)                                        
                   
          wert2s.s=ReadString(1) 
          datums.s=Left(wert2s.s,10) 
          vornames.s=Mid(wert2s.s,11, 15) 
          nachnames.s=Mid(wert2s.s,26, 25)
       
        
          AddGadgetItem(0, -1,datums.s+Chr(10)+vornames.s+Chr(10)+nachnames.s)
       
        
          Next iw.w
        
        CloseFile(1) 
      EndIf
      
     
   EndIf  
 EndIf 
  
  
   Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow 
      Quit = 1
      CloseWindow(0)
      ;Goto Hauptfenster:
      ProcedureReturn
    
    EndIf
    
      If EventID = #PB_Event_Gadget
       
        If EventGadget()=2
         
            wertw.w = GetGadgetState(0)
            ergebniss.s = Str(wertw.w)
                                 
            CloseWindow(0)
            Quit = 1
        
        EndIf
        
       EndIf 
        
     Until Quit=1
     Quit=0   
         
            If OpenWindow(1,216,0,380,250,"Datenlöschungsfenster",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar| #PB_Window_ScreenCentered )
              
               If CreateGadgetList(WindowID(1))
                  TextGadget(3, 20, 20, 150, 20, "Datenlöschungsfenster")
                  TextGadget(4, 20, 60, 40, 20, "Datum")                       
                  StringGadget(5, 80, 60, 60, 20, "")                           
                  TextGadget(6, 20, 100, 50, 20, "Terminart")
                  StringGadget(7, 80, 100, 100, 20, "")
                  TextGadget(8, 20, 140, 60, 20, "Name")
                  StringGadget(9, 80, 140, 150, 20, "")      
                  ButtonGadget(10, 20, 180, 230, 30, "Daten löschen ( sind sie sich wirklich sicher?)")
                  ButtonGadget(11, 270, 180, 100, 30, "Abbrechen")
                  
               EndIf
            
            EndIf
          
              If ReadFile(1,"termin.dat") 
                               
        
                  FileSeek(1,wertw.w*52)                                        
                   
                  wert2s.s=ReadString(1) 
                  datums.s=Left(wert2s.s,10) 
                  vornames.s=Mid(wert2s.s,11, 15) 
                  nachnames.s=Mid(wert2s.s,26, 25)
       
                  SetGadgetText(5, datums.s)
                  SetGadgetText(7, vornames.s)
                  SetGadgetText(9, nachnames.s)
         
                 CloseFile(1) 
              
              EndIf
       
   
      Repeat
        EventID = WaitWindowEvent()
        If EventID = #PB_Event_CloseWindow 
         Quit = 1
          ;CloseWindow(1)
          ;Goto Hauptfenster:
    
        EndIf
   
        
        If EventGadget()=10 
         
                                     
             loeschs.s = LSet("-", 50,"-")                       
             
          If OpenFile(1,"termin.dat")
                            
              FileSeek(1,wertw.w*52)                                            
      
              WriteStringN(1,loeschs.s)                          
      
              CloseFile(1)                                       
          
          EndIf
        
           
          If OpenFile(2,"terminkopie.dat")
                            
          EndIf
          
          
          If ReadFile(1,"termin.dat") 
          laengefile1l.l= Lof(1) 
          zeilenanzahlfile1w.w=laengefile1l.l/52 
        
              
              
              For iw.w=0 To zeilenanzahlfile1w.w-1      ;wegen Löschzeile = 1 Zeile weniger
        
              FileSeek(1,iw.w*52)                                        
                   
              textgesamtfile1s.s=ReadString(1) 
          
          
                  If textgesamtfile1s.s<>loeschs.s
          
                      laengefile2l.l= Lof(2)                                                    
                      FileSeek(1,laengefile2l.l)                                            
      
                      WriteStringN(2,textgesamtfile1s.s)                  
                                           
                  EndIf
          
              
              Next iw.w
        
                  CloseFile(1) 
                  CloseFile(2)  
          
          EndIf     
            
            
          DeleteFile("termin.dat")
          RenameFile("terminkopie.dat", "termin.dat")  
          DeleteFile("terminkopie.dat")  
            
          Quit=1
        
        EndIf
      
       
        If EventGadget()=11 
           Quit=1
        EndIf
 

      Until Quit=1

 CloseWindow(1) 
 
 ;Goto Hauptfenster:
 
 EndProcedure 
 
 
 Procedure Datenaenderung()
 ;"Datenänderung"
 ;In diesem Abschnitt werden die ganzen Datenensätze von einer Datenbank in einem ListIconGadget aufgelistet.
 ;Danach wird durch Auswählen von einem Datensatz (markieren) der Datensatz in einem Eingabe-Gadget, wie
 ;bei der Dateneingabe, angezeigt. Darin können dann in den gewünschten Datenfeldern die Änderungen
 ;vorgenommen werden und der Datensatz wird danach wieder an der gleichen Stelle von der Datenbank
 ;abgespeichert.
 
 ;PureBasic 4.0 
 
 If OpenWindow(0, 100, 100, 355, 275, "Datenänderung", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar| #PB_Window_ScreenCentered)
   
   If CreateGadgetList(WindowID(0))
     ListIconGadget(0, 5, 35, 345, 200, "Datum", 80,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
     AddGadgetColumn(0, 1, "Terminart", 90)
     AddGadgetColumn(0, 2, "Name", 150)
     TextGadget(1, 5,  10, 250, 20, "Bitte den Datensatz markieren")
     ButtonGadget(2, 5, 245, 70, 20, "Weiter")
   
   
      If ReadFile(1,"termin.dat") 
        laengel.l= Lof(1) 
        zeilenanzahlw.w=laengel.l/52 
              
              
          For iw.w=0 To zeilenanzahlw.w
        
          FileSeek(1,iw.w*52)                                        
                   
          wert2s.s=ReadString(1) 
          datums.s=Left(wert2s.s,10) 
          vornames.s=Mid(wert2s.s,11, 15) 
          nachnames.s=Mid(wert2s.s,26, 25)
       
        
          AddGadgetItem(0, -1,datums.s+Chr(10)+vornames.s+Chr(10)+nachnames.s)
       
          
          Next iw.w
        
        CloseFile(1) 
      EndIf
   
     
   EndIf  
 EndIf 
  
  
   Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow 
      Quit = 1
      CloseWindow(0)
      ;Goto Hauptfenster:
      ProcedureReturn
    EndIf
    
      If EventID = #PB_Event_Gadget
      
      
        If EventGadget()=2
         
            wertw.w = GetGadgetState(0)
            ergebniss.s = Str(wertw.w)
                   
            CloseWindow(0)
            Quit=1
        EndIf
      
      EndIf
         
    Until Quit=1
    Quit=0
         
         
            If OpenWindow(1,216,0,500,300,"Datenänderungsfenster",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar| #PB_Window_ScreenCentered )
              
               If CreateGadgetList(WindowID(1))
                  TextGadget(3, 20, 20, 150, 20, "Datenänderungsfenster")
                  TextGadget(4, 20, 60, 40, 20, "Datum")                       
                  StringGadget(5, 80, 60, 60, 20, "")                           
                  TextGadget(6, 20, 100, 50, 20, "Terminart")
                  StringGadget(7, 80, 100, 100, 20, "")
                  TextGadget(8, 20, 140, 60, 20, "Name")
                  StringGadget(9, 80, 140, 150, 20, "")      
                  ButtonGadget(10, 20, 200, 160, 30, "Geänderte Daten abspeichern")
                  ButtonGadget(11, 200, 200, 100, 30, "Abrechen")
                  TextGadget(12, 150, 60, 380, 20, "Nur die ersten 10 Zeichen werden übernommen")
                  TextGadget(13, 190, 100, 380, 20, "Nur die ersten 15 Zeichen werden übernommen")
                  TextGadget(14, 240, 140, 380, 20, "Nur die ersten 25 Zeichen werden übernommen")
  
               EndIf
            EndIf
          
              If ReadFile(1,"termin.dat") 
                               
        
                  FileSeek(1,wertw.w*52)                                        
                   
                  wert2s.s=ReadString(1) 
                  datums.s=Left(wert2s.s,10) 
                  vornames.s=Mid(wert2s.s,11, 15) 
                  nachnames.s=Mid(wert2s.s,26, 25)
       
                  SetGadgetText(5, datums.s)
                  SetGadgetText(7, vornames.s)
                  SetGadgetText(9, nachnames.s)
         
                 CloseFile(1) 
              EndIf
               
  
       Repeat
        EventID = WaitWindowEvent()
        If EventID = #PB_Event_CloseWindow 
         Quit = 1
          ;CloseWindow(1)
          ;Goto Hauptfenster:
        EndIf
        
       
        If EventGadget()=10 
         
             text1s.s = GetGadgetText(5)                             ;auslesen vom Stringgadget 
             ergebnis1s.s = LSet(text1s.s, 10)                       ;auffüllen/begrenzen des Stringgadget auf 10 Zeichen
             text2s.s = GetGadgetText(7)
             ergebnis2s.s = LSet(text2s.s, 15)
             text3s.s = GetGadgetText(9)
             ergebnis3s.s = LSet(text3s.s, 25)
             textgesamts.s = ergebnis1s.s+ergebnis2s.s+ergebnis3s.s  ;zusammenlegen von den Feldern ( Gesamttext )
      
          If OpenFile(1,"termin.dat")
                            
              FileSeek(1,wertw.w*52)                                 ; setzt den Zeiger an die Adresse           
      
              WriteStringN(1,textgesamts.s)                          ;schreibt den Gesamttext in die Adresse von der Datei
      
              CloseFile(1)                                           ;schließt die Datei
          
          EndIf
        
             Quit=1
        
        EndIf
        
       
        If EventGadget()=11 
           Quit=1
        EndIf
 

      Until Quit=1

 
 CloseWindow(1)

;Goto Hauptfenster:


EndProcedure 


Procedure Terminausgabe()
 ;"Terminausgabe - Ausgabe nach Suchanforderung"
 ;In dem Beispielprogramm geht es um eine Datenbank, wo "Terminarten" ( Geburtstag oder andere Termine )
 ;mit dem Datum und Namen abgespeichert werden. Danach werden die Daten von der Datenbank Satz für Satz
 ;mit dem heutigen Datum verglichen (Monat und Tag) und bei Übereinstimmung in einem ListIconGadget
 ;aufgelistet. Es kann natürlich auch nach anderen "Suchmerkmalen" ausgesondert werden, es soll nur
 ;der Weg beschrieben werden, wie man das Problem angeht.
 
 ;PureBasic 4.0 
 
 If OpenWindow(0, 100, 100, 450, 200, "Termine - für gestern, heute, morgen und übermorgen", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget |#PB_Window_TitleBar| #PB_Window_ScreenCentered)
   
   If CreateGadgetList(WindowID(0))
     ListIconGadget(0, 5, 5, 440, 190, "Datum", 70,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
     AddGadgetColumn(0, 1, "Terminart", 140)
     AddGadgetColumn(0, 2, "Name", 220)
          
     
      If ReadFile(1,"termin.dat") 
          laengel.l= Lof(1) 
          zeilenanzahlw.w=laengel.l/52 
        
          tags.s=FormatDate("%dd",Date()) 
          monats.s=FormatDate("%mm",Date())
          jahrs.s=FormatDate("%yyyy",Date()) 
          
          tagl.l= Val(tags.s)
               
              
          For iw.w=0 To zeilenanzahlw.w
        
          FileSeek(1,iw.w*52)                                        
                   
          wert2s.s=ReadString(1) 
          datums.s=Left(wert2s.s,10) 
          vornames.s=Mid(wert2s.s,11, 15) 
          nachnames.s=Mid(wert2s.s,26, 25)
       
          tagdateis.s=Left(datums.s,2)
          monatdateis.s=Mid(datums.s,4,2)
          
          tagdateil.l= Val(tagdateis.s)

          If monatdateis.s=monats.s
          
                If tagdateil.l+1=tagl.l Or tagdateil.l=tagl.l Or tagdateil.l-1=tagl.l Or tagdateil.l-2=tagl.l
                 
                 AddGadgetItem(0, -1,datums.s+Chr(10)+vornames.s+Chr(10)+nachnames.s)
       
                EndIf
         
          EndIf
          
        
          Next iw.w
        
        CloseFile(1) 
      EndIf
      
      
      Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
   
 EndIf
 
 CloseWindow(0)
 
 ;Goto Hauptfenster:
 
 
 EndProcedure 
 
 
 
 
Procedure Hauptfenster()
 ;Hauptfenster:
 ;
 ;PureBasic 4.0



If OpenWindow(0,216,0,320,250,"Terminprogramm HemSA - 10/2006",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar )
  If CreateGadgetList(WindowID(0))
      TextGadget(1, 70, 20, 200, 30, "Wählen Sie bitte Ihre Anwendung aus")
      ButtonGadget(2, 30, 50, 100, 30, "Termineingabe")
      ButtonGadget(3, 180, 50, 100, 30, "Datenausgabe")
      ButtonGadget(4, 30, 100, 100, 30, "Datenlöschung")
      ButtonGadget(5, 180, 100, 100, 30, "Datenänderung")
      ButtonGadget(6, 30, 150, 100, 30, "Terminausgabe")
      ButtonGadget(7, 30, 200, 250, 30, "Beenden")
      
  
  EndIf

  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow 
      Quit = 1
    EndIf
    
    If EventID = #PB_Event_Gadget
          
        
        Select EventGadget() 
              
              Case 2 
                Termineingabefenster()
              Case 3 
                 Datenausgabe()
              Case 4 
                Datenloeschung()
              Case 5 
                Datenaenderung()
              Case 6 
                 Terminausgabe()
              Case 7 
                Quit = 1 
       
        EndSelect 
   
    EndIf
 
 Until Quit=1
  
EndIf




EndProcedure

Hauptfenster()

End

Verfasst: 06.10.2006 00:19
von Kiffi
Hallo HemSA,

> 1.) [...] Aber wenn ich dann den Programmabschnitt schliesse ( sei es
> durch das Programm selbst, "Abrechen Button" oder "X" ) beendet sich
> das Programm komplett ohne

jep. Das Problem ist folgendes: In Deinem Code verwendest Du für jedes
Fenster, das Du öffnest die Fensternummer 0. Wenn Du also ein Fenster
öffnest, dann verschwindet automatisch das andere. Durch Deine Gotos
bist Du immer wieder auf das OpenWindow des Hauptfensters
zurückgesprungen, was verhindert hat, dass Dein Programm sich
beendete.

Ich habe mal Deinen Code ein wenig umgestellt und möchte Dir
exemplarisch anhand des Hauptfenster und des Termineingabefensters
einen Weg zeigen, wie Du das Problem lösen kannst. Die Umstellung der
anderen Prozeduren überlasse ich Dir ;-)

Auffälligste Änderung: Du hast nur noch eine Eventschleife. Anhand der
vergebenen Konstanten kannst Du prima unterscheiden, welches Event in
welchem Fenster aufgetreten ist und entsprechend darauf reagieren.

Code: Alles auswählen

Enumeration ; Windows
  #Hauptfenster
  #Termineingabefenster
EndEnumeration

Enumeration ; Gadgets
  
  ; Hauptfenster
  #Hauptfenster_lblInfo
  #Hauptfenster_cmdTermineingabe
  #Hauptfenster_cmdDatenausgabe 
  #Hauptfenster_cmdDatenloeschung
  #Hauptfenster_cmdDatenaenderung
  #Hauptfenster_cmdTerminausgabe
  #Hauptfenster_cmdBeenden
  
  ; Termineingabefenster
  #Termineingabefenster_lblInfo
  #Termineingabefenster_lblDatum
  #Termineingabefenster_txtDatum
  #Termineingabefenster_lblTerminart
  #Termineingabefenster_txtTerminart
  #Termineingabefenster_lblName
  #Termineingabefenster_txtName
  #Termineingabefenster_cmdHinzufuegen
  #Termineingabefenster_cmdBeenden
  #Termineingabefenster_lblDatum2
  #Termineingabefenster_lblTerminart2
  #Termineingabefenster_lblName2
  
EndEnumeration

Procedure Open_Hauptfenster()
  If OpenWindow(#Hauptfenster,216,0,320,250,"Terminprogramm HemSA - 10/2006",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Hauptfenster))
      TextGadget  (#Hauptfenster_lblInfo, 70, 20, 200, 30, "Wählen Sie bitte Ihre Anwendung aus")
      ButtonGadget(#Hauptfenster_cmdTermineingabe, 30, 50, 100, 30, "Termineingabe")
      ButtonGadget(#Hauptfenster_cmdDatenausgabe, 180, 50, 100, 30, "Datenausgabe")
      ButtonGadget(#Hauptfenster_cmdDatenloeschung, 30, 100, 100, 30, "Datenlöschung")
      ButtonGadget(#Hauptfenster_cmdDatenaenderung, 180, 100, 100, 30, "Datenänderung")
      ButtonGadget(#Hauptfenster_cmdTerminausgabe, 30, 150, 100, 30, "Terminausgabe")
      ButtonGadget(#Hauptfenster_cmdBeenden, 30, 200, 250, 30, "Beenden")
    EndIf
  EndIf
EndProcedure  

Procedure Open_Termineingabefenster()
  If OpenWindow(#Termineingabefenster,216,0,500,300,"Termineingabefenster",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Termineingabefenster))
      TextGadget  (#Termineingabefenster_lblInfo, 20, 20, 150, 20, "Dateneingabefenster")
      TextGadget  (#Termineingabefenster_lblDatum, 20, 60, 40, 20, "Datum")                       
      StringGadget(#Termineingabefenster_txtDatum, 80, 60, 60, 20, "")                         
      TextGadget  (#Termineingabefenster_lblTerminart, 20, 100, 50, 20, "Terminart")
      StringGadget(#Termineingabefenster_txtTerminart, 80, 100, 100, 20, "")
      TextGadget  (#Termineingabefenster_lblName, 20, 140, 60, 20, "Name")
      StringGadget(#Termineingabefenster_txtName, 80, 140, 150, 20, "")     
      ButtonGadget(#Termineingabefenster_cmdHinzufuegen, 60, 200, 100, 30, "Daten hinzufügen")
      ButtonGadget(#Termineingabefenster_cmdBeenden, 200, 200, 100, 30, "Beenden")
      TextGadget  (#Termineingabefenster_lblDatum2, 150, 60, 380, 20, "Nur die ersten 10 Zeichen werden übernommen")
      TextGadget  (#Termineingabefenster_lblTerminart2, 190, 100, 380, 20, "Nur die ersten 15 Zeichen werden übernommen")
      TextGadget  (#Termineingabefenster_lblName2, 240, 140, 380, 20, "Nur die ersten 25 Zeichen werden übernommen")
    EndIf
  EndIf
EndProcedure


Procedure MainLoop()
  
  Protected Quit.l
  Protected EventID.l
  Protected EventGadget.l
  Protected EventWindow.l
  
  Open_Hauptfenster()
  
  Repeat
    
    EventID     = WaitWindowEvent()
    EventGadget = EventGadget()
    EventWindow = EventWindow()
    
    Select EventID
      
      Case #PB_Event_CloseWindow
        
        Select EventWindow
          
          Case #Hauptfenster         :  Quit = 1
          Case #Termineingabefenster :  CloseWindow(#Termineingabefenster)
            
        EndSelect
        
      Case #PB_Event_Gadget
        
        Select EventWindow
          
          Case #Hauptfenster
            
            Select EventGadget
              
              Case #Hauptfenster_cmdTermineingabe  : Open_Termineingabefenster()
              Case #Hauptfenster_cmdDatenausgabe   : ; Datenausgabe()
              Case #Hauptfenster_cmdDatenloeschung : ; Datenloeschung()
              Case #Hauptfenster_cmdDatenaenderung : ; Datenaenderung()
              Case #Hauptfenster_cmdTerminausgabe  : ; Terminausgabe()
              Case #Hauptfenster_cmdBeenden        : Quit = 1
                
            EndSelect
            
          Case #Termineingabefenster
            
            Select EventGadget
              
              Case #Termineingabefenster_cmdHinzufuegen
                
                text1s.s = GetGadgetText(#Termineingabefenster_txtDatum) ;auslesen vom Stringgadget
                ergebnis1s.s = LSet(text1s.s, 10)                        ;auffüllen/begrenzen des Stringgadget auf 10 Zeichen
                text2s.s = GetGadgetText(#Termineingabefenster_txtTerminart)
                ergebnis2s.s = LSet(text2s.s, 15)
                text3s.s = GetGadgetText(#Termineingabefenster_txtName)
                ergebnis3s.s = LSet(text3s.s, 25)
                
                textgesamts.s = ergebnis1s.s+ergebnis2s.s+ergebnis3s.s  ;zusammenlegen von den Feldern ( Gesamttext )
                
                If OpenFile(1,"termin.dat")
                  laengel.l= Lof(1)                                      ; ermitteln der Dateilaenge             
                  FileSeek(1,laengel.l)                                  ; setzt den Zeiger ans Dateiende           
                  WriteStringN(1,textgesamts.s)                          ;schreibt den Gesamttext an das Ende von der Datei
                  CloseFile(1)                                           ;schließt die Datei
                EndIf
                
                SetGadgetText(#Termineingabefenster_txtDatum, "")    ; Eingabefelder werden gelöscht nachdem der
                SetGadgetText(#Termineingabefenster_txtTerminart, "") ; "Daten hinzufügen" BUTTON gedrückt wurde
                SetGadgetText(#Termineingabefenster_txtName, "")
                
              Case #Termineingabefenster_cmdBeenden
                
                CloseWindow(#Termineingabefenster)
                
            EndSelect
            
        EndSelect
        
    EndSelect
    
  Until Quit=1
  
EndProcedure

MainLoop()

End 
zugegeben: die Konstantennamen sind ein wenig lang geraten, aber mit
dem Autocomplete der IDE (oder jaPBe) hat man ja weniger Tipparbeit ;-)

Dann ist da noch das Problem mit den modalen und nichtmodalen
Fenstern, welches wir beim nächsten Mal lösen können. Jetzt isses zu spät
dafür ;-)

Grüße ... Kiffi

Verfasst: 07.10.2006 03:06
von HemSA
Hallo Kiffi,
erst mal vielen Dank für die Hilfe. Ich habe nach deinem Muster mal den ganzen Code umgeschrieben ( ich glaube die Dateinamen machen die Hälfte vom Code aus :) ).
Jetzt sind da andere Probleme aufgetaucht.

1.) Manche Fenster haben gar kein Event ( Datenausgabe und Terminausgabe ) - da muss ich erst in das Fenster mit der Maus klicken, damit die Ausgabe angezeigt wird, und die Daten werden immer angehängt wenn man mit der Maus im Fenster klickt.

2.) Auch klappt es mit dem Löschen und Ändern von den Daten nicht (das liegt vielleicht daran, das keine fest definierte Zeile von dem ausgewähltem Datensatz zurückgegeben wird. Oder ich habe einen Fehler beim "Umsetzen" vom Code von "goto" in deine Version gemacht.

3.) Bei den "Datenaenderungbestaetigung" und "Datenloeschungbestaetigung" Fenstern werden die Werte, die man in den "Datenaenderungauswahl" und "Datenloeschungauswahl" Fenstern zuvor ausgewählt hat auch nicht angezeigt. Habe da wohl auch einen Fehler gemacht.

4.) Vom Ablauf sollte das Hauptfenster verschwinden, sobald man eine Auswahl getroffen hat, und erst wieder auftauchen, wenn das ausgewählte Fenster geschlossen wird. Aber das wäre erst mal das kleinere Übel, das wo ich später vielleicht auch noch hinbekommen werde. Wichtig ist erst mal das es überhaut läuft.

Kiffi, vielen Dank schon mal für die Mühe für das Ansehen von dem Code, und hier ist der Code:

Code: Alles auswählen

Enumeration ; Windows 
  #Hauptfenster 
  #Termineingabefenster
  #Datenausgabe
  #Datenloeschungauswahl
  #Datenloeschungbestaetigung
  #Datenaenderungauswahl
  #Datenaenderungbestaetigung
  #Terminausgabe
EndEnumeration 

Enumeration ; Gadgets 
  
  ; Hauptfenster 
  #Hauptfenster_lblInfo 
  #Hauptfenster_cmdTermineingabe 
  #Hauptfenster_cmdDatenausgabe 
  #Hauptfenster_cmdDatenloeschung 
  #Hauptfenster_cmdDatenaenderung 
  #Hauptfenster_cmdTerminausgabe 
  #Hauptfenster_cmdBeenden 
  
  ; Termineingabefenster 
  #Termineingabefenster_lblInfo 
  #Termineingabefenster_lblDatum 
  #Termineingabefenster_txtDatum 
  #Termineingabefenster_lblTerminart 
  #Termineingabefenster_txtTerminart 
  #Termineingabefenster_lblName 
  #Termineingabefenster_txtName 
  #Termineingabefenster_cmdHinzufuegen 
  #Termineingabefenster_cmdBeenden 
  #Termineingabefenster_lblDatum2 
  #Termineingabefenster_lblTerminart2 
  #Termineingabefenster_lblName2 
  
  ;Datenausgabe
  #Datenausgabe_lig
  
  ;Datenloeschungauswahl
  #Datenloeschungauswahl_lig
  #Datenloeschungauswahl_lblDatensatz_markieren
  #Datenloeschungauswahl_cmdWeiter
  
  ;Datenloeschungbestaetigung
  #Datenloeschungbestaetigung_lblDatenloeschungsfenster
  #Datenloeschungbestaetigung_lblDatum
  #Datenloeschungbestaetigung_txtDatum
  #Datenloeschungbestaetigung_lblTerminart
  #Datenloeschungbestaetigung_txtTerminart
  #Datenloeschungbestaetigung_lblName
  #Datenloeschungbestaetigung_txtName
  #Datenloeschungbestaetigung_cmdDaten_loeschen
  #Datenloeschungbestaetigung_cmdAbbrechen
  
  ;Datenaenderungauswahl
  #Datenaenderungauswahl_lig
  #Datenaenderungauswahl_lblDatensatz_markieren
  #Datenaenderungauswahl_cmdWeiter
  
  ;Datenaenderungbestaetigung
  #Datenaenderungbestaetigung_lblDatenaenderungsfenster
  #Datenaenderungbestaetigung_lblDatum
  #Datenaenderungbestaetigung_txtDatum
  #Datenaenderungbestaetigung_lblTerminart
  #Datenaenderungbestaetigung_txtTerminart
  #Datenaenderungbestaetigung_lblName
  #Datenaenderungbestaetigung_txtName
  #Datenaenderungbestaetigung_cmdDaten_abspeichern
  #Datenaenderungbestaetigung_cmdAbrechen
  #Datenaenderungbestaetigung_lbl10_Zeichen
  #Datenaenderungbestaetigung_lbl15_Zeichen
  #Datenaenderungbestaetigung_lbl25_Zeichen
  
  ;Terminausgabe
  #Terminausgabe_lig
  
EndEnumeration 




Procedure Open_Hauptfenster() 
  If OpenWindow(#Hauptfenster,216,0,320,250,"Terminprogramm HemSA - 10/2006",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar ) 
    If CreateGadgetList(WindowID(#Hauptfenster)) 
      TextGadget  (#Hauptfenster_lblInfo, 70, 20, 200, 30, "Wählen Sie bitte Ihre Anwendung aus") 
      ButtonGadget(#Hauptfenster_cmdTermineingabe, 30, 50, 100, 30, "Termineingabe") 
      ButtonGadget(#Hauptfenster_cmdDatenausgabe, 180, 50, 100, 30, "Datenausgabe") 
      ButtonGadget(#Hauptfenster_cmdDatenloeschung, 30, 100, 100, 30, "Datenlöschung") 
      ButtonGadget(#Hauptfenster_cmdDatenaenderung, 180, 100, 100, 30, "Datenänderung") 
      ButtonGadget(#Hauptfenster_cmdTerminausgabe, 30, 150, 100, 30, "Terminausgabe") 
      ButtonGadget(#Hauptfenster_cmdBeenden, 30, 200, 250, 30, "Beenden") 
    EndIf 
  EndIf 
EndProcedure  

Procedure Open_Termineingabefenster() 
  If OpenWindow(#Termineingabefenster,216,0,500,300,"Termineingabefenster",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar ) 
    If CreateGadgetList(WindowID(#Termineingabefenster)) 
      TextGadget  (#Termineingabefenster_lblInfo, 20, 20, 150, 20, "Dateneingabefenster") 
      TextGadget  (#Termineingabefenster_lblDatum, 20, 60, 40, 20, "Datum")                        
      StringGadget(#Termineingabefenster_txtDatum, 80, 60, 60, 20, "")                          
      TextGadget  (#Termineingabefenster_lblTerminart, 20, 100, 50, 20, "Terminart") 
      StringGadget(#Termineingabefenster_txtTerminart, 80, 100, 100, 20, "") 
      TextGadget  (#Termineingabefenster_lblName, 20, 140, 60, 20, "Name") 
      StringGadget(#Termineingabefenster_txtName, 80, 140, 150, 20, "")      
      ButtonGadget(#Termineingabefenster_cmdHinzufuegen, 60, 200, 100, 30, "Daten hinzufügen") 
      ButtonGadget(#Termineingabefenster_cmdBeenden, 200, 200, 100, 30, "Beenden") 
      TextGadget  (#Termineingabefenster_lblDatum2, 150, 60, 380, 20, "Nur die ersten 10 Zeichen werden übernommen") 
      TextGadget  (#Termineingabefenster_lblTerminart2, 190, 100, 380, 20, "Nur die ersten 15 Zeichen werden übernommen") 
      TextGadget  (#Termineingabefenster_lblName2, 240, 140, 380, 20, "Nur die ersten 25 Zeichen werden übernommen") 
    EndIf 
  EndIf 
EndProcedure 

Procedure Open_Datenausgabe()
  If OpenWindow(#Datenausgabe, 100, 100, 355, 200, "Datenausgabe", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar| #PB_Window_ScreenCentered)
    If CreateGadgetList(WindowID(#Datenausgabe))
     ListIconGadget(#Datenausgabe_lig, 5, 5, 345, 190, "Datum", 80,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
     AddGadgetColumn(#Datenausgabe_lig, 1, "Terminart", 90)
     AddGadgetColumn(#Datenausgabe_lig, 2, "Name", 150)
    EndIf
  EndIf
EndProcedure 
 
Procedure Open_Datenloeschungauswahl()
  If OpenWindow(#Datenloeschungauswahl, 100, 100, 355, 275, "Datenlöschung", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar| #PB_Window_ScreenCentered)
    If CreateGadgetList(WindowID(#Datenloeschungauswahl))
      ListIconGadget(#Datenloeschungauswahl_lig, 5, 35, 345, 200, "Datum", 80,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
      AddGadgetColumn(#Datenloeschungauswahl_lig, 1, "Terminart", 90)
      AddGadgetColumn(#Datenloeschungauswahl_lig, 2, "Name", 150)
      TextGadget(#Datenloeschungauswahl_lblDatensatz_markieren, 5,  10, 250, 20, "Bitte den Datensatz markieren")
      ButtonGadget(#Datenloeschungauswahl_cmdWeiter, 5, 245, 70, 20, "Weiter")
    EndIf
  EndIf  
EndProcedure 
 
Procedure Open_Datenloeschungbestaetigung()  
  If OpenWindow(#Datenloeschungbestaetigung,216,0,380,250,"Datenlöschungsfenster",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar| #PB_Window_ScreenCentered )
    If CreateGadgetList(WindowID(#Datenloeschungbestaetigung))
      TextGadget(#Datenloeschungbestaetigung_lblDatenloeschungsfenster, 20, 20, 150, 20, "Datenlöschungsfenster")
      TextGadget(#Datenloeschungbestaetigung_lblDatum, 20, 60, 40, 20, "Datum")                       
      StringGadget(#Datenloeschungbestaetigung_txtDatum, 80, 60, 60, 20, "")                           
      TextGadget(#Datenloeschungbestaetigung_lblTerminart, 20, 100, 50, 20, "Terminart")
      StringGadget(#Datenloeschungbestaetigung_txtTerminart, 80, 100, 100, 20, "")
      TextGadget(#Datenloeschungbestaetigung_lblName, 20, 140, 60, 20, "Name")
      StringGadget(#Datenloeschungbestaetigung_txtName, 80, 140, 150, 20, "")      
      ButtonGadget(#Datenloeschungbestaetigung_cmdDaten_loeschen, 20, 180, 230, 30, "Daten löschen ( sind sie sich wirklich sicher?)")
      ButtonGadget(#Datenloeschungbestaetigung_cmdAbbrechen, 270, 180, 100, 30, "Abbrechen")
    EndIf
  EndIf
EndProcedure 
 
Procedure Open_Datenaenderungauswahl()
  If OpenWindow(#Datenaenderungauswahl, 100, 100, 355, 275, "Datenänderung", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar| #PB_Window_ScreenCentered)
    If CreateGadgetList(WindowID(#Datenaenderungauswahl))
      ListIconGadget(#Datenaenderungauswahl_lig, 5, 35, 345, 200, "Datum", 80,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
      AddGadgetColumn(#Datenaenderungauswahl_lig, 1, "Terminart", 90)
      AddGadgetColumn(#Datenaenderungauswahl_lig, 2, "Name", 150)
      TextGadget(#Datenaenderungauswahl_lblDatensatz_markieren, 5,  10, 250, 20, "Bitte den Datensatz markieren")
      ButtonGadget(#Datenaenderungauswahl_cmdWeiter, 5, 245, 70, 20, "Weiter")
    EndIf
  EndIf
EndProcedure

Procedure Open_Datenaenderungbestaetigung()  
  If OpenWindow(#Datenaenderungbestaetigung,216,0,500,300,"Datenänderungsfenster",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar| #PB_Window_ScreenCentered )
    If CreateGadgetList(WindowID(#Datenaenderungbestaetigung))
      TextGadget(#Datenaenderungbestaetigung_lblDatenaenderungsfenster, 20, 20, 150, 20, "Datenänderungsfenster")
      TextGadget(#Datenaenderungbestaetigung_lblDatum, 20, 60, 40, 20, "Datum")                       
      StringGadget(#Datenaenderungbestaetigung_txtDatum, 80, 60, 60, 20, "")                           
      TextGadget(#Datenaenderungbestaetigung_lblTerminart, 20, 100, 50, 20, "Terminart")
      StringGadget(#Datenaenderungbestaetigung_txtTerminart, 80, 100, 100, 20, "")
      TextGadget(#Datenaenderungbestaetigung_lblName, 20, 140, 60, 20, "Name")
      StringGadget(#Datenaenderungbestaetigung_txtName, 80, 140, 150, 20, "")      
      ButtonGadget(#Datenaenderungbestaetigung_cmdDaten_abspeichern, 20, 200, 160, 30, "Geänderte Daten abspeichern")
      ButtonGadget(#Datenaenderungbestaetigung_cmdAbrechen, 200, 200, 100, 30, "Abrechen")
      TextGadget(#Datenaenderungbestaetigung_lbl10_Zeichen, 150, 60, 380, 20, "Nur die ersten 10 Zeichen werden übernommen")
      TextGadget(#Datenaenderungbestaetigung_lbl15_Zeichen, 190, 100, 380, 20, "Nur die ersten 15 Zeichen werden übernommen")
      TextGadget(#Datenaenderungbestaetigung_lbl25_Zeichen, 240, 140, 380, 20, "Nur die ersten 25 Zeichen werden übernommen")
    EndIf
  EndIf
EndProcedure 

Procedure Open_Terminausgabe()
  If OpenWindow(#Terminausgabe, 100, 100, 450, 200, "Termine - für gestern, heute, morgen und übermorgen", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget |#PB_Window_TitleBar| #PB_Window_ScreenCentered)
    If CreateGadgetList(WindowID(#Terminausgabe))
      ListIconGadget(#Terminausgabe_lig, 5, 5, 440, 190, "Datum", 70,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
      AddGadgetColumn(#Terminausgabe_lig, 1, "Terminart", 140)
      AddGadgetColumn(#Terminausgabe_lig, 2, "Name", 220)
    EndIf
  EndIf      
EndProcedure 
 



Procedure MainLoop() 
  
  Protected Quit.l 
  Protected EventID.l 
  Protected EventGadget.l 
  Protected EventWindow.l 
  
  Open_Hauptfenster() 
  
  Repeat 
    
    EventID     = WaitWindowEvent() 
    EventGadget = EventGadget() 
    EventWindow = EventWindow() 
    
    Select EventID 
      
      Case #PB_Event_CloseWindow 
        
        Select EventWindow 
          
          Case #Hauptfenster                :  Quit = 1 
          Case #Termineingabefenster        :  CloseWindow(#Termineingabefenster) 
          Case #Datenausgabe                :  CloseWindow(#Datenausgabe)
          Case #Datenloeschungauswahl       :  CloseWindow(#Datenloeschungauswahl)
          Case #Datenloeschungbestaetigung  :  CloseWindow(#Datenloeschungbestaetigung)
          Case #Datenaenderungauswahl       :  CloseWindow(#Datenaenderungauswahl)
          Case #Datenaenderungbestaetigung  :  CloseWindow(#Datenaenderungbestaetigung)
          Case #Terminausgabe               :  CloseWindow(#Terminausgabe)
     
        EndSelect 
        
      
      
      Case #PB_Event_Gadget 
        
        Select EventWindow 
          
          Case #Hauptfenster 
            
            Select EventGadget 
              
              Case #Hauptfenster_cmdTermineingabe  : Open_Termineingabefenster() 
              Case #Hauptfenster_cmdDatenausgabe   : Open_Datenausgabe() 
              Case #Hauptfenster_cmdDatenloeschung : Open_Datenloeschungauswahl() 
              Case #Hauptfenster_cmdDatenaenderung : Open_Datenaenderungauswahl() 
              Case #Hauptfenster_cmdTerminausgabe  : Open_Terminausgabe() 
              Case #Hauptfenster_cmdBeenden        : Quit = 1 
                
            EndSelect 
            
          Case #Termineingabefenster 
            
            Select EventGadget 
              
              Case #Termineingabefenster_cmdHinzufuegen 
                
                text1s.s = GetGadgetText(#Termineingabefenster_txtDatum)  
                ergebnis1s.s = LSet(text1s.s, 10)                         
                text2s.s = GetGadgetText(#Termineingabefenster_txtTerminart) 
                ergebnis2s.s = LSet(text2s.s, 15) 
                text3s.s = GetGadgetText(#Termineingabefenster_txtName) 
                ergebnis3s.s = LSet(text3s.s, 25) 
                
                textgesamts.s = ergebnis1s.s+ergebnis2s.s+ergebnis3s.s   
                
                If OpenFile(1,"termin.dat") 
                  laengel.l= Lof(1)                                                   
                  FileSeek(1,laengel.l)                                             
                  WriteStringN(1,textgesamts.s)                          
                  CloseFile(1)                                           
                EndIf 
                
                SetGadgetText(#Termineingabefenster_txtDatum, "")     
                SetGadgetText(#Termineingabefenster_txtTerminart, "") 
                SetGadgetText(#Termineingabefenster_txtName, "") 
                
              Case #Termineingabefenster_cmdBeenden 
                
                CloseWindow(#Termineingabefenster) 
                
            EndSelect 
            
            
          Case #Datenausgabe
                          
                If ReadFile(1,"termin.dat") 
                   laengel.l= Lof(1) 
                   zeilenanzahlw.w=laengel.l/52 
              
              
                      For iw.w=0 To zeilenanzahlw.w
        
                      FileSeek(1,iw.w*52)                                        
                   
                      wert2s.s=ReadString(1) 
                      datums.s=Left(wert2s.s,10) 
                      terminarts.s=Mid(wert2s.s,11, 15) 
                      names.s=Mid(wert2s.s,26, 25)
         
                      AddGadgetItem(#Datenausgabe_lig, -1,datums.s+Chr(10)+terminarts.s+Chr(10)+names.s)
       
                      Next iw.w
        
                   CloseFile(1) 
      
                EndIf
      
            
          Case #Datenloeschungauswahl 
            
                If ReadFile(1,"termin.dat") 
                    laengel.l= Lof(1) 
                    zeilenanzahlw.w=laengel.l/52 
                            
                      For iw.w=0 To zeilenanzahlw.w
        
                      FileSeek(1,iw.w*52)                                        
                   
                      wert2s.s=ReadString(1) 
                      datums.s=Left(wert2s.s,10) 
                      terminarts.s=Mid(wert2s.s,11, 15) 
                      names.s=Mid(wert2s.s,26, 25)
               
                      AddGadgetItem(#Datenloeschungauswahl_lig, -1,datums.s+Chr(10)+terminarts.s+Chr(10)+names.s)
               
                      Next iw.w
        
                   CloseFile(1) 
                EndIf  
            
            
            Select EventGadget
            
              Case #Datenloeschungauswahl_cmdWeiter
                  
                   wertw.w = GetGadgetState(#Datenloeschungauswahl_lig)
                   ergebniss.s = Str(wertw.w)

                   CloseWindow(#Datenloeschungauswahl)
                   Open_Datenloeschungbestaetigung()
            EndSelect
            
          
          Case #Datenloeschungbestaetigung 
            
                If ReadFile(1,"termin.dat") 
                               
        
                  FileSeek(1,wertw.w*52)                                        
                   
                  wert2s.s=ReadString(1) 
                  datums.s=Left(wert2s.s,10) 
                  terminarts.s=Mid(wert2s.s,11, 15) 
                  names.s=Mid(wert2s.s,26, 25)
       
                  SetGadgetText(#Datenloeschungbestaetigung_txtDatum, datums.s)
                  SetGadgetText(#Datenloeschungbestaetigung_txtTerminart, terminarts.s)
                  SetGadgetText(#Datenloeschungbestaetigung_txtName, names.s)
         
                 CloseFile(1) 
              
                EndIf
            
            
            Select EventGadget 
            
              Case #Datenloeschungbestaetigung_cmdDaten_loeschen
                   
                    loeschs.s = LSet("-", 50,"-")                       
             
                    If OpenFile(1,"termin.dat")
                       FileSeek(1,wertw.w*52)                                            
                       WriteStringN(1,loeschs.s)                          
                       CloseFile(1)                                       
                    EndIf
        
           
                    If OpenFile(2,"terminkopie.dat")
                            
                    EndIf
          
          
                    If ReadFile(1,"termin.dat") 
                        laengefile1l.l= Lof(1) 
                        zeilenanzahlfile1w.w=laengefile1l.l/52 
        
              
              
                        For iw.w=0 To zeilenanzahlfile1w.w-1      ;wegen Löschzeile = 1 Zeile weniger
                         FileSeek(1,iw.w*52)                                        
                         textgesamtfile1s.s=ReadString(1) 
          
                            If textgesamtfile1s.s<>loeschs.s
                               laengefile2l.l= Lof(2)                                                    
                               FileSeek(1,laengefile2l.l)                                            
                               WriteStringN(2,textgesamtfile1s.s)                  
                            EndIf
                        Next iw.w
        
                        CloseFile(1) 
                        CloseFile(2)  
          
                  EndIf     
            
            
                  DeleteFile("termin.dat")
                  RenameFile("terminkopie.dat", "termin.dat")  
                  DeleteFile("terminkopie.dat")  
            
                  CloseWindow(#Datenloeschungbestaetigung)
                  
                  
        
              Case #Datenloeschungbestaetigung_cmdAbbrechen
            
                    CloseWindow(#Datenloeschungbestaetigung)
            
            EndSelect 
            
            
          Case #Datenaenderungauswahl 
            
                If ReadFile(1,"termin.dat") 
                    laengel.l= Lof(1) 
                    zeilenanzahlw.w=laengel.l/52 
                            
                      For iw.w=0 To zeilenanzahlw.w
        
                      FileSeek(1,iw.w*52)                                        
                   
                      wert2s.s=ReadString(1) 
                      datums.s=Left(wert2s.s,10) 
                      terminarts.s=Mid(wert2s.s,11, 15) 
                      names.s=Mid(wert2s.s,26, 25)
               
                      AddGadgetItem(#Datenaenderungauswahl_lig, -1,datums.s+Chr(10)+terminarts.s+Chr(10)+names.s)
               
                      Next iw.w
        
                   CloseFile(1) 
                EndIf  
            
            
            Select EventGadget
            
              Case #Datenaenderungauswahl_cmdWeiter
                  
                   wertw.w = GetGadgetState(#Datenaenderungauswahl_lig)
                   ergebniss.s = Str(wertw.w)

                   CloseWindow(#Datenaenderungauswahl)
                   Open_Datenaenderungbestaetigung()
            EndSelect
     
           
          Case #Datenaenderungbestaetigung 
            
                If ReadFile(1,"termin.dat") 
                               
        
                  FileSeek(1,wertw.w*52)                                        
                   
                  wert2s.s=ReadString(1) 
                  datums.s=Left(wert2s.s,10) 
                  terminarts.s=Mid(wert2s.s,11, 15) 
                  names.s=Mid(wert2s.s,26, 25)
       
                  SetGadgetText(#Datenaenderungbestaetigung_txtDatum, datums.s)
                  SetGadgetText(#Datenaenderungbestaetigung_txtTerminart, terminarts.s)
                  SetGadgetText(#Datenaenderungbestaetigung_txtName, names.s)
         
                 CloseFile(1) 
              
                EndIf
            
            
            Select EventGadget  
           
              Case #Datenaenderungbestaetigung_cmdDaten_abspeichern
                    
                    text1s.s = GetGadgetText(#Datenaenderungbestaetigung_txtDatum)                            
                    ergebnis1s.s = LSet(text1s.s, 10)                       
                    text2s.s = GetGadgetText(#Datenaenderungbestaetigung_txtTerminart)
                    ergebnis2s.s = LSet(text2s.s, 15)
                    text3s.s = GetGadgetText(#Datenaenderungbestaetigung_txtName)
                    ergebnis3s.s = LSet(text3s.s, 25)
                    textgesamts.s = ergebnis1s.s+ergebnis2s.s+ergebnis3s.s  
      
                   If OpenFile(1,"termin.dat")
                      FileSeek(1,wertw.w*52)                               
                      WriteStringN(1,textgesamts.s)                          
                      CloseFile(1)                                          
                   EndIf
        
              Case #Datenaenderungbestaetigung_cmdAbrechen
            
                    CloseWindow(#Datenaenderungbestaetigung)
            
            
            EndSelect
           
           
          Case #Terminausgabe
           
                If ReadFile(1,"termin.dat") 
                laengel.l= Lof(1) 
                zeilenanzahlw.w=laengel.l/52 
        
                tags.s=FormatDate("%dd",Date()) 
                monats.s=FormatDate("%mm",Date())
                jahrs.s=FormatDate("%yyyy",Date()) 
          
                tagl.l= Val(tags.s)
               
              
                  For iw.w=0 To zeilenanzahlw.w
        
                  FileSeek(1,iw.w*52)                                        
                   
                  wert2s.s=ReadString(1) 
                  datums.s=Left(wert2s.s,10) 
                  terminarts.s=Mid(wert2s.s,11, 15) 
                  names.s=Mid(wert2s.s,26, 25)
       
                  tagdateis.s=Left(datums.s,2)
                  monatdateis.s=Mid(datums.s,4,2)
                  tagdateil.l= Val(tagdateis.s)

                    If monatdateis.s=monats.s
          
                        If tagdateil.l+1=tagl.l Or tagdateil.l=tagl.l Or tagdateil.l-1=tagl.l Or tagdateil.l-2=tagl.l
                 
                        AddGadgetItem(#Terminausgabe_lig, -1,datums.s+Chr(10)+terminarts.s+Chr(10)+names.s)
       
                        EndIf
         
                    EndIf
            
        
                  Next iw.w
        
                CloseFile(1) 
                EndIf
      
            
            
        EndSelect 
        
    EndSelect 
    
  Until Quit=1 
  
EndProcedure 

MainLoop() 

End