Seite 1 von 3

Telefonbuch funktioniert nicht einwandfrei

Verfasst: 07.05.2007 15:32
von 10tacle
Hallo ihr fleißigen Programmierer;-)

Ich habe mir ein Telefonbuch zusammengebastelt, doch leider funktionieren einige Dinge nicht richtig. Der Source-Code ist in PureBasic v4.02 (Windows - x86).

Das gibt es zu korrigieren:

Das Eintragen der Werte funktioniert einwandfrei. Jedoch beim Abspeichern der Datei, speichert er nicht die Werte aus der Spalte „Vorname“ und „Telefonnummer“.

Weiterhin öffnet das Programm eine gespeicherte Datei nicht richtig.

Des weiteren sollte es beim Beenden des Programms und beim Erstellen einer neuen Datei fragen, ob die Datei gespeichert werden soll...(z.B. nach einer Änderung).

Wie könnte ich das mit dem Drucken realisieren?

Hier der Programmcode:

Code: Alles auswählen



;-- Konstanten

#ABOUT = "Telefonbuch Version 1.0" +#LF$+#LF$ + "Author: Kay" + #LF$ + "Compiler: Purebasic v4.02" 


Enumeration 
  #Menu 
EndEnumeration 

Enumeration 
  #ToolBar 
EndEnumeration 

Enumeration 
  #StatusBar
EndEnumeration

Enumeration 
  ;-----> Menu Datei
  #Menu_Neu 
  #Menu_Oeffnen 
  #Menu_Speichern
  #Menu_Speichern_unter 
  #Menu_Drucken
  #Menu_Beenden 
  ;-----> Menu Hilfe 
  #Menu_Ueber 
EndEnumeration 

;-- Globale Variablen

Global Exit.l
Global Datei.s
Global Titel.s
Global FileName.s
Global Speichern.l
Global Neu.l

;--- Funktionen##################################################### 


;#################################################################


Procedure Datei_Speichern_unter() 

;{ Procedure für Datei speichern als 


  Protected eintrag.s
   
  ; Dateiname erfragen 
  eintrag = SaveFileRequester("Datei Speichern als", "", "Telefonbuch (*.tel)|*.tel|Alle Dateien|*.*", 0) 
  If eintrag = "" 
    ProcedureReturn 0 
  EndIf 

  ; Datei prüfen 
  If FileSize(eintrag) >= 0 
    r1 = MessageRequester("Frage", "Datei " + Datei + " überschreiben?", #PB_MessageRequester_YesNo | #MB_ICONQUESTION) 
    If r1 = #PB_MessageRequester_No 
      ProcedureReturn 0 
    EndIf 
  EndIf 
  ; Datei speichern 
  
  ;If Save.b = 1 
  If CreateFile(0,eintrag.s+".tel") 
   Repeat 
    eintrag.s = GetGadgetItemText(7,eintragnr.l,0) 
    If eintrag.s <> "" 
     WriteStringN(0,eintrag.s) 
    EndIf 
    eintragnr.l = eintragnr.l + 1 
   Until eintrag.s =""
   CloseFile(0)
   ; Variablen aktualisieren
    Speichern = 0 
    Neu = 0 
    ; Titel und Status aktualisieren 
    Titel = "Telefonbuch - " + Datei 
    SetWindowTitle(1, Titel) 
    StatusBarText(#StatusBar, 0, "Datei wurde gespeichert")
  Else 
    MessageRequester("Fehler", "Datei konnte nicht gespeichert werden", #MB_ICONSTOP)
  ;CloseFile(0) 
  EndIf 
 ;EndIf

EndProcedure 



;#################################################################

Procedure Datei_Speichern() 

;{ Procedure für Speichern 
; 
;} 
  
  Protected eintrag.s
   ; Bei neuer Datei Speichern als aufrufen 
  If Neu 
    Datei_Speichern_unter() 
    ProcedureReturn 0 
  EndIf 
  
  

  
  ; Datei speichern 
  If CreateFile(0, Datei) 
   Repeat 
    eintrag.s = GetGadgetItemText(7,eintragnr.l,0) 
    If eintrag.s <> "" 
     WriteStringN(0,eintrag.s)
    EndIf 
    eintragnr.l = eintragnr.l + 1 
   Until eintrag.s =""
   CloseFile(0)
    ;Variablen aktualisieren 
    Speichern = 0 
    Neu = 0 
    ; Titel und Status aktuallisieren 
    Titel = "Telefonbuch - " + Datei 
    SetWindowTitle(1, Titel) 
    StatusBarText(#StatusBar, 0, "Datei wurde gespeichert")
  Else 
    MessageRequester("Fehler", "Datei konnte nicht gespeichert werden", #MB_ICONSTOP) 
  EndIf 
    
EndProcedure 


;#################################################################

Procedure Datei_Oeffnen() 

;{ Procedure für Datei öffnen 
; 
;} 

  Protected temp.s 

  
  ; Bei änderung Speichern aufrufen 
  If Speichern 
    r1 = MessageRequester("Frage", "Änderung speichern?", #PB_MessageRequester_YesNoCancel | #MB_ICONQUESTION) 
    If r1 = #PB_MessageRequester_Yes 
      Datei_Speichern() 
    EndIf 
  EndIf 
  If r1 = #PB_MessageRequester_Cancel 
    ProcedureReturn 0 
  EndIf 
  ; Dateiname erfragen 
  temp = OpenFileRequester("Datei öffnen", Datei, "Telefonbuch (*.tel)|*.tel|Alle Dateien (*.*)|*.*", 0) 
  If temp = "" 
    ProcedureReturn 0 
  EndIf 
  ; Datei öffnen
   ClearGadgetItemList(7)
  Datei = temp 
  If OpenFile(0, Datei) 
    
    temp = "" 
    ; Datei lesen bis zum Ende 
    len = Lof(0) 
    temp = Space(len)
     
    ReadData(0, @temp, len) 
   
    ; Datei schliessen 
    CloseFile(0) 
    ; Text in Editorfeld eintragen 
    
     AddGadgetItem(7,-1,temp)
    
    ;SetGadgetItemText(7,-1, temp,1) 
    temp = "" 
    
    ; Variablen aktualisieren 
    Speichern = 0 
    Neu = 0 
    ; Titel und Status aktuallisieren 
    Titel = "Telefonbuch - " + Datei 
    SetWindowTitle(1, Titel) 
    StatusBarText(#StatusBar, 0, "Datei wurde geöffnet") 

  Else 
    MessageRequester("Fehler", "Datei konnte nicht geöffnet werden", #MB_ICONSTOP) 
  EndIf 
  
EndProcedure

;##########################################################################

Procedure Datei_Oeffnen_sofort(temp.s) 

;{ Procedure für Datei öffnen bei Parameterübergabe 
; 
;} 


  Datei = temp 
  If OpenFile(0, Datei) 
    temp = "" 
    ; Datei lesen bis zum ende 
    len = Lof(0) 
    temp = Space(len) 
    ReadData(0, @temp, len) 
    ; Datei schliessen 
    CloseFile(0) 
    ; Text in Editorfeld eintragen 
    AddGadgetItem(7,-1,temp) 
    temp = "" 
    ; Variablen aktuallisieren 
    Speichern = 0 
    Neu = 0 
    ; Titel und Status aktuallisieren 
    Titel = "Telefonbuch - " + Datei 
    SetWindowTitle(1, Titel) 
    StatusBarText(#StatusBar, 0, "Geöffnet") 

  Else 
    MessageRequester("Fehler", "Datei konnte nicht geöffnet werden", #MB_ICONSTOP) 
  EndIf 
  
EndProcedure 

;###################################################################################

Procedure Datei_Neu() 

;{ Procedure für Neu 
; 
;} 

  ; Bei Änderung Speichern aufrufen 
  If Speichern 
    r1 = MessageRequester("Frage", "Änderung speichern?", #PB_MessageRequester_YesNoCancel | #MB_ICONQUESTION) 
    If r1 = #PB_MessageRequester_Yes 
      Datei_Speichern() 
    EndIf 
  EndIf 
  If r1 = #PB_MessageRequester_Cancel 
    ProcedureReturn 0 
  EndIf 
  ; Editorfeld löschen 
  ClearGadgetItemList(7) 
  ; Variablen aktuallisieren 
  Speichern = 0 
  Neu = 1 
  Datei = "neu.tel" 
  ; Titel und Status aktuallisieren 
  Titel = "Telefonbuch - " + Datei 
  SetWindowTitle(1, Titel) 
  StatusBarText(#StatusBar, 0, "Neu") 
EndProcedure

;############################################################################


Procedure Datei_Drucken() 

 
EndProcedure 

;######################################################################


Procedure ProgrammEnde() 

;{ Procedure bei Programm Ende 
; 
;} 
  
  ; Bei änderung Speichern aufrufen 
  If Speichern 
    r1 = MessageRequester("Frage", "Änderung speichern?", #PB_MessageRequester_YesNoCancel | #MB_ICONQUESTION) 
    If r1 = #PB_MessageRequester_Yes 
      Datei_Speichern() 
    EndIf 
  EndIf 
  If r1 <> #PB_MessageRequester_Cancel 
    Exit = 1 
  EndIf 
    
EndProcedure

;---Hauptprogramm##################################################### 




Datei = "unbekannt.tel" 
Titel = "Telefonbuch - " + Datei 

If OpenWindow(1,400,50,350,650,Titel, #PB_Window_SystemMenu|#PB_Window_MinimizeGadget) 
  
;--- Menü 
  
   If CreateMenu(1, WindowID(1)) 
    MenuTitle("&Datei")
      MenuItem(#Menu_Neu, "&Neu" + #TAB$+ "Strg+N")  
      MenuItem(#Menu_Oeffnen, "&Öffnen" + #TAB$+ "Strg+O") 
      MenuItem(#Menu_Speichern, "&Speichern" + #TAB$+ "Strg+S") 
      MenuItem(#Menu_Speichern_unter, "&Speichern unter")
      MenuItem(#Menu_Drucken, "&Drucken" + #TAB$+ "Strg+P")  
      MenuBar() 
      MenuItem(#Menu_Beenden, "Be&enden") 
    MenuTitle("Hilfe") 
      MenuItem(#Menu_Ueber, "&Über") 
    
    
;--- Tastenkürzel hinzufügen für Neu, Öffnen und Speichern
  AddKeyboardShortcut(1, #PB_Shortcut_Control | #PB_Shortcut_N, #Menu_Neu) 
  AddKeyboardShortcut(1, #PB_Shortcut_Control | #PB_Shortcut_O, #Menu_Oeffnen) 
  AddKeyboardShortcut(1, #PB_Shortcut_Control | #PB_Shortcut_S, #Menu_Speichern)
  AddKeyboardShortcut(1, #PB_Shortcut_Control | #PB_Shortcut_P, #Menu_Drucken)

 
  EndIf 
  ;--- Toolbar erzeugen 
  If CreateToolBar(#ToolBar, WindowID(1))
    ToolBarStandardButton(#Menu_Neu, #PB_ToolBarIcon_New) 
    ToolBarStandardButton(#Menu_Oeffnen, #PB_ToolBarIcon_Open) 
    ToolBarStandardButton(#Menu_Speichern, #PB_ToolBarIcon_Save)
    ToolBarStandardButton(#Menu_Drucken, #PB_ToolBarIcon_Print) 
    ToolBarToolTip(#ToolBar, #Menu_Neu, "Neues Telefonbuch") 
    ToolBarToolTip(#ToolBar, #Menu_Oeffnen, "Telefonbuch Öffnen") 
    ToolBarToolTip(#ToolBar, #Menu_Speichern, "Telefonbuch Speichern")
    ToolBarToolTip(#ToolBar, #Menu_Drucken, "Telefonbuch Drucken")
 
 
  EndIf
 
  
 ;--- Gadgets 
 If CreateGadgetList(WindowID(1)) 
  TextGadget(1,5,40,100,20,"Nachname:") 
  TextGadget(2,5,70,100,20,"Vorname:") 
  TextGadget(3,5,100,100,20,"Tel.:") 
  StringGadget(4,110,40,230,20,"") 
  StringGadget(5,110,70,230,20,"") 
  StringGadget(6,110,100,230,20,"") 
  ListIconGadget(7, 10, 140, 330, 350, "Nachname", 110, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines)
    AddGadgetColumn(7, 1, "Vorname", 110)
    AddGadgetColumn(7, 2, "Telefonnummer", 106)
  ButtonGadget(8,10,500,100,25,"Eintragen") 
  ButtonGadget(9,125,500,100,25,"Löschen") 
  ButtonGadget(10,240,500,100,25,"Beenden") 
 EndIf 


  ;--- Statusbar erzeugen 
  CreateStatusBar(#StatusBar, WindowID(1))
  

 ;--- Telefonbuch-Daten aus Datei einlesen 
 If OpenFile(0,Datei) 
  Repeat 
   zeile.s = ReadString(0) 
   If zeile.s <> "" 
    AddGadgetItem(7,-1,zeile.s) 
   EndIf 
  Until zeile.s = "" 
  CloseFile(0) 
 EndIf 


  


 ;--- Hauptschleife  
 Repeat 
  
  event.l = WaitWindowEvent() 
  gadget  = EventGadget()
  menu    = EventMenu()
  
Select event 

 Case #PB_Event_Menu
   Select menu 
     Case #Menu_Neu
        Datei_Neu()
        SetActiveGadget(7)   
     Case #Menu_Oeffnen 
        Datei_Oeffnen() 
        SetActiveGadget(7) 
     Case #Menu_Speichern 
        Datei_Speichern() 
        SetActiveGadget(7)
        StatusBarText(#StatusBar, 0, "Datei wurde gespeichert")
     Case #Menu_Speichern_unter
        Datei_Speichern_unter()
        SetActiveGadget(7)
        StatusBarText(#StatusBar, 0, "Datei wurde gespeichert")
     Case  #Menu_Drucken
        Datei_Drucken()
        SetActiveGadget(7)
        StatusBarText(#StatusBar, 0, "Datei wurde gedruckt")
     Case #Menu_Beenden
       ProgrammEnde() 
     Case #Menu_Ueber 
       MessageRequester("Info", #ABOUT)
   EndSelect     
   
   
 Case #PB_Event_Gadget 
   Select gadget 
     Case 8 ;Eintragen-Button 
      If GetGadgetText(4); <> "" And GetGadgetText(5) <> "" And GetGadgetText(6) <> "" 
        AddGadgetItem(7,-1,GetGadgetText(4)+Chr(10)+GetGadgetText(5)+Chr(10)+GetGadgetText(6)+Chr(10)) 
        StatusBarText(#StatusBar, 0, "neuer Datensatz wurde eingetragen")
        SetGadgetText(4,"") 
        SetGadgetText(5,"") 
        SetGadgetText(6,"")
      Else 
       MessageRequester("Fehler","Bitte alle Felder ausfüllen!",0) 
      EndIf 
     Case 9 ;Löschen-Button 
      gadgetstate.w = GetGadgetState(7) 
      If gadgetstate.w <> -1 
        r1 = MessageRequester("Frage", "Soll der Datensatz gelöscht werden?", #PB_MessageRequester_YesNo | #MB_ICONQUESTION) 
          If r1 = #PB_MessageRequester_No 
            StatusBarText(#StatusBar, 0, "Löschen eines Datensatzes wurde abegebrochen")
          EndIf
       If r1 = #PB_MessageRequester_Yes
        RemoveGadgetItem(7,gadgetstate.w)
        StatusBarText(#StatusBar, 0, "Datensatz wurde gelöscht") 
       EndIf
       
       Else 
          MessageRequester("Fehler","Bitte einen Datensatz zum Löschen auswählen!",0)
       EndIf
     Case 10 ; Beenden-Button
      ProgrammEnde()  
   EndSelect 
      ;--? Das Schließgadget vom Fenster wurde gedrückt 
      Case #PB_Event_CloseWindow 
      ProgrammEnde()
EndSelect 

Until Exit
 
EndIf 
End





Bin leider Neuling und suche nun Hilfe im Forum;-)

Wenn Ihr Lösungen für mich habt, bitte den Programmcode mit angeben!!!

Schonmal vielen Dank im Vorraus!!!

Gruß 10tacle

aufdringliche Schriftgrösse und Formatierung entfernt - ts-soft

Verfasst: 07.05.2007 16:12
von D@nte
Vorweg ist's mir grad zu kompliziert dein komplettes Prog zu zerlegen und zu korrigieren...

Zum Speichern:
Erstmal liegt's daran das dein "eintrag.s" nur aus dem Eintrag GetGadgetItemText(7,eintragsnr,0) besteht ergo is dat scho richtig das nur der Vorname gespeichert wird
Um alle 3 Werte zu speichern würd ich insgesamt empfehlen beim laden deiner Unbenannt.tel nen Counter zu starten der die bereits vorhandenen Einträge mit zählt und dann deinen Speicherprocedure etwa so zu realisieren:

Code: Alles auswählen

  If CreateFile(0, Datei)
   eintragneu.l = CountGadgetItems(7)
   For i = eintragalt To eintragnr
    eintrag.s = GetGadgetItemText(7,i,0) + "|" + GetGadgetItemText(7,i,1) + "|" + GetGadgetItemText(7,i,2)
    If eintrag <> ""
     WriteStringN(0,eintrag)
    EndIf
   Next i
   CloseFile(0)
Zum laden dann halt mit Hilfe von StringField() und CountString() die einzelnen Einträge aus deiner .tel in dein ListIconGadget laden

Zum drucken guck in die Examples -.-

Verfasst: 08.05.2007 11:12
von 10tacle
Vielen Dank für deine schnelle Antwort!
Sobald ich Zeit habe, probier ich es mal aus.

Mfg 10tacle

Verfasst: 08.05.2007 13:17
von dysti
Hallo 10tacle,
hier eine mögliche Lösung:

Code: Alles auswählen

;-- Konstanten

#ABOUT = "Telefonbuch Version 1.0" +#LF$+#LF$ + "Author: Kay" + #LF$ + "Compiler: Purebasic v4.02"


Enumeration
  #Menu
EndEnumeration

Enumeration
  #ToolBar
EndEnumeration

Enumeration
  #StatusBar
EndEnumeration

Enumeration
  ;-----> Menu Datei
  #Menu_Neu
  #Menu_Oeffnen
  #Menu_Speichern
  #Menu_Speichern_unter
  #Menu_Drucken
  #Menu_Beenden
  ;-----> Menu Hilfe
  #Menu_Ueber
EndEnumeration

;-- Globale Variablen

Global Exit.l
Global Datei.s
Global Titel.s
Global FileName.s
Global Speichern.l
Global Neu.l

;--- Funktionen#####################################################


;#################################################################

Procedure.l xcm(x.f)
  Protected Result.l
  Result = x * (PrinterPageWidth()/2100) ; 21cm A4
  ProcedureReturn Result
EndProcedure

Procedure ycm(x.f)
  Protected Result.l
  Result = x * (PrinterPageHeight()/2970) ; 29,7cm A4
  ProcedureReturn Result
EndProcedure
Procedure Datei_Speichern_unter()

;{ Procedure für Datei speichern als


  Protected eintrag.s
   
  ; Dateiname erfragen
  eintrag = SaveFileRequester("Datei Speichern als", "", "Telefonbuch (*.tel)|*.tel|Alle Dateien|*.*", 0)
  If eintrag = ""
    ProcedureReturn 0
  EndIf

  ; Datei prüfen
  If FileSize(eintrag) >= 0
    r1 = MessageRequester("Frage", "Datei " + Datei + " überschreiben?", #PB_MessageRequester_YesNo | #MB_ICONQUESTION)
    If r1 = #PB_MessageRequester_No
      ProcedureReturn 0
    EndIf
  EndIf
  ; Datei speichern
 
  ;If Save.b = 1
  ; Datei speichern
  If CreateFile(0, Datei)
   eintraganz.l = CountGadgetItems(7)
   For i = 0 To eintraganz
    eintrag.s = GetGadgetItemText(7,i,0) + "|" + GetGadgetItemText(7,i,1) + "|" + GetGadgetItemText(7,i,2)
    If eintrag <> ""
     WriteStringN(0,eintrag)
    EndIf
   Next i
   CloseFile(0)
   ; Variablen aktualisieren
    Speichern = 0
    Neu = 0
    ; Titel und Status aktualisieren
    Titel = "Telefonbuch - " + Datei
    SetWindowTitle(1, Titel)
    StatusBarText(#StatusBar, 0, "Datei wurde gespeichert")
  Else
    MessageRequester("Fehler", "Datei konnte nicht gespeichert werden", #MB_ICONSTOP)
  ;CloseFile(0)
  EndIf
 ;EndIf

EndProcedure



;#################################################################

Procedure Datei_Speichern()

;{ Procedure für Speichern
;
;}
 Debug Datei
  Protected eintrag.s
   ; Bei neuer Datei Speichern als aufrufen
  If Neu
    Datei_Speichern_unter()
    ProcedureReturn 0
  EndIf
 
 
  ; Datei speichern
  If CreateFile(0, Datei)
   eintraganz.l = CountGadgetItems(7)
   For i = 0 To eintraganz
    eintrag.s = GetGadgetItemText(7,i,0) + "|" + GetGadgetItemText(7,i,1) + "|" + GetGadgetItemText(7,i,2)
    If eintrag <> ""
     WriteStringN(0,eintrag)
    EndIf
   Next i
   CloseFile(0)

    ;Variablen aktualisieren
    Speichern = 0
    Neu = 0
    ; Titel und Status aktuallisieren
    Titel = "Telefonbuch - " + Datei
    SetWindowTitle(1, Titel)
    StatusBarText(#StatusBar, 0, "Datei wurde gespeichert")
  Else
    MessageRequester("Fehler", "Datei konnte nicht gespeichert werden", #MB_ICONSTOP)
  EndIf
   
EndProcedure


;#################################################################

Procedure Datei_Oeffnen()

;{ Procedure für Datei öffnen
;
;}

  Protected temp.s

 
  ; Bei änderung Speichern aufrufen
  If Speichern
    r1 = MessageRequester("Frage", "Änderung speichern?", #PB_MessageRequester_YesNoCancel | #MB_ICONQUESTION)
    If r1 = #PB_MessageRequester_Yes
      Datei_Speichern()
    EndIf
  EndIf
  If r1 = #PB_MessageRequester_Cancel
    ProcedureReturn 0
  EndIf
  ; Dateiname erfragen
  temp = OpenFileRequester("Datei öffnen", Datei, "Telefonbuch (*.tel)|*.tel|Alle Dateien (*.*)|*.*", 0)
  If temp = ""
    ProcedureReturn 0
  EndIf
  ; Datei öffnen
   ClearGadgetItemList(7)
  Datei = temp
   ;--- Telefonbuch-Daten aus Datei einlesen
 If OpenFile(0,Datei)
      While Eof(0) = 0 
        Zeile$ = ReadString(0)     
            For FeldZaehler = 1 To CountString(Zeile$, "|") + 1
                NeueZeile$=Trim(StringField(Zeile$, FeldZaehler, "|"))
                If ErsteSpalte=0
                AddGadgetItem(7,-1,NeueZeile$)
                ErsteSpalte=1
                Else
                SetGadgetItemText(7,azeile,NeueZeile$,FeldZaehler-1) 
                EndIf      
            Next
        azeile=azeile+1
        ErsteSpalte=0
      Wend
    CloseFile(0)
  

    temp = ""
   
    ; Variablen aktualisieren
    Speichern = 0
    Neu = 0
    ; Titel und Status aktuallisieren
    Titel = "Telefonbuch - " + Datei
    SetWindowTitle(1, Titel)
    StatusBarText(#StatusBar, 0, "Datei wurde geöffnet")

  Else
    MessageRequester("Fehler", "Datei konnte nicht geöffnet werden", #MB_ICONSTOP)
  EndIf
 
EndProcedure

;##########################################################################

Procedure Datei_Oeffnen_sofort(temp.s)

;{ Procedure für Datei öffnen bei Parameterübergabe
;
;}


  Datei = temp
   ;--- Telefonbuch-Daten aus Datei einlesen
 If OpenFile(0,Datei)
      While Eof(0) = 0 
        Zeile$ = ReadString(0)     
            For FeldZaehler = 1 To CountString(Zeile$, "|") + 1
                NeueZeile$=Trim(StringField(Zeile$, FeldZaehler, "|"))
                If ErsteSpalte=0
                AddGadgetItem(7,-1,NeueZeile$)
                ErsteSpalte=1
                Else
                SetGadgetItemText(7,azeile,NeueZeile$,FeldZaehler-1) 
                EndIf      
            Next
        azeile=azeile+1
        ErsteSpalte=0

      Wend
    CloseFile(0)
    temp = ""
    ; Variablen aktuallisieren
    Speichern = 0
    Neu = 0
    ; Titel und Status aktuallisieren
    Titel = "Telefonbuch - " + Datei
    SetWindowTitle(1, Titel)
    StatusBarText(#StatusBar, 0, "Geöffnet")

  Else
    MessageRequester("Information","Konnte Datei nicht öffnen!")
    End
  EndIf


 
EndProcedure

;###################################################################################

Procedure Datei_Neu()

;{ Procedure für Neu
;
;}

  ; Bei Änderung Speichern aufrufen
  If Speichern
    r1 = MessageRequester("Frage", "Änderung speichern?", #PB_MessageRequester_YesNoCancel | #MB_ICONQUESTION)
    If r1 = #PB_MessageRequester_Yes
      Datei_Speichern()
    EndIf
  EndIf
  If r1 = #PB_MessageRequester_Cancel
    ProcedureReturn 0
  EndIf
  ; Editorfeld löschen
  ClearGadgetItemList(7)
  ; Variablen aktuallisieren
  Speichern = 0
  Neu = 1
  Datei = "neu.tel"
  ; Titel und Status aktuallisieren
  Titel = "Telefonbuch - " + Datei
  SetWindowTitle(1, Titel)
  StatusBarText(#StatusBar, 0, "Neu")
EndProcedure

;############################################################################


Procedure Datei_Drucken()

Protected Zeichenhoehe.l, z.l, rand.l, text.s, textz.s, Font1.l, Zeilenabstand.d
  Protected drreihe.l, drspalte.l, drucker.s, eintraganz.l, textgroesse.d,k.l
  k=1
  Zeichenhoehe=75
  textgroesse=0.6
  Zeilenabstand=Zeichenhoehe*textgroesse
  
  z=50
  rand=200
  textz.s=""
  text.s=""
  eintraganz.l = CountGadgetItems(7)
  ;Font1 = LoadFont(#PB_Any, "Courier New", 12, #PB_Font_StrikeOut)
  If PrintRequester()
    
    
    If StartPrinting("Job")
      
      LoadFont(0, "Courier New",Zeichenhoehe)
      LoadFont(1, "Courier New",Zeichenhoehe,#PB_Font_StrikeOut  )
      
      If StartDrawing(PrinterOutput())
        DrawingFont(FontID(0))
        
        DrawText(xcm(rand),ycm(Zeichenhoehe)," Telefonbucheinträge ")
        
        
        Zeichenhoehe=Zeichenhoehe+Zeilenabstand+Zeilenabstand
        k=k+1
        DrawText(xcm(rand),ycm(Zeichenhoehe),"Nachname            Vorname             Telefonnummer")
        Zeichenhoehe=Zeichenhoehe+Zeilenabstand
        k=k+1
        DrawingFont(FontID(1))
        DrawText(xcm(rand),ycm(Zeichenhoehe),"                                                       ") 
        DrawingFont(FontID(0))
        Zeichenhoehe=Zeichenhoehe+Zeilenabstand
        k=k+1
        For drreihe=0 To eintraganz
          For drspalte= 0 To 2
            textz=GetGadgetItemText(7,drreihe,drspalte)
            If drspalte=0
              textz=LSet(textz,20)
            ElseIf drspalte=1
              textz=LSet(textz,20)
            ElseIf drspalte=2
              textz=LSet(textz,15)
            EndIf
            text=text+textz
          Next drspalte
          DrawText(xcm(rand),ycm(Zeichenhoehe),text)
          Zeichenhoehe=Zeichenhoehe+Zeilenabstand
          k=k+1
          If k=63
            NewPrinterPage()
            k=1
            Zeichenhoehe=75
            Zeilenabstand=Zeichenhoehe*textgroesse
          EndIf
          text=""
          textz=""
        Next drreihe
        StopDrawing()
        
      EndIf
      
      StopPrinting()
      EndIf
    EndIf
 
EndProcedure

;######################################################################


Procedure ProgrammEnde()

;{ Procedure bei Programm Ende
;
;}
 
  ; Bei änderung Speichern aufrufen
  If Speichern
    r1 = MessageRequester("Frage", "Änderung speichern?", #PB_MessageRequester_YesNoCancel | #MB_ICONQUESTION)
    If r1 = #PB_MessageRequester_Yes
      Datei_Speichern()
    EndIf
  EndIf
  If r1 <> #PB_MessageRequester_Cancel
    Exit = 1
  EndIf
   
EndProcedure

;---Hauptprogramm#####################################################




Datei = "unbekannt.tel"
Titel = "Telefonbuch - " + Datei

If OpenWindow(1,400,50,350,650,Titel, #PB_Window_SystemMenu|#PB_Window_MinimizeGadget)
 
;--- Menü
 
   If CreateMenu(1, WindowID(1))
    MenuTitle("&Datei")
      MenuItem(#Menu_Neu, "&Neu" + #TAB$+ "Strg+N") 
      MenuItem(#Menu_Oeffnen, "&Öffnen" + #TAB$+ "Strg+O")
      MenuItem(#Menu_Speichern, "&Speichern" + #TAB$+ "Strg+S")
      MenuItem(#Menu_Speichern_unter, "&Speichern unter")
      MenuItem(#Menu_Drucken, "&Drucken" + #TAB$+ "Strg+P") 
      MenuBar()
      MenuItem(#Menu_Beenden, "Be&enden")
    MenuTitle("Hilfe")
      MenuItem(#Menu_Ueber, "&Über")
   
   
;--- Tastenkürzel hinzufügen für Neu, Öffnen und Speichern
  AddKeyboardShortcut(1, #PB_Shortcut_Control | #PB_Shortcut_N, #Menu_Neu)
  AddKeyboardShortcut(1, #PB_Shortcut_Control | #PB_Shortcut_O, #Menu_Oeffnen)
  AddKeyboardShortcut(1, #PB_Shortcut_Control | #PB_Shortcut_S, #Menu_Speichern)
  AddKeyboardShortcut(1, #PB_Shortcut_Control | #PB_Shortcut_P, #Menu_Drucken)

 
  EndIf
  ;--- Toolbar erzeugen
  If CreateToolBar(#ToolBar, WindowID(1))
    ToolBarStandardButton(#Menu_Neu, #PB_ToolBarIcon_New)
    ToolBarStandardButton(#Menu_Oeffnen, #PB_ToolBarIcon_Open)
    ToolBarStandardButton(#Menu_Speichern, #PB_ToolBarIcon_Save)
    ToolBarStandardButton(#Menu_Drucken, #PB_ToolBarIcon_Print)
    ToolBarToolTip(#ToolBar, #Menu_Neu, "Neues Telefonbuch")
    ToolBarToolTip(#ToolBar, #Menu_Oeffnen, "Telefonbuch Öffnen")
    ToolBarToolTip(#ToolBar, #Menu_Speichern, "Telefonbuch Speichern")
    ToolBarToolTip(#ToolBar, #Menu_Drucken, "Telefonbuch Drucken")
 
 
  EndIf
 
 
 ;--- Gadgets
 If CreateGadgetList(WindowID(1))
  TextGadget(1,5,40,100,20,"Nachname:")
  TextGadget(2,5,70,100,20,"Vorname:")
  TextGadget(3,5,100,100,20,"Tel.:")
  StringGadget(4,110,40,230,20,"")
  StringGadget(5,110,70,230,20,"")
  StringGadget(6,110,100,230,20,"")
  ListIconGadget(7, 10, 140, 330, 350, "Nachname", 110, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines)
    AddGadgetColumn(7, 1, "Vorname", 110)
    AddGadgetColumn(7, 2, "Telefonnummer", 106)
  ButtonGadget(8,10,500,100,25,"Eintragen")
  ButtonGadget(9,125,500,100,25,"Löschen")
  ButtonGadget(10,240,500,100,25,"Beenden")
 EndIf


  ;--- Statusbar erzeugen
  CreateStatusBar(#StatusBar, WindowID(1))
 

 ;--- Telefonbuch-Daten aus Datei einlesen
 If OpenFile(0,Datei)
      While Eof(0) = 0 
        Zeile$ = ReadString(0)     
            For FeldZaehler = 1 To CountString(Zeile$, "|") + 1
                NeueZeile$=Trim(StringField(Zeile$, FeldZaehler, "|"))
                If ErsteSpalte=0
                AddGadgetItem(7,-1,NeueZeile$)
                ErsteSpalte=1
                Else
                SetGadgetItemText(7,azeile,NeueZeile$,FeldZaehler-1) 
                EndIf      
            Next
        azeile=azeile+1
        ErsteSpalte=0

      Wend
    CloseFile(0)
  Else
    MessageRequester("Information","Konnte Datei nicht öffnen!")
    End
  EndIf



 


 ;--- Hauptschleife 
 Repeat
 
  event.l = WaitWindowEvent()
  gadget  = EventGadget()
  menu    = EventMenu()
 
Select event

 Case #PB_Event_Menu
   Select menu
     Case #Menu_Neu
        Datei_Neu()
        SetActiveGadget(7)   
     Case #Menu_Oeffnen
        Datei_Oeffnen()
        SetActiveGadget(7)
     Case #Menu_Speichern
        Datei_Speichern()
        SetActiveGadget(7)
        StatusBarText(#StatusBar, 0, "Datei wurde gespeichert")
     Case #Menu_Speichern_unter
        Datei_Speichern_unter()
        SetActiveGadget(7)
        StatusBarText(#StatusBar, 0, "Datei wurde gespeichert")
     Case  #Menu_Drucken
        Datei_Drucken()
        SetActiveGadget(7)
        StatusBarText(#StatusBar, 0, "Datei wurde gedruckt")
     Case #Menu_Beenden
       ProgrammEnde()
     Case #Menu_Ueber
       MessageRequester("Info", #ABOUT)
   EndSelect     
   
   
 Case #PB_Event_Gadget
   Select gadget
     Case 8 ;Eintragen-Button
      If GetGadgetText(4); <> "" And GetGadgetText(5) <> "" And GetGadgetText(6) <> ""
        AddGadgetItem(7,-1,GetGadgetText(4)+Chr(10)+GetGadgetText(5)+Chr(10)+GetGadgetText(6)+Chr(10))
        StatusBarText(#StatusBar, 0, "neuer Datensatz wurde eingetragen")
        SetGadgetText(4,"")
        SetGadgetText(5,"")
        SetGadgetText(6,"")
      Else
       MessageRequester("Fehler","Bitte alle Felder ausfüllen!",0)
      EndIf
     Case 9 ;Löschen-Button
      gadgetstate.w = GetGadgetState(7)
      If gadgetstate.w <> -1
        r1 = MessageRequester("Frage", "Soll der Datensatz gelöscht werden?", #PB_MessageRequester_YesNo | #MB_ICONQUESTION)
          If r1 = #PB_MessageRequester_No
            StatusBarText(#StatusBar, 0, "Löschen eines Datensatzes wurde abegebrochen")
          EndIf
       If r1 = #PB_MessageRequester_Yes
        RemoveGadgetItem(7,gadgetstate.w)
        StatusBarText(#StatusBar, 0, "Datensatz wurde gelöscht")
       EndIf
       
       Else
          MessageRequester("Fehler","Bitte einen Datensatz zum Löschen auswählen!",0)
       EndIf
     Case 10 ; Beenden-Button
      ProgrammEnde() 
   EndSelect
      ;--? Das Schließgadget vom Fenster wurde gedrückt
      Case #PB_Event_CloseWindow
      ProgrammEnde()
EndSelect

Until Exit
 
EndIf
End


Recht Herzlichen Dank

Verfasst: 08.05.2007 13:47
von 10tacle
Vielen liebe Dank an dysti
:D

Jetzt läuft das Prog, so wie ich es mir vorgestellt habe. Auch das Drucken funzt perfekt. Ich weiß gar nicht, wie sehr ich dir danken kann :allright:

Ich habe Stunden damit verbracht, das Prog zum laufen zu bringen und nun geht es...

*bin überglücklich*

greetz to dysti :allright:

Verfasst: 08.05.2007 13:55
von dysti
....und mit Druckvorschau

Code: Alles auswählen

;-- Konstanten

#ABOUT = "Telefonbuch Version 1.0" +#LF$+#LF$ + "Author: Kay" + #LF$ + "Compiler: Purebasic v4.02"


Enumeration
  #Menu
EndEnumeration

Enumeration
  #ToolBar
EndEnumeration

Enumeration
  #StatusBar
EndEnumeration

Enumeration
  ;-----> Menu Datei
  #Menu_Neu
  #Menu_Oeffnen
  #Menu_Speichern
  #Menu_Speichern_unter
  #Menu_Drucken
  #Menu_Beenden
  #Menu_Vorschau
  ;-----> Menu Hilfe
  #Menu_Ueber
EndEnumeration

;-- Globale Variablen

Global Exit.l
Global Datei.s
Global Titel.s
Global FileName.s
Global Speichern.l
Global Neu.l

;--- Funktionen#####################################################


;#################################################################

Procedure.l xcm(x.f)
  Protected Result.l
  Result = x * (PrinterPageWidth()/2100) ; 21cm A4
  ProcedureReturn Result
EndProcedure

Procedure ycm(x.f)
  Protected Result.l
  Result = x * (PrinterPageHeight()/2970) ; 29,7cm A4
  ProcedureReturn Result
EndProcedure
Procedure Datei_Speichern_unter()

;{ Procedure für Datei speichern als


  Protected eintrag.s
   
  ; Dateiname erfragen
  eintrag = SaveFileRequester("Datei Speichern als", "", "Telefonbuch (*.tel)|*.tel|Alle Dateien|*.*", 0)
  If eintrag = ""
    ProcedureReturn 0
  EndIf

  ; Datei prüfen
  If FileSize(eintrag) >= 0
    r1 = MessageRequester("Frage", "Datei " + Datei + " überschreiben?", #PB_MessageRequester_YesNo | #MB_ICONQUESTION)
    If r1 = #PB_MessageRequester_No
      ProcedureReturn 0
    EndIf
  EndIf
  ; Datei speichern
 
  ;If Save.b = 1
  ; Datei speichern
  If CreateFile(0, Datei)
   eintraganz.l = CountGadgetItems(7)
   For i = 0 To eintraganz
    eintrag.s = GetGadgetItemText(7,i,0) + "|" + GetGadgetItemText(7,i,1) + "|" + GetGadgetItemText(7,i,2)
    If eintrag <> ""
     WriteStringN(0,eintrag)
    EndIf
   Next i
   CloseFile(0)
   ; Variablen aktualisieren
    Speichern = 0
    Neu = 0
    ; Titel und Status aktualisieren
    Titel = "Telefonbuch - " + Datei
    SetWindowTitle(1, Titel)
    StatusBarText(#StatusBar, 0, "Datei wurde gespeichert")
  Else
    MessageRequester("Fehler", "Datei konnte nicht gespeichert werden", #MB_ICONSTOP)
  ;CloseFile(0)
  EndIf
 ;EndIf

EndProcedure



;#################################################################

Procedure Datei_Speichern()

;{ Procedure für Speichern
;
;}
 Debug Datei
  Protected eintrag.s
   ; Bei neuer Datei Speichern als aufrufen
  If Neu
    Datei_Speichern_unter()
    ProcedureReturn 0
  EndIf
 
 
  ; Datei speichern
  If CreateFile(0, Datei)
   eintraganz.l = CountGadgetItems(7)
   For i = 0 To eintraganz
    eintrag.s = GetGadgetItemText(7,i,0) + "|" + GetGadgetItemText(7,i,1) + "|" + GetGadgetItemText(7,i,2)
    If eintrag <> ""
     WriteStringN(0,eintrag)
    EndIf
   Next i
   CloseFile(0)

    ;Variablen aktualisieren
    Speichern = 0
    Neu = 0
    ; Titel und Status aktuallisieren
    Titel = "Telefonbuch - " + Datei
    SetWindowTitle(1, Titel)
    StatusBarText(#StatusBar, 0, "Datei wurde gespeichert")
  Else
    MessageRequester("Fehler", "Datei konnte nicht gespeichert werden", #MB_ICONSTOP)
  EndIf
   
EndProcedure


;#################################################################

Procedure Datei_Oeffnen()

;{ Procedure für Datei öffnen
;
;}

  Protected temp.s

 
  ; Bei änderung Speichern aufrufen
  If Speichern
    r1 = MessageRequester("Frage", "Änderung speichern?", #PB_MessageRequester_YesNoCancel | #MB_ICONQUESTION)
    If r1 = #PB_MessageRequester_Yes
      Datei_Speichern()
    EndIf
  EndIf
  If r1 = #PB_MessageRequester_Cancel
    ProcedureReturn 0
  EndIf
  ; Dateiname erfragen
  temp = OpenFileRequester("Datei öffnen", Datei, "Telefonbuch (*.tel)|*.tel|Alle Dateien (*.*)|*.*", 0)
  If temp = ""
    ProcedureReturn 0
  EndIf
  ; Datei öffnen
   ClearGadgetItemList(7)
  Datei = temp
   ;--- Telefonbuch-Daten aus Datei einlesen
 If OpenFile(0,Datei)
      While Eof(0) = 0
        Zeile$ = ReadString(0)     
            For FeldZaehler = 1 To CountString(Zeile$, "|") + 1
                NeueZeile$=Trim(StringField(Zeile$, FeldZaehler, "|"))
                If ErsteSpalte=0
                AddGadgetItem(7,-1,NeueZeile$)
                ErsteSpalte=1
                Else
                SetGadgetItemText(7,azeile,NeueZeile$,FeldZaehler-1)
                EndIf     
            Next
        azeile=azeile+1
        ErsteSpalte=0
      Wend
    CloseFile(0)
 

    temp = ""
   
    ; Variablen aktualisieren
    Speichern = 0
    Neu = 0
    ; Titel und Status aktuallisieren
    Titel = "Telefonbuch - " + Datei
    SetWindowTitle(1, Titel)
    StatusBarText(#StatusBar, 0, "Datei wurde geöffnet")

  Else
    MessageRequester("Fehler", "Datei konnte nicht geöffnet werden", #MB_ICONSTOP)
  EndIf
 
EndProcedure

;##########################################################################

Procedure Datei_Oeffnen_sofort(temp.s)

;{ Procedure für Datei öffnen bei Parameterübergabe
;
;}


  Datei = temp
   ;--- Telefonbuch-Daten aus Datei einlesen
 If OpenFile(0,Datei)
      While Eof(0) = 0
        Zeile$ = ReadString(0)     
            For FeldZaehler = 1 To CountString(Zeile$, "|") + 1
                NeueZeile$=Trim(StringField(Zeile$, FeldZaehler, "|"))
                If ErsteSpalte=0
                AddGadgetItem(7,-1,NeueZeile$)
                ErsteSpalte=1
                Else
                SetGadgetItemText(7,azeile,NeueZeile$,FeldZaehler-1)
                EndIf     
            Next
        azeile=azeile+1
        ErsteSpalte=0

      Wend
    CloseFile(0)
    temp = ""
    ; Variablen aktuallisieren
    Speichern = 0
    Neu = 0
    ; Titel und Status aktuallisieren
    Titel = "Telefonbuch - " + Datei
    SetWindowTitle(1, Titel)
    StatusBarText(#StatusBar, 0, "Geöffnet")

  Else
    MessageRequester("Information","Konnte Datei nicht öffnen!")
    End
  EndIf


 
EndProcedure

;###################################################################################

Procedure Datei_Neu()

;{ Procedure für Neu
;
;}

  ; Bei Änderung Speichern aufrufen
  If Speichern
    r1 = MessageRequester("Frage", "Änderung speichern?", #PB_MessageRequester_YesNoCancel | #MB_ICONQUESTION)
    If r1 = #PB_MessageRequester_Yes
      Datei_Speichern()
    EndIf
  EndIf
  If r1 = #PB_MessageRequester_Cancel
    ProcedureReturn 0
  EndIf
  ; Editorfeld löschen
  ClearGadgetItemList(7)
  ; Variablen aktuallisieren
  Speichern = 0
  Neu = 1
  Datei = "neu.tel"
  ; Titel und Status aktuallisieren
  Titel = "Telefonbuch - " + Datei
  SetWindowTitle(1, Titel)
  StatusBarText(#StatusBar, 0, "Neu")
EndProcedure

;############################################################################


Procedure Datei_Drucken()

Protected Zeichenhoehe.l, z.l, rand.l, text.s, textz.s, Font1.l, Zeilenabstand.d
  Protected drreihe.l, drspalte.l, drucker.s, eintraganz.l, textgroesse.d,k.l
  k=1
  Zeichenhoehe=75
  textgroesse=0.6
  Zeilenabstand=Zeichenhoehe*textgroesse
 
  z=50
  rand=200
  textz.s=""
  text.s=""
  eintraganz.l = CountGadgetItems(7)
  ;Font1 = LoadFont(#PB_Any, "Courier New", 12, #PB_Font_StrikeOut)
  If PrintRequester()
   
   
    If StartPrinting("Job")
     
      LoadFont(0, "Courier New",Zeichenhoehe)
      LoadFont(1, "Courier New",Zeichenhoehe,#PB_Font_StrikeOut  )
     
      If StartDrawing(PrinterOutput())
        DrawingFont(FontID(0))
       
        DrawText(xcm(rand),ycm(Zeichenhoehe)," Telefonbucheinträge ")
       
       
        Zeichenhoehe=Zeichenhoehe+Zeilenabstand+Zeilenabstand
        k=k+1
        DrawText(xcm(rand),ycm(Zeichenhoehe),"Nachname            Vorname             Telefonnummer")
        Zeichenhoehe=Zeichenhoehe+Zeilenabstand
        k=k+1
        DrawingFont(FontID(1))
        DrawText(xcm(rand),ycm(Zeichenhoehe),"                                                       ")
        DrawingFont(FontID(0))
        Zeichenhoehe=Zeichenhoehe+Zeilenabstand
        k=k+1
        For drreihe=0 To eintraganz
          For drspalte= 0 To 2
            textz=GetGadgetItemText(7,drreihe,drspalte)
            If drspalte=0
              textz=LSet(textz,20)
            ElseIf drspalte=1
              textz=LSet(textz,20)
            ElseIf drspalte=2
              textz=LSet(textz,15)
            EndIf
            text=text+textz
          Next drspalte
          DrawText(xcm(rand),ycm(Zeichenhoehe),text)
          Zeichenhoehe=Zeichenhoehe+Zeilenabstand
          k=k+1
          If k=63
            NewPrinterPage()
            k=1
            Zeichenhoehe=75
            Zeilenabstand=Zeichenhoehe*textgroesse
          EndIf
          text=""
          textz=""
        Next drreihe
        StopDrawing()
       
      EndIf
     
      StopPrinting()
      EndIf
    EndIf
 
EndProcedure

Procedure Datei_Druckvorschau()

Protected Zeichenhoehe.l, z.l, rand.l, text.s, textz.s, Font1.l, Zeilenabstand.d
  Protected drreihe.l, drspalte.l, drucker.s, eintraganz.l, textgroesse.d,k.l
  k=1
  Zeichenhoehe=75
  textgroesse=0.6
  Zeilenabstand=Zeichenhoehe*textgroesse
 
  z=50
  rand=10
  textz.s=""
  text.s=""
  
   If OpenWindow(100, 200, 200, 502, 600, "Druckvorschau", #PB_Window_SystemMenu)
  CreateGadgetList(WindowID(100))
  EditorGadget(101, 35, 5, 430, 545)
  ButtonGadget(102, 210, 560, 100, 30, "Zurück")
  
  eintraganz.l = CountGadgetItems(7)
 
      LoadFont(0, "Courier New",Zeichenhoehe)
        Zeichenhoehe=Zeichenhoehe+Zeilenabstand+Zeilenabstand
        k=k+1
        AddGadgetItem(101,-1,Space(rand)+"Nachname            Vorname             Telefonnummer")
        Zeichenhoehe=Zeichenhoehe+Zeilenabstand
        k=k+1
        For drreihe=0 To eintraganz
          For drspalte= 0 To 2
            textz=GetGadgetItemText(7,drreihe,drspalte)
            If drspalte=0
              textz=LSet(textz,20)
            ElseIf drspalte=1
              textz=LSet(textz,20)
            ElseIf drspalte=2
              textz=LSet(textz,15)
            EndIf
            text=text+textz
          Next drspalte
          AddGadgetItem(101,-1,Space(rand)+text)
        text=""
        textz=""
      Next drreihe
    EndIf
 
EndProcedure

;######################################################################


Procedure ProgrammEnde()

;{ Procedure bei Programm Ende
;
;}
 
  ; Bei änderung Speichern aufrufen
  If Speichern
    r1 = MessageRequester("Frage", "Änderung speichern?", #PB_MessageRequester_YesNoCancel | #MB_ICONQUESTION)
    If r1 = #PB_MessageRequester_Yes
      Datei_Speichern()
    EndIf
  EndIf
  If r1 <> #PB_MessageRequester_Cancel
    Exit = 1
  EndIf
   
EndProcedure

;---Hauptprogramm#####################################################




Datei = "unbekannt.tel"
Titel = "Telefonbuch - " + Datei

If OpenWindow(1,400,50,350,650,Titel, #PB_Window_SystemMenu|#PB_Window_MinimizeGadget)
 
;--- Menü
 
   If CreateMenu(1, WindowID(1))
    MenuTitle("&Datei")
      MenuItem(#Menu_Neu, "&Neu" + #TAB$+ "Strg+N")
      MenuItem(#Menu_Oeffnen, "&Öffnen" + #TAB$+ "Strg+O")
      MenuItem(#Menu_Speichern, "&Speichern" + #TAB$+ "Strg+S")
      MenuItem(#Menu_Speichern_unter, "&Speichern unter")
      MenuItem(#Menu_Drucken, "&Drucken" + #TAB$+ "Strg+P")
      MenuBar()
      MenuItem(#Menu_Beenden, "Be&enden")
    MenuTitle("Hilfe")
      MenuItem(#Menu_Ueber, "&Über")
   
   
;--- Tastenkürzel hinzufügen für Neu, Öffnen und Speichern
  AddKeyboardShortcut(1, #PB_Shortcut_Control | #PB_Shortcut_N, #Menu_Neu)
  AddKeyboardShortcut(1, #PB_Shortcut_Control | #PB_Shortcut_O, #Menu_Oeffnen)
  AddKeyboardShortcut(1, #PB_Shortcut_Control | #PB_Shortcut_S, #Menu_Speichern)
  AddKeyboardShortcut(1, #PB_Shortcut_Control | #PB_Shortcut_P, #Menu_Drucken)

 
  EndIf
  ;--- Toolbar erzeugen
  If CreateToolBar(#ToolBar, WindowID(1))
    ToolBarStandardButton(#Menu_Neu, #PB_ToolBarIcon_New)
    ToolBarStandardButton(#Menu_Oeffnen, #PB_ToolBarIcon_Open)
    ToolBarStandardButton(#Menu_Speichern, #PB_ToolBarIcon_Save)
    ToolBarStandardButton(#Menu_Drucken, #PB_ToolBarIcon_Print)
    ToolBarStandardButton(#Menu_Vorschau, #PB_ToolBarIcon_New)
    ToolBarToolTip(#ToolBar, #Menu_Neu, "Neues Telefonbuch")
    ToolBarToolTip(#ToolBar, #Menu_Oeffnen, "Telefonbuch Öffnen")
    ToolBarToolTip(#ToolBar, #Menu_Speichern, "Telefonbuch Speichern")
    ToolBarToolTip(#ToolBar, #Menu_Drucken, "Telefonbuch Drucken")
    ToolBarToolTip(#ToolBar, #Menu_Vorschau, "Druck-Vorschau")
 
 
  EndIf
 
 
 ;--- Gadgets
 If CreateGadgetList(WindowID(1))
  TextGadget(1,5,40,100,20,"Nachname:")
  TextGadget(2,5,70,100,20,"Vorname:")
  TextGadget(3,5,100,100,20,"Tel.:")
  StringGadget(4,110,40,230,20,"")
  StringGadget(5,110,70,230,20,"")
  StringGadget(6,110,100,230,20,"")
  ListIconGadget(7, 10, 140, 330, 350, "Nachname", 110, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines)
    AddGadgetColumn(7, 1, "Vorname", 110)
    AddGadgetColumn(7, 2, "Telefonnummer", 106)
  ButtonGadget(8,10,500,100,25,"Eintragen")
  ButtonGadget(9,125,500,100,25,"Löschen")
  ButtonGadget(10,240,500,100,25,"Beenden")
 EndIf


  ;--- Statusbar erzeugen
  CreateStatusBar(#StatusBar, WindowID(1))
 

 ;--- Telefonbuch-Daten aus Datei einlesen
 If OpenFile(0,Datei)
      While Eof(0) = 0
        Zeile$ = ReadString(0)     
            For FeldZaehler = 1 To CountString(Zeile$, "|") + 1
                NeueZeile$=Trim(StringField(Zeile$, FeldZaehler, "|"))
                If ErsteSpalte=0
                AddGadgetItem(7,-1,NeueZeile$)
                ErsteSpalte=1
                Else
                SetGadgetItemText(7,azeile,NeueZeile$,FeldZaehler-1)
                EndIf     
            Next
        azeile=azeile+1
        ErsteSpalte=0

      Wend
    CloseFile(0)
  Else
    MessageRequester("Information","Konnte Datei nicht öffnen!")
    End
  EndIf



 


 ;--- Hauptschleife
 Repeat
 
  event.l = WaitWindowEvent()
  gadget  = EventGadget()
  menu    = EventMenu()
 
Select event

 Case #PB_Event_Menu
   Select menu
     Case #Menu_Neu
        Datei_Neu()
        SetActiveGadget(7)   
     Case #Menu_Oeffnen
        Datei_Oeffnen()
        SetActiveGadget(7)
     Case #Menu_Speichern
        Datei_Speichern()
        SetActiveGadget(7)
        StatusBarText(#StatusBar, 0, "Datei wurde gespeichert")
     Case #Menu_Speichern_unter
        Datei_Speichern_unter()
        SetActiveGadget(7)
        StatusBarText(#StatusBar, 0, "Datei wurde gespeichert")
     Case  #Menu_Drucken
        Datei_Drucken()
        SetActiveGadget(7)
        StatusBarText(#StatusBar, 0, "Datei wurde gedruckt")
     Case  #Menu_Vorschau
        Datei_Druckvorschau()
     Case #Menu_Beenden
       ProgrammEnde()
     Case #Menu_Ueber
       MessageRequester("Info", #ABOUT)
   EndSelect     
   
   
 Case #PB_Event_Gadget
   Select gadget
      Case 102
      CloseWindow(100)
     Case 8 ;Eintragen-Button
      If GetGadgetText(4); <> "" And GetGadgetText(5) <> "" And GetGadgetText(6) <> ""
        AddGadgetItem(7,-1,GetGadgetText(4)+Chr(10)+GetGadgetText(5)+Chr(10)+GetGadgetText(6)+Chr(10))
        StatusBarText(#StatusBar, 0, "neuer Datensatz wurde eingetragen")
        SetGadgetText(4,"")
        SetGadgetText(5,"")
        SetGadgetText(6,"")
      Else
       MessageRequester("Fehler","Bitte alle Felder ausfüllen!",0)
      EndIf
     Case 9 ;Löschen-Button
      gadgetstate.w = GetGadgetState(7)
      If gadgetstate.w <> -1
        r1 = MessageRequester("Frage", "Soll der Datensatz gelöscht werden?", #PB_MessageRequester_YesNo | #MB_ICONQUESTION)
          If r1 = #PB_MessageRequester_No
            StatusBarText(#StatusBar, 0, "Löschen eines Datensatzes wurde abegebrochen")
          EndIf
       If r1 = #PB_MessageRequester_Yes
        RemoveGadgetItem(7,gadgetstate.w)
        StatusBarText(#StatusBar, 0, "Datensatz wurde gelöscht")
       EndIf
       
       Else
          MessageRequester("Fehler","Bitte einen Datensatz zum Löschen auswählen!",0)
       EndIf
     Case 10 ; Beenden-Button
      ProgrammEnde()
   EndSelect
     
      ;--? Das Schließgadget vom Fenster wurde gedrückt
      Case #PB_Event_CloseWindow
      ProgrammEnde()
EndSelect

Until Exit
 
EndIf
End 

supi;-)

Verfasst: 08.05.2007 14:28
von 10tacle
hab es gleich mal ausprobiert :allright:

wenn man unterschiedliche Namen einträgt, haut es noch nicht ganz hin.
ist aber ne echt feine sache :allright:

dann gibt es noch nen kleines prob beim speichern. er liest ja die werte bei der procedure speichern aus und speichert die Datei. Jedoch speichert es 3 leerzeilen nach den Einträgen mit. Könnte man das umgehen?
Habe nämlich noch eine Sortierung eingebracht und immer wenn ich sortieren möchte, sortiert es mir 3 Leerzeilen über den Einträgen!

Die procedure datei_speichern_unter funzt auch irgendwie nicht... :(

wie lange programmierst du eigentlich schon dysti?
Ich habe dieses Jahr erst angefangen, also noch sehr frisch! Du könntest mein Lehrmeister werden*g*

gruß 10tacle

Verfasst: 08.05.2007 15:51
von D@nte
Zu deiner Leerzeie die übrigens beim Speichern immer ein mehr wird *schoma mit Zaunfahl wink*:

Code: Alles auswählen

  ; Datei speichern
  If CreateFile(0, Datei)
  Debug "If CreateFile(0, " + Datei + ")"
   eintraganz.l = CountGadgetItems(7)
   Debug "eintraganz.l = " + Str(CountGadgetItems(7))
   For i = 0 To eintraganz
    eintrag.s = GetGadgetItemText(7,i,0) + "|" + GetGadgetItemText(7,i,1) + "|" + GetGadgetItemText(7,i,2)
    Debug "eintrag.s = " + GetGadgetItemText(7,i,0) + "|" + GetGadgetItemText(7,i,1) + "|" + GetGadgetItemText(7,i,2)
    If eintrag <> ""
     WriteStringN(0,eintrag)
    EndIf
   Next i
   CloseFile(0)
Einfügen und dann bisserl trail & error...

Verfasst: 08.05.2007 16:21
von dysti
Hallo 10tacle,
jetzt sollte es gehen. Hatte in der Eile falsche Zahlen eingetragen.
Ursache: Icongadgetlist fängt immer bei 0 an zu zählen und nicht bei 1.
Dementsprechend muß das Ergebnis von "CountGadgetItems" um 1 gemindert werden.
wenn man unterschiedliche Namen einträgt, haut es noch nicht ganz hin.
Da weiß ich nicht was du meinst.
Ich kann alles eintragen und auch speichern.
Bug mit den Leerzeilen auch beseitigt.
Programmieren mit PB ca. 1 Jahr. Aber nicht durchgängig.
Muß aus Krankheitsgründen immer wieder pausieren.
Nun aber der Code:

Code: Alles auswählen

;-- Konstanten

#ABOUT = "Telefonbuch Version 1.0" +#LF$+#LF$ + "Author: Kay" + #LF$ + "Compiler: Purebasic v4.02"


Enumeration
  #Menu
EndEnumeration

Enumeration
  #ToolBar
EndEnumeration

Enumeration
  #StatusBar
EndEnumeration

Enumeration
  ;-----> Menu Datei
  #Menu_Neu
  #Menu_Oeffnen
  #Menu_Speichern
  #Menu_Speichern_unter
  #Menu_Drucken
  #Menu_Beenden
  #Menu_Vorschau
  ;-----> Menu Hilfe
  #Menu_Ueber
EndEnumeration

;-- Globale Variablen

Global Exit.l
Global Datei.s
Global Titel.s
Global FileName.s
Global Speichern.l
Global Neu.l

;--- Funktionen#####################################################


;#################################################################

Procedure.l xcm(x.f)
  Protected Result.l
  Result = x * (PrinterPageWidth()/2100) ; 21cm A4
  ProcedureReturn Result
EndProcedure

Procedure ycm(x.f)
  Protected Result.l
  Result = x * (PrinterPageHeight()/2970) ; 29,7cm A4
  ProcedureReturn Result
EndProcedure
Procedure Datei_Speichern_unter()

;{ Procedure für Datei speichern als


  Protected eintrag.s
   
  ; Dateiname erfragen
  eintrag = SaveFileRequester("Datei Speichern als", "", "Telefonbuch (*.tel)|*.tel|Alle Dateien|*.*", 0)
  If eintrag = ""
    ProcedureReturn 0
    Else
    Datei=eintrag
  EndIf

  ; Datei prüfen
  If FileSize(eintrag) >= 0
    r1 = MessageRequester("Frage", "Datei " + Datei + " überschreiben?", #PB_MessageRequester_YesNo | #MB_ICONQUESTION)
    If r1 = #PB_MessageRequester_No
      ProcedureReturn 0
      Else
      Datei=eintrag
    EndIf
  EndIf
  ; Datei speichern
  
  ;If Save.b = 1
  ; Datei speichern
  If CreateFile(0, Datei)
   eintraganz.l = CountGadgetItems(7)
   For i = 0 To eintraganz-1
    eintrag.s = GetGadgetItemText(7,i,0) + "|" + GetGadgetItemText(7,i,1) + "|" + GetGadgetItemText(7,i,2)
    If eintrag <> GetGadgetItemText(7,i,0) ;ist ein Nachname vorhanden?
     WriteStringN(0,eintrag)
    EndIf
   Next i
   CloseFile(0)
   ; Variablen aktualisieren
    Speichern = 0
    Neu = 0
    ; Titel und Status aktualisieren
    Titel = "Telefonbuch - " + Datei
    SetWindowTitle(1, Titel)
    StatusBarText(#StatusBar, 0, "Datei wurde gespeichert")
  Else
    MessageRequester("Fehler", "Datei konnte nicht gespeichert werden", #MB_ICONSTOP)
  ;CloseFile(0)
  EndIf
 ;EndIf

EndProcedure



;#################################################################

Procedure Datei_Speichern()

;{ Procedure für Speichern
;
;}
 
  Protected eintrag.s
   ; Bei neuer Datei Speichern als aufrufen
  If Neu
    Datei_Speichern_unter()
    ProcedureReturn 0
  EndIf
 
 
  ; Datei speichern
  If CreateFile(0, Datei)
   eintraganz.l = CountGadgetItems(7)
   For i = 0 To eintraganz-1
    eintrag.s = GetGadgetItemText(7,i,0) + "|" + GetGadgetItemText(7,i,1) + "|" + GetGadgetItemText(7,i,2)
    If eintrag <> GetGadgetItemText(7,i,0) ;ist ein Nachname vorhanden?
     WriteStringN(0,eintrag)
    EndIf
   Next i
   CloseFile(0)

    ;Variablen aktualisieren
    Speichern = 0
    Neu = 0
    ; Titel und Status aktuallisieren
    Titel = "Telefonbuch - " + Datei
    SetWindowTitle(1, Titel)
    StatusBarText(#StatusBar, 0, "Datei wurde gespeichert")
  Else
    MessageRequester("Fehler", "Datei konnte nicht gespeichert werden", #MB_ICONSTOP)
  EndIf
   
EndProcedure


;#################################################################

Procedure Datei_Oeffnen()

;{ Procedure für Datei öffnen
;
;}

  Protected temp.s
 
  ; Bei änderung Speichern aufrufen
  If Speichern
    r1 = MessageRequester("Frage", "Änderung speichern?", #PB_MessageRequester_YesNoCancel | #MB_ICONQUESTION)
    If r1 = #PB_MessageRequester_Yes
      Datei_Speichern()
    EndIf
  EndIf
  If r1 = #PB_MessageRequester_Cancel
    ProcedureReturn 0
  EndIf
  ; Dateiname erfragen
  temp = OpenFileRequester("Datei öffnen", Datei, "Telefonbuch (*.tel)|*.tel|Alle Dateien (*.*)|*.*", 0)
  If temp = ""
    ProcedureReturn 0
  EndIf
  ; Datei öffnen
   ClearGadgetItemList(7)
  Datei = temp
   ;--- Telefonbuch-Daten aus Datei einlesen
 If OpenFile(0,Datei)
      While Eof(0) = 0
        Zeile$ = Trim(ReadString(0))
         If Zeile$<>"" 
            For FeldZaehler = 0 To CountString(Zeile$, "|")
                NeueZeile$=Trim(StringField(Zeile$, FeldZaehler, "|"))
                If ErsteSpalte=0
                AddGadgetItem(7,-1,NeueZeile$)
                ErsteSpalte=1
                Else
                SetGadgetItemText(7,azeile,NeueZeile$,FeldZaehler-1)
                EndIf     
            Next
        azeile=azeile+1
        ErsteSpalte=0
        EndIf
      Wend
    CloseFile(0)
 

    temp = ""
   
    ; Variablen aktualisieren
    Speichern = 0
    Neu = 0
    ; Titel und Status aktuallisieren
    Titel = "Telefonbuch - " + Datei
    SetWindowTitle(1, Titel)
    StatusBarText(#StatusBar, 0, "Datei wurde geöffnet")

  Else
    MessageRequester("Fehler", "Datei konnte nicht geöffnet werden", #MB_ICONSTOP)
  EndIf
 
EndProcedure

;##########################################################################

Procedure Datei_Oeffnen_sofort(temp.s)

;{ Procedure für Datei öffnen bei Parameterübergabe
;
;}


  Datei = temp
   ;--- Telefonbuch-Daten aus Datei einlesen
 If OpenFile(0,Datei)
      While Eof(0) = 0
        Zeile$ = ReadString(0)
         If Zeile$<>""        
            For FeldZaehler = 0 To CountString(Zeile$, "|")
                NeueZeile$=Trim(StringField(Zeile$, FeldZaehler, "|"))
                If ErsteSpalte=0
                AddGadgetItem(7,-1,NeueZeile$)
                ErsteSpalte=1
                Else
                SetGadgetItemText(7,azeile,NeueZeile$,FeldZaehler-1)
                EndIf     
            Next
        azeile=azeile+1
        ErsteSpalte=0
        EndIf
      Wend
    CloseFile(0)
    temp = ""
    ; Variablen aktuallisieren
    Speichern = 0
    Neu = 0
    ; Titel und Status aktuallisieren
    Titel = "Telefonbuch - " + Datei
    SetWindowTitle(1, Titel)
    StatusBarText(#StatusBar, 0, "Geöffnet")

  Else
    MessageRequester("Information","Konnte Datei nicht öffnen!")
    End
  EndIf


 
EndProcedure

;###################################################################################

Procedure Datei_Neu()

;{ Procedure für Neu
;
;}

  ; Bei Änderung Speichern aufrufen
  If Speichern
    r1 = MessageRequester("Frage", "Änderung speichern?", #PB_MessageRequester_YesNoCancel | #MB_ICONQUESTION)
    If r1 = #PB_MessageRequester_Yes
      Datei_Speichern()
    EndIf
  EndIf
  If r1 = #PB_MessageRequester_Cancel
    ProcedureReturn 0
  EndIf
  ; Editorfeld löschen
  ClearGadgetItemList(7)
  ; Variablen aktuallisieren
  Speichern = 0
  Neu = 1
  Datei = "neu.tel"
  ; Titel und Status aktuallisieren
  Titel = "Telefonbuch - " + Datei
  SetWindowTitle(1, Titel)
  StatusBarText(#StatusBar, 0, "Neu")
EndProcedure

;############################################################################


Procedure Datei_Drucken()

Protected Zeichenhoehe.l, z.l, rand.l, text.s, textz.s, Font1.l, Zeilenabstand.d
  Protected drreihe.l, drspalte.l, drucker.s, eintraganz.l, textgroesse.d,k.l
  k=1
  Zeichenhoehe=75
  textgroesse=0.6
  Zeilenabstand=Zeichenhoehe*textgroesse
 
  z=50
  rand=200
  textz.s=""
  text.s=""
  eintraganz.l = CountGadgetItems(7)
  ;Font1 = LoadFont(#PB_Any, "Courier New", 12, #PB_Font_StrikeOut)
  If PrintRequester()
   
   
    If StartPrinting("Job")
     
      LoadFont(0, "Courier New",Zeichenhoehe)
      LoadFont(1, "Courier New",Zeichenhoehe,#PB_Font_StrikeOut  )
     
      If StartDrawing(PrinterOutput())
        DrawingFont(FontID(0))
       
        DrawText(xcm(rand),ycm(Zeichenhoehe)," Telefonbucheinträge ")
       
       
        Zeichenhoehe=Zeichenhoehe+Zeilenabstand+Zeilenabstand
        k=k+1
        DrawText(xcm(rand),ycm(Zeichenhoehe),"Nachname            Vorname             Telefonnummer")
        Zeichenhoehe=Zeichenhoehe+Zeilenabstand
        k=k+1
        DrawingFont(FontID(1))
        DrawText(xcm(rand),ycm(Zeichenhoehe),"                                                       ")
        DrawingFont(FontID(0))
        Zeichenhoehe=Zeichenhoehe+Zeilenabstand
        k=k+1
        For drreihe=0 To eintraganz
          For drspalte= 0 To 2
            textz=GetGadgetItemText(7,drreihe,drspalte)
            If drspalte=0
              textz=LSet(textz,20)
            ElseIf drspalte=1
              textz=LSet(textz,20)
            ElseIf drspalte=2
              textz=LSet(textz,15)
            EndIf
            text=text+textz
          Next drspalte
          DrawText(xcm(rand),ycm(Zeichenhoehe),text)
          Zeichenhoehe=Zeichenhoehe+Zeilenabstand
          k=k+1
          If k=63
            NewPrinterPage()
            k=1
            Zeichenhoehe=75
            Zeilenabstand=Zeichenhoehe*textgroesse
          EndIf
          text=""
          textz=""
        Next drreihe
        StopDrawing()
       
      EndIf
     
      StopPrinting()
      EndIf
    EndIf
 
EndProcedure

Procedure Datei_Druckvorschau()

Protected Zeichenhoehe.l, z.l, rand.l, text.s, textz.s, Font1.l, Zeilenabstand.d
  Protected drreihe.l, drspalte.l, drucker.s, eintraganz.l, textgroesse.d,k.l
  k=1
  Zeichenhoehe=75
  textgroesse=0.6
  Zeilenabstand=Zeichenhoehe*textgroesse
 
  z=50
  rand=10
  textz.s=""
  text.s=""
  
   If OpenWindow(100, 200, 200, 502, 600, "Druckvorschau", #PB_Window_SystemMenu)
  CreateGadgetList(WindowID(100))
  EditorGadget(101, 35, 5, 430, 545)
  ButtonGadget(102, 210, 560, 100, 30, "Zurück")
  
  eintraganz.l = CountGadgetItems(7)
 
      LoadFont(0, "Courier New",Zeichenhoehe)
        Zeichenhoehe=Zeichenhoehe+Zeilenabstand+Zeilenabstand
        k=k+1
        AddGadgetItem(101,-1,Space(rand)+"Nachname            Vorname             Telefonnummer")
        Zeichenhoehe=Zeichenhoehe+Zeilenabstand
        k=k+1
        For drreihe=0 To eintraganz
          For drspalte= 0 To 2
            textz=GetGadgetItemText(7,drreihe,drspalte)
            If drspalte=0
              textz=LSet(textz,20)
            ElseIf drspalte=1
              textz=LSet(textz,20)
            ElseIf drspalte=2
              textz=LSet(textz,15)
            EndIf
            text=text+textz
          Next drspalte
          AddGadgetItem(101,-1,Space(rand)+text)
        text=""
        textz=""
      Next drreihe
    EndIf
 
EndProcedure

;######################################################################


Procedure ProgrammEnde()

;{ Procedure bei Programm Ende
;
;}
 
  ; Bei änderung Speichern aufrufen
  If Speichern
    r1 = MessageRequester("Frage", "Änderung speichern?", #PB_MessageRequester_YesNoCancel | #MB_ICONQUESTION)
    If r1 = #PB_MessageRequester_Yes
      Datei_Speichern()
    EndIf
  EndIf
  If r1 <> #PB_MessageRequester_Cancel
    Exit = 1
  EndIf
   
EndProcedure

;---Hauptprogramm#####################################################




Datei = "unbekannt.tel"
Titel = "Telefonbuch - " + Datei

If OpenWindow(1,400,50,350,650,Titel, #PB_Window_SystemMenu|#PB_Window_MinimizeGadget)
 
;--- Menü
 
   If CreateMenu(1, WindowID(1))
    MenuTitle("&Datei")
      MenuItem(#Menu_Neu, "&Neu" + #TAB$+ "Strg+N")
      MenuItem(#Menu_Oeffnen, "&Öffnen" + #TAB$+ "Strg+O")
      MenuItem(#Menu_Speichern, "&Speichern" + #TAB$+ "Strg+S")
      MenuItem(#Menu_Speichern_unter, "&Speichern unter")
      MenuItem(#Menu_Drucken, "&Drucken" + #TAB$+ "Strg+P")
      MenuBar()
      MenuItem(#Menu_Beenden, "Be&enden")
    MenuTitle("Hilfe")
      MenuItem(#Menu_Ueber, "&Über")
   
   
;--- Tastenkürzel hinzufügen für Neu, Öffnen und Speichern
  AddKeyboardShortcut(1, #PB_Shortcut_Control | #PB_Shortcut_N, #Menu_Neu)
  AddKeyboardShortcut(1, #PB_Shortcut_Control | #PB_Shortcut_O, #Menu_Oeffnen)
  AddKeyboardShortcut(1, #PB_Shortcut_Control | #PB_Shortcut_S, #Menu_Speichern)
  AddKeyboardShortcut(1, #PB_Shortcut_Control | #PB_Shortcut_P, #Menu_Drucken)

 
  EndIf
  ;--- Toolbar erzeugen
  If CreateToolBar(#ToolBar, WindowID(1))
    ToolBarStandardButton(#Menu_Neu, #PB_ToolBarIcon_New)
    ToolBarStandardButton(#Menu_Oeffnen, #PB_ToolBarIcon_Open)
    ToolBarStandardButton(#Menu_Speichern, #PB_ToolBarIcon_Save)
    ToolBarStandardButton(#Menu_Drucken, #PB_ToolBarIcon_Print)
    ToolBarStandardButton(#Menu_Vorschau, #PB_ToolBarIcon_New)
    ToolBarToolTip(#ToolBar, #Menu_Neu, "Neues Telefonbuch")
    ToolBarToolTip(#ToolBar, #Menu_Oeffnen, "Telefonbuch Öffnen")
    ToolBarToolTip(#ToolBar, #Menu_Speichern, "Telefonbuch Speichern")
    ToolBarToolTip(#ToolBar, #Menu_Drucken, "Telefonbuch Drucken")
    ToolBarToolTip(#ToolBar, #Menu_Vorschau, "Druck-Vorschau")
 
 
  EndIf
 
 
 ;--- Gadgets
 If CreateGadgetList(WindowID(1))
  TextGadget(1,5,40,100,20,"Nachname:")
  TextGadget(2,5,70,100,20,"Vorname:")
  TextGadget(3,5,100,100,20,"Tel.:")
  StringGadget(4,110,40,230,20,"")
  StringGadget(5,110,70,230,20,"")
  StringGadget(6,110,100,230,20,"")
  ListIconGadget(7, 10, 140, 330, 350, "Nachname", 110, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines)
    AddGadgetColumn(7, 1, "Vorname", 110)
    AddGadgetColumn(7, 2, "Telefonnummer", 106)
  ButtonGadget(8,10,500,100,25,"Eintragen")
  ButtonGadget(9,125,500,100,25,"Löschen")
  ButtonGadget(10,240,500,100,25,"Beenden")
 EndIf


  ;--- Statusbar erzeugen
  CreateStatusBar(#StatusBar, WindowID(1))
 

 ;--- Telefonbuch-Daten aus Datei einlesen
 If OpenFile(0,Datei)
      While Eof(0) = 0
        Zeile$ = ReadString(0)
        If Zeile$<>""     
            For FeldZaehler = 1 To CountString(Zeile$, "|") + 1
                NeueZeile$=Trim(StringField(Zeile$, FeldZaehler, "|"))
                If ErsteSpalte=0
                AddGadgetItem(7,-1,NeueZeile$)
                ErsteSpalte=1
                Else
                SetGadgetItemText(7,azeile,NeueZeile$,FeldZaehler-1)
                EndIf     
            Next
        azeile=azeile+1
        ErsteSpalte=0
      EndIf
      Wend
    CloseFile(0)
  Else
    MessageRequester("Information","Konnte Datei nicht öffnen!")
    End
  EndIf



 


 ;--- Hauptschleife
 Repeat
 
  event.l = WaitWindowEvent()
  gadget  = EventGadget()
  menu    = EventMenu()
 
Select event

 Case #PB_Event_Menu
   Select menu
     Case #Menu_Neu
        Datei_Neu()
        SetActiveGadget(7)   
     Case #Menu_Oeffnen
        Datei_Oeffnen()
        SetActiveGadget(7)
     Case #Menu_Speichern
        Datei_Speichern()
        SetActiveGadget(7)
        StatusBarText(#StatusBar, 0, "Datei wurde gespeichert")
     Case #Menu_Speichern_unter
        Datei_Speichern_unter()
        SetActiveGadget(7)
        StatusBarText(#StatusBar, 0, "Datei wurde gespeichert")
     Case  #Menu_Drucken
        Datei_Drucken()
        SetActiveGadget(7)
        StatusBarText(#StatusBar, 0, "Datei wurde gedruckt")
     Case  #Menu_Vorschau
        Datei_Druckvorschau()
     Case #Menu_Beenden
       ProgrammEnde()
     Case #Menu_Ueber
       MessageRequester("Info", #ABOUT)
   EndSelect     
   
   
 Case #PB_Event_Gadget
   Select gadget
      Case 102
      CloseWindow(100)
     Case 8 ;Eintragen-Button
      If GetGadgetText(4); <> "" And GetGadgetText(5) <> "" And GetGadgetText(6) <> ""
        AddGadgetItem(7,-1,GetGadgetText(4)+Chr(10)+GetGadgetText(5)+Chr(10)+GetGadgetText(6)+Chr(10))
        StatusBarText(#StatusBar, 0, "neuer Datensatz wurde eingetragen")
        SetGadgetText(4,"")
        SetGadgetText(5,"")
        SetGadgetText(6,"")
      Else
       MessageRequester("Fehler","Bitte alle Felder ausfüllen!",0)
      EndIf
     Case 9 ;Löschen-Button
      gadgetstate.w = GetGadgetState(7)
      If gadgetstate.w <> -1
        r1 = MessageRequester("Frage", "Soll der Datensatz gelöscht werden?", #PB_MessageRequester_YesNo | #MB_ICONQUESTION)
          If r1 = #PB_MessageRequester_No
            StatusBarText(#StatusBar, 0, "Löschen eines Datensatzes wurde abegebrochen")
          EndIf
       If r1 = #PB_MessageRequester_Yes
        RemoveGadgetItem(7,gadgetstate.w)
        StatusBarText(#StatusBar, 0, "Datensatz wurde gelöscht")
       EndIf
       
       Else
          MessageRequester("Fehler","Bitte einen Datensatz zum Löschen auswählen!",0)
       EndIf
     Case 10 ; Beenden-Button
      ProgrammEnde()
   EndSelect
     
      ;--? Das Schließgadget vom Fenster wurde gedrückt
      Case #PB_Event_CloseWindow
      ProgrammEnde()
EndSelect

Until Exit
 
EndIf
End 

Verfasst: 08.05.2007 16:27
von 10tacle
Vielen Dank erstmal, dass du dir die Zeit nimmst, mir zu helfen :allright:
Find ich echt richtig spitze!
Werds heut abend mal ausprobieren und geb morgen mal bescheid...

Mfg 10tacle