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