Address Book Exemple
Posted: Sat Aug 27, 2005 10:40 pm
Hello everyone, I have placed a tutorial on the French Forum.
The following code are the english version. Be careful with files names.
And Have fun !!
Regards
Guimauve
Save this one : Address Book.pb
This one : Address Book Structure.pb
This one : Mother Structure.pb
And this one : Constants.pb
The following code are the english version. Be careful with files names.
And Have fun !!
Regards
Guimauve
Save this one : Address Book.pb
Code: Select all
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : Address Book
; File : Main Source
; Version : 0.0.0
; Programmation : In progress
; Programmed by : Guimauve
; Date : 27-08-2005
; Last update : 27-08-2005
; Coded for PureBasic V3.94
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; The Delete Contact are not plented yet. This
; source code it's just an exemple. You are free
; to edit, modify or distribute.
;
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
IncludeFile "Address Book Structure.pb"
IncludeFile "Mother Structure.pb"
IncludeFile "Constants.pb"
IncludeFile "Procedures.pb"
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Opening Main window
AddressBookWin()
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; We load the address book from HardDrive
LoadAddressBook(ProgParam)
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Display the first conctact + Miscallineous setting
FirstPlugging()
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Window event loop
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_EventGadget
Select EventGadgetID()
Case #ComboBox_FirstNameList
SelectContact(ProgParam)
Case #Btn_Previous
ScrollContact(ProgParam, -1)
Case #Btn_Next
ScrollContact(ProgParam, 1)
Case #Btn_New
EditContactWin(ProgParam, TextGUI(#TxtGUI_BtnNew),0)
Case #Btn_Modify
EditContactWin(ProgParam, TextGUI(#TxtGUI_BtnModify),1)
EndSelect
; Case #PB_EventMenu ; We don't have Menu for the moment
; Select EventMenuID()
; EndSelect
EndSelect
Until EventID = #PB_EventCloseWindow
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Before we close the program we automatically
; save the address book on hard drive to make
; sure we always have an up to date address book.
SaveAddressBook(ProgParam)
End
Code: Select all
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; AUTOMATICALLY GENERATED CODE, DO NOT MODIFY
; UNLESS YOU REALLY, REALLY, MEAN IT !!!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Code generated by : Data Editor
; Project name : Address Book
; File : Address Book Structure
; File Version : 1.0.0
; Programmation : OK
; Programmed by : Guimauve
; Date : 27-08-2005
; Last Update : 27-08-2005
; Coded for PureBasic V3.94
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Read & Write Binary String <<<<<
Procedure WriteBinaryString(String.s)
Length.l = Len(String)
WriteLong(Length)
WriteData(String, Length)
EndProcedure
Procedure.s ReadBinaryString()
Length.l = ReadLong()
String.s = Space(Length)
ReadData(String, Length)
ProcedureReturn String
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Structure declaration >>>>>
Structure Address
Town.s
Number.s
Street.s
PostalCode.s
EndStructure
; <<<<<<<<<<<<<<<<<<<<
; <<<<< Mutators >>>>>
Procedure SetAddressTown(*ObjectA.Address, Town.s)
*ObjectA\Town = Town
EndProcedure
Procedure SetAddressNumber(*ObjectA.Address, Number.s)
*ObjectA\Number = Number
EndProcedure
Procedure SetAddressStreet(*ObjectA.Address, Street.s)
*ObjectA\Street = Street
EndProcedure
Procedure SetAddressPostalCode(*ObjectA.Address, PostalCode.s)
*ObjectA\PostalCode = PostalCode
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Observators >>>>>
Procedure.s GetAddressTown(*ObjectA.Address)
ProcedureReturn *ObjectA\Town
EndProcedure
Procedure.s GetAddressNumber(*ObjectA.Address)
ProcedureReturn *ObjectA\Number
EndProcedure
Procedure.s GetAddressStreet(*ObjectA.Address)
ProcedureReturn *ObjectA\Street
EndProcedure
Procedure.s GetAddressPostalCode(*ObjectA.Address)
ProcedureReturn *ObjectA\PostalCode
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Update operator >>>>>
Procedure UpdateAddress(*ObjectA.Address, Town.s, Number.s, Street.s, PostalCode.s)
SetAddressTown(*ObjectA, Town)
SetAddressNumber(*ObjectA, Number)
SetAddressStreet(*ObjectA, Street)
SetAddressPostalCode(*ObjectA, PostalCode)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Equal operator >>>>>
Procedure EqualAddress(*ObjectA.Address, *ObjectB.Address)
SetAddressTown(*ObjectA, GetAddressTown(*ObjectB))
SetAddressNumber(*ObjectA, GetAddressNumber(*ObjectB))
SetAddressStreet(*ObjectA, GetAddressStreet(*ObjectB))
SetAddressPostalCode(*ObjectA, GetAddressPostalCode(*ObjectB))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Read Binary file >>>>>
Procedure ReadAddress(*ObjectA.Address)
SetAddressTown(*ObjectA, ReadBinaryString())
SetAddressNumber(*ObjectA, ReadBinaryString())
SetAddressStreet(*ObjectA, ReadBinaryString())
SetAddressPostalCode(*ObjectA, ReadBinaryString())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Write Binary file >>>>>
Procedure WriteAddress(*ObjectA.Address)
WriteBinaryString(GetAddressTown(*ObjectA))
WriteBinaryString(GetAddressNumber(*ObjectA))
WriteBinaryString(GetAddressStreet(*ObjectA))
WriteBinaryString(GetAddressPostalCode(*ObjectA))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Structure declaration >>>>>
Structure AddressBook
LastName.s
FirstName.s
Address.Address
Email.s
Phone01.s
Phone02.s
Comments.s
EndStructure
; <<<<<<<<<<<<<<<<<<<<
; <<<<< Mutators >>>>>
Procedure SetAddressBookLastName(*ObjectA.AddressBook, LastName.s)
*ObjectA\LastName = LastName
EndProcedure
Procedure SetAddressBookFirstName(*ObjectA.AddressBook, FirstName.s)
*ObjectA\FirstName = FirstName
EndProcedure
Procedure SetAddressBookAddress(*ObjectA.AddressBook, *Address.Address)
EqualAddress(*ObjectA\Address, *Address)
EndProcedure
Procedure SetAddressBookEmail(*ObjectA.AddressBook, Email.s)
*ObjectA\Email = Email
EndProcedure
Procedure SetAddressBookPhone01(*ObjectA.AddressBook, Phone01.s)
*ObjectA\Phone01 = Phone01
EndProcedure
Procedure SetAddressBookPhone02(*ObjectA.AddressBook, Phone02.s)
*ObjectA\Phone02 = Phone02
EndProcedure
Procedure SetAddressBookComments(*ObjectA.AddressBook, Comments.s)
*ObjectA\Comments = Comments
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Observators >>>>>
Procedure.s GetAddressBookLastName(*ObjectA.AddressBook)
ProcedureReturn *ObjectA\LastName
EndProcedure
Procedure.s GetAddressBookFirstName(*ObjectA.AddressBook)
ProcedureReturn *ObjectA\FirstName
EndProcedure
Procedure GetAddressBookAddress(*ObjectA.AddressBook)
ProcedureReturn *ObjectA\Address
EndProcedure
Procedure.s GetAddressBookEmail(*ObjectA.AddressBook)
ProcedureReturn *ObjectA\Email
EndProcedure
Procedure.s GetAddressBookPhone01(*ObjectA.AddressBook)
ProcedureReturn *ObjectA\Phone01
EndProcedure
Procedure.s GetAddressBookPhone02(*ObjectA.AddressBook)
ProcedureReturn *ObjectA\Phone02
EndProcedure
Procedure.s GetAddressBookComments(*ObjectA.AddressBook)
ProcedureReturn *ObjectA\Comments
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Update operator >>>>>
Procedure UpdateAddressBook(*ObjectA.AddressBook, LastName.s, FirstName.s, *Address.Address, Email.s, Phone01.s, Phone02.s, Comments.s)
SetAddressBookLastName(*ObjectA, LastName)
SetAddressBookFirstName(*ObjectA, FirstName)
SetAddressBookAddress(*ObjectA, *Address)
SetAddressBookEmail(*ObjectA, Email)
SetAddressBookPhone01(*ObjectA, Phone01)
SetAddressBookPhone02(*ObjectA, Phone02)
SetAddressBookComments(*ObjectA, Comments)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Read Binary file >>>>>
Procedure ReadAddressBook(*ObjectA.AddressBook)
SetAddressBookLastName(*ObjectA, ReadBinaryString())
SetAddressBookFirstName(*ObjectA, ReadBinaryString())
ReadAddress(Empty_Buffer_Address.Address)
SetAddressBookAddress(*ObjectA, Empty_Buffer_Address)
SetAddressBookEmail(*ObjectA, ReadBinaryString())
SetAddressBookPhone01(*ObjectA, ReadBinaryString())
SetAddressBookPhone02(*ObjectA, ReadBinaryString())
SetAddressBookComments(*ObjectA, ReadBinaryString())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Write Binary file >>>>>
Procedure WriteAddressBook(*ObjectA.AddressBook)
WriteBinaryString(GetAddressBookLastName(*ObjectA))
WriteBinaryString(GetAddressBookFirstName(*ObjectA))
WriteAddress(GetAddressBookAddress(*ObjectA))
WriteBinaryString(GetAddressBookEmail(*ObjectA))
WriteBinaryString(GetAddressBookPhone01(*ObjectA))
WriteBinaryString(GetAddressBookPhone02(*ObjectA))
WriteBinaryString(GetAddressBookComments(*ObjectA))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FirstName OffSET >>>>>
Procedure SortFirstName()
ProcedureReturn OffsetOf(AddressBook\FirstName)
EndProcedure
Code: Select all
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; AUTOMATICALLY GENERATED CODE, DO NOT MODIFY
; UNLESS YOU REALLY, REALLY, MEAN IT !!!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Code generated by : Data Editor
; Project name : Address book
; File : Mother Structure
; File Version : 1.0.0
; Programmation : Ok
; Programmed by : Guimauve
; Date : 27-08-2005
; Last Update : 27-08-2005
; Coded for PureBasic V3.94
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Structure declaration >>>>>
Structure ProgBook
NbContact.l
ContactID.l
FileName.s
EndStructure
; <<<<<<<<<<<<<<<<<<<<
; <<<<< Mutators >>>>>
Procedure SetProgBookNbContact(*ObjectA.ProgBook, NbContact.l)
*ObjectA\NbContact = NbContact
EndProcedure
Procedure SetProgBookContactID(*ObjectA.ProgBook, ContactID.l)
*ObjectA\ContactID = ContactID
EndProcedure
Procedure SetProgBookFileName(*ObjectA.ProgBook, FileName.s)
*ObjectA\FileName = FileName
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Observators >>>>>
Procedure.l GetProgBookNbContact(*ObjectA.ProgBook)
ProcedureReturn *ObjectA\NbContact
EndProcedure
Procedure.l GetProgBookContactID(*ObjectA.ProgBook)
ProcedureReturn *ObjectA\ContactID
EndProcedure
Procedure.s GetProgBookFileName(*ObjectA.ProgBook)
ProcedureReturn *ObjectA\FileName
EndProcedure
Code: Select all
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : Address book
; File : Contants, array, linked list, etc.
; File Version : 1.0.0
; Programmation : Ok
; Programmed by : Guimauve
; Date : 27-08-2005
; Last Update : 27-08-2005
; Coded for PureBasic V3.94
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Windows Constant
Enumeration
#Main_Win
#Edit_Win
EndEnumeration
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Window Style contants
#Main_Win_Style = #PB_Window_ScreenCentered | #PB_Window_SystemMenu
#Edit_Win_Style = #PB_Window_ScreenCentered | #PB_Window_SystemMenu
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Gadgets constants
Enumeration
#ComboBox_FirstNameList
#Btn_Previous
#Btn_Next
#Btn_Modify
#Btn_New
#Frame_Info
#Frame_Comments
#Text_LastName
#Text_PreLastName
#Text_Town
#Text_Number
#Text_Street
#Text_PostalCode
#Text_Email
#Text_HousePhone
#Text_WorkPhone
#String_LastName
#String_FirstName
#String_Town
#String_Number
#String_Street
#String_PostalCode
#String_Email
#String_HousePhone
#String_WorkPhone
#Editor_Comments
#Text_EDIT_LastName
#Text_EDIT_FirstName
#Text_EDIT_Town
#Text_EDIT_Number
#Text_EDIT_Street
#Text_EDIT_PostalCode
#Text_EDIT_Email
#Text_EDIT_HousePhone
#Text_EDIT_WorkPhone
#String_EDIT_LastName
#String_EDIT_FirstName
#String_EDIT_Town
#String_EDIT_Number
#String_EDIT_Street
#String_EDIT_PostalCode
#String_EDIT_Email
#String_EDIT_HousePhone
#String_EDIT_WorkPhone
#Editor_EDIT_Comments
#Btn_EDIT_OK
#Btn_EDIT_CANCEL
#GUIFont
EndEnumeration
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
If LoadFont(#GUIFont,"Arial",8,#PB_Font_Bold)
SetGadgetFont(#PB_Default, FontID())
EndIf
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Init program mother Structure
ProgParam.ProgBook
SetProgBookFileName(ProgParam, "My Address Book.dat")
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< TxtGUI Array Indexing Constants >>>>>
Enumeration
#TxtGUI_ProgrName
#TxtGUI_BtnPrevious
#TxtGUI_BtnNext
#TxtGUI_BtnModify
#TxtGUI_BtnNew
#TxtGUI_FrameInfo
#TxtGUI_Comments
#TxtGUI_LastName
#TxtGUI_FirstName
#TxtGUI_Town
#TxtGUI_Number
#TxtGUI_Street
#TxtGUI_PostalCode
#TxtGUI_Email
#TxtGUI_HousePhone
#TxtGUI_WorkPhone
#TxtGUI_EditOk
#TxtGUI_EditCancel
#TxtGUI_dimsize
EndEnumeration
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Declare TextGUI Array >>>>>
Dim TextGUI.s(#TxtGUI_dimsize - 1)
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Init TextGUI Array >>>>>
TextGUI(#TxtGUI_ProgrName) = "Address book"
TextGUI(#TxtGUI_BtnPrevious) = "Previous"
TextGUI(#TxtGUI_BtnNext) = "Next"
TextGUI(#TxtGUI_BtnModify) = "Modify"
TextGUI(#TxtGUI_BtnNew) = "New"
TextGUI(#TxtGUI_FrameInfo) = "Information about selected contact"
TextGUI(#TxtGUI_Comments) = "Comments"
TextGUI(#TxtGUI_LastName) = "Last name :"
TextGUI(#TxtGUI_FirstName) = "First name :"
TextGUI(#TxtGUI_Town) = "Town :"
TextGUI(#TxtGUI_Number) = "Number :"
TextGUI(#TxtGUI_Street) = "Street :"
TextGUI(#TxtGUI_PostalCode) = "Postal code:"
TextGUI(#TxtGUI_Email) = "Email :"
TextGUI(#TxtGUI_HousePhone) = "House phone number :"
TextGUI(#TxtGUI_WorkPhone) = "Work phone number :"
TextGUI(#TxtGUI_EditOk) = "Ok"
TextGUI(#TxtGUI_EditCancel) = "Cancel"
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Create AddressBook linked list
NewList MyAddressBook.AddressBook()
; <<<<<<<<<<<<<<<<
; END OF FILE
; <<<<<<<<<<<<<<<<