Page 1 of 2

Address Book Exemple

Posted: Sat Aug 27, 2005 10:40 pm
by Guimauve
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

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
This one : Address Book Structure.pb

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 
This one : Mother Structure.pb

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
And this one : Constants.pb

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
; <<<<<<<<<<<<<<<<

Posted: Sun Aug 28, 2005 12:00 am
by GeoTrail
You forgot Procedures.pb

Posted: Sun Aug 28, 2005 1:20 am
by Guimauve
Ooups

Sorry ! ! ! !

The Procedures.pb missing file

Code: Select all

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project Name : Address book
; File : Procedures
; Version : 1.0.1
; Programmation : OK
; Programmed by : Guimauve
; Date : 27-08-2005
; Last Update : 27-08-2005
; Coded for PureBasic V3.94
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Procedure.l Scrolling(Number.l, Minimum.l, Maximum.l, Increment.l)
  
  Number + Increment
  
  If Number > Maximum
    Number = Minimum
  EndIf
  
  If Number < Minimum
    Number = Maximum
  EndIf
  
  ProcedureReturn Number
  
EndProcedure

Procedure PlugAddressInGUI(*ObjectA.Address)
  
  ; We put the address informations in the main window
  SetGadgetText(#String_Town, GetAddressTown(*ObjectA))
  SetGadgetText(#String_Number, GetAddressNumber(*ObjectA))
  SetGadgetText(#String_Street, GetAddressStreet(*ObjectA))
  SetGadgetText(#String_PostalCode, GetAddressPostalCode(*ObjectA))
  
EndProcedure 

Procedure PlugContactInGUI(*ObjectA.AddressBook)
  
  ; We flush all information in the main window before
  For GadgetID = #String_LastName To #Editor_Comments
    SetGadgetText(GadgetID, "")
  Next 
  
  ; We put the Contact Informations in the main window
  SetGadgetText(#String_LastName, GetAddressBookLastName(*ObjectA))
  SetGadgetText(#String_FirstName, GetAddressBookFirstName(*ObjectA))
  
  PlugAddressInGUI(GetAddressBookAddress(*ObjectA))
  
  SetGadgetText(#String_Email, GetAddressBookEmail(*ObjectA))
  SetGadgetText(#String_HousePhone, GetAddressBookPhone01(*ObjectA))
  SetGadgetText(#String_WorkPhone, GetAddressBookPhone02(*ObjectA))
  
  SetGadgetText(#Editor_Comments, GetAddressBookComments(*ObjectA))
  
EndProcedure 

Procedure FirstPlugging()
  
  ; We sort the Address book by FirstName
  SortStructuredList(MyAddressBook(), 0, SortFirstName(), #PB_Sort_String)
 
  ; We clear ComboBox listing all contacts
  ClearGadgetItemList(#ComboBox_FirstNameList)
  
  ; We fill the combobox gadget with address book Contact FirstName
  ForEach MyAddressBook()
    
    AddGadgetItem(#ComboBox_FirstNameList, -1, GetAddressBookFirstName(@MyAddressBook()))
    
  Next 
  
  ; We show the first contact in the address book
  SelectElement(MyAddressBook(),0)
  PlugContactInGUI(@MyAddressBook())
  SetGadgetState(#ComboBox_FirstNameList,0)
  
EndProcedure 

Procedure CreateFakeAdressBook(*ObjectA.ProgBook)
  
  If FileSize(GetProgBookFileName(*ObjectA)) = -1
    
    ClearList(MyAddressBook()) ; ---> ? ? ? ? ? ? Not needed I think
    
    ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    ; It's just for creating a fake address book in case we don't have one.
    
    AddElement(MyAddressBook())
    UpdateAddress(Buffer.Address,"Texas","3215","55th HighWay", "J0W 3P3")
    UpdateAddressBook(@MyAddressBook(),"Runner","Road", Buffer,"roadrunner@superfast.com","123-4587","987-6543","Personnage de dessin animé. Il court très très vite.")
    
    
    AddElement(MyAddressBook())
    UpdateAddress(Buffer,"Texas","3225","55th HighWay", "J0W 3P7")
    UpdateAddressBook(@MyAddressBook(),"Coyote","Vil",Buffer,"vilcoyote@superfast.com","569-3387","987-4443","Personnage de dessin animé. Il tente d'attaper Road Runner !")
    
    SetProgBookNbContact(*ObjectA,1)
    
  EndIf 
  
EndProcedure 

Procedure LoadAddressBook(*ObjectA.ProgBook)
  
  If ReadFile(0, GetProgBookFileName(*ObjectA)) <> 0
    
    Repeat
      
      AddElement(MyAddressBook())
      ReadAddressBook(@MyAddressBook())
      
    Until Eof(0)
    
    SetProgBookNbContact(*ObjectA, CountList(MyAddressBook()) - 1)
    
    CloseFile(0)
    
  Else 
    
    CreateFakeAdressBook(*ObjectA)
    
  EndIf 
  
EndProcedure 

Procedure SaveAddressBook(*ObjectA.ProgBook)
  
  If CreateFile(0, GetProgBookFileName(*ObjectA))
    
    ForEach MyAddressBook()
      
      WriteAddressBook(@MyAddressBook())
      
    Next
    
    CloseFile(0)
    
  EndIf 
  
EndProcedure 

Procedure SelectContact(*ObjectA.ProgBook)
  
  Index = GetGadgetState(#ComboBox_FirstNameList)
  SelectElement(MyAddressBook(),Index)
  PlugContactInGUI(@MyAddressBook())
  SetProgBookContactID(*ObjectA, Index)
  
EndProcedure 

Procedure ScrollContact(*ObjectA.ProgBook, Direction.b)
   
  Index = Scrolling(GetProgBookContactID(*ObjectA), 0, GetProgBookNbContact(*ObjectA), Direction)
  SetGadgetState(#ComboBox_FirstNameList,Index)
  SelectElement(MyAddressBook(),Index)
  PlugContactInGUI(@MyAddressBook())
  SetProgBookContactID(*ObjectA, Index)
  
EndProcedure 

Procedure TransferInfo()
  
  GadgetIDSource = #String_LastName
  
  For GadgetID = #String_EDIT_LastName To #Editor_EDIT_Comments
    
    SetGadgetText(GadgetID,GetGadgetText(GadgetIDSource))
    
    GadgetIDSource+1
    
  Next 
  
EndProcedure 

Procedure EditContact(*ObjectA.ProgBook,Mode.b)
  
  Town.s = GetGadgetText(#String_EDIT_Town)
  Number.s = GetGadgetText(#String_EDIT_Number)
  Street.s = GetGadgetText(#String_EDIT_Street)
  PostalCode.s = GetGadgetText(#String_EDIT_PostalCode)
  
  UpdateAddress(Buffer.Address, Town, Number, Street, PostalCode)
  
  LastName.s = GetGadgetText(#String_EDIT_LastName)
  FirstName.s = GetGadgetText(#String_EDIT_FirstName)
  Email.s = GetGadgetText(#String_EDIT_Email)
  Phone01.s = GetGadgetText(#String_EDIT_HousePhone)
  Phone02.s = GetGadgetText(#String_EDIT_WorkPhone)
  Comments.s = GetGadgetText(#Editor_EDIT_Comments)

  If Mode = 1
    
    SelectElement(MyAddressBook(), GetProgBookContactID(*ObjectA))

  Else 
    
    AddElement(MyAddressBook())
    SetProgBookNbContact(*ObjectA,GetProgBookNbContact(*ObjectA)+1)

  EndIf 
  
  UpdateAddressBook(@MyAddressBook(), LastName, FirstName, Buffer, Email, Phone01, Phone02, Comments)
  
  FirstPlugging()
  
EndProcedure 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Procedure ButtonGadgetGroup(FirstButtonID, LastButtonID, X, Y, Width, Height, Gap_Between_Gadget)
  
  For GadgetID = FirstButtonID To LastButtonID
    ButtonGadget(GadgetID, X, Y, Width, Height, "")
    X + Width + Gap_Between_Gadget
  Next
  
EndProcedure

Procedure TextGadgetGroup(FirstTextID, LastTextID, X, Y, Width, Height, Gap_Between_Gadget)
  
  For GadgetID = FirstTextID To LastTextID
    TextGadget(GadgetID, X, Y, Width, Height, "",#PB_Text_Center)
    Y + Height + Gap_Between_Gadget
  Next
  
EndProcedure

Procedure StringGadgetGroup(FirstStringID, LastStringID, X, Y, Width, Height, Gap_Between_Gadget)
  
  For GadgetID = FirstStringID To LastStringID
    StringGadget(GadgetID, X, Y, Width, Height, "",#PB_String_ReadOnly)
    Y + Height + Gap_Between_Gadget
  Next
  
EndProcedure

Procedure StringGadgetGroupSTD(FirstStringID, LastStringID, X, Y, Width, Height, Gap_Between_Gadget)
  
  For GadgetID = FirstStringID To LastStringID
    StringGadget(GadgetID, X, Y, Width, Height, "")
    Y + Height + Gap_Between_Gadget
  Next
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Procedure AddressBookWin()
  
  If OpenWindow(#Main_Win, 0, 0, 600, 480, #Main_Win_Style, TextGUI(#TxtGUI_ProgrName)) <> 0
    
    If CreateGadgetList(WindowID(#Main_Win)) <> 0
      
      ComboBoxGadget(#ComboBox_FirstNameList,5,5,280,150)
      ButtonGadgetGroup(#Btn_Previous, #Btn_New, 295, 5, 70, 25, 5)
      
      Frame3DGadget(#Frame_Info,5,35,590,250,"")
      TextGadgetGroup(#Text_LastName,#Text_WorkPhone, 10, 55, 130, 20, 5)
      StringGadgetGroup(#String_LastName,#String_WorkPhone, 145, 55, 440, 20, 5)
      
      Frame3DGadget(#Frame_Comments,5,290,590,185,"")
      
      EditorGadget(#Editor_Comments,10,310,580,160)
      SendMessage_(GadgetID(#Editor_Comments), #EM_SETOPTIONS, #ECOOP_OR, #ECO_READONLY)
      SendMessage_(GadgetID(#Editor_Comments), #EM_SETBKGNDCOLOR, 0, GetSysColor_(#COLOR_3DFACE))
      
    EndIf
    
  EndIf
  
  TxtGUI_Index = #TxtGUI_BtnPrevious
  
  For GadgetID = #Btn_Previous To #Text_WorkPhone
    
    SetGadgetText(GadgetID,TextGUI(TxtGUI_Index))
    TxtGUI_Index + 1
    
  Next 
  
EndProcedure 

Procedure EditContactWin(*ObjectA.ProgBook, Title.s, Mode.b)
  
  HideWindow(#Main_Win,1)
  
  If OpenWindow(#Edit_Win, 0, 0, 500, 480, #Edit_Win_Style, Title)
    
    If CreateGadgetList(WindowID(#Edit_Win))
      
      TextGadgetGroup(#Text_EDIT_LastName,#Text_EDIT_WorkPhone, 5, 5, 130, 20, 5)
      StringGadgetGroupSTD(#String_EDIT_LastName,#String_EDIT_WorkPhone, 145, 5, 350, 20, 5)
      EditorGadget(#Editor_EDIT_Comments,5,GadgetY(#String_EDIT_WorkPhone)+30,490,200)
      
      ButtonGadgetGroup(#Btn_EDIT_OK, #Btn_EDIT_CANCEL, 275, 445, 100, 25, 5)
      SetGadgetText(#Btn_EDIT_OK,TextGUI(#TxtGUI_EditOk))
      SetGadgetText(#Btn_EDIT_CANCEL,TextGUI(#TxtGUI_EditCancel))
      
    EndIf
    
  EndIf
  
  TxtGUI_Index = #TxtGUI_LastName
  
  For GadgetID = #Text_EDIT_LastName To #Text_EDIT_WorkPhone
    
    SetGadgetText(GadgetID,TextGUI(TxtGUI_Index))
    TxtGUI_Index + 1
    
  Next 
  
  If Mode = 1
    TransferInfo()
  EndIf 
  
  Repeat
    
    EventID2 = WaitWindowEvent()
    
    If EventID2 = #PB_EventGadget
      
      Select EventGadgetID()                 
        
        Case #Btn_EDIT_OK
          EditContact(*ObjectA,Mode)
          EventID2 = #PB_EventCloseWindow
          
        Case #Btn_EDIT_CANCEL
          EventID2 = #PB_EventCloseWindow
          
      EndSelect
    EndIf
    
  Until EventID2 = #PB_EventCloseWindow
  
  HideWindow(#Main_Win,0)
  
  CloseWindow(#Edit_Win)
  
EndProcedure

Posted: Sun Aug 28, 2005 2:20 am
by rsts
Thanks for sharing this.
:)

Posted: Sun Aug 28, 2005 2:43 am
by GeoTrail
Thanks for the missing file.
Not bad work :)

Posted: Mon Aug 29, 2005 5:46 am
by netmaestro
Very fine piece of work, Guimauve!

Posted: Thu Oct 06, 2005 8:47 am
by Jan2004
I want to put the following piece of source code into procedure (to call from menu):


Procedure Tralala()

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

EndSelect

Until EventID = #PB_EventCloseWindow
SaveAddressBook(ProgParam)

EndProcedure

But when I call procedures from the menu:
AddressBookWin()
LoadAddressBook(ProgParam)
FirstPlugging()
Tralala()
Program does not work - says: "Pointer is null"

What to do ?

Jan

Posted: Thu Oct 06, 2005 5:25 pm
by Guimauve

Code: Select all

Procedure Tralala(*p.ProgBook)

; Window event loop

Repeat

EventID = WaitWindowEvent()

Select EventID

Case #PB_EventGadget

Select EventGadgetID()

Case #ComboBox_FirstNameList
SelectContact(*p)

Case #Btn_Previous
ScrollContact(*p, -1)

Case #Btn_Next
ScrollContact(*p, 1)

Case #Btn_New
EditContactWin(*p, TextGUI(#TxtGUI_BtnNew),0)

Case #Btn_Modify
EditContactWin(*p, TextGUI(#TxtGUI_BtnModify),1)

EndSelect

EndSelect

Until EventID = #PB_EventCloseWindow
SaveAddressBook(*p)

EndProcedure
And in your program when you call your procedure :

Code: Select all

Tralala(ProgParam)
and everything should be OK. Also make sure the ProgParam are filled with informations.

Regards

Guimauve

Posted: Fri Oct 07, 2005 6:39 am
by Jan2004
Thank you.

I have been working in the last hours on that case. I simply added declaration ProgParam.ProgBook inside Tralala procedure ... and it also is ok.

Posted: Fri Oct 07, 2005 2:10 pm
by Jan2004
Sorry, declaration ProgParam.ProgBook inside Tralala procedure is not correct. I added inside procedure SaveAdressBook - after line CloseFil (0):
ClearList(MyAddressBook())

Regards: Jan

Posted: Fri May 19, 2006 8:38 pm
by Guimauve
OK The PB V4.00 version is ready.

Save this file as : Address book.pb

Code: Select all

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : Address Book Exemple
; File : Main source
; Version : 1.5.0
; Programmation : OK - Complete
; Programmed by : Guimauve
; Date : 27-08-2005
; Last update : 31-03-2006
; Coded for PureBasic V4.00
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;
; This source code it's just an exemple. You are 
; free to edit, modify, use or distribute.
;
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

IncludeFile "Contact Structure.pb"
IncludeFile "Address book Structure.pb"
IncludeFile "Constants.pb"
IncludeFile "Procedures.pb"
IncludeFile "MainWindow and EventManager.pb"

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Opening AddressBook window
   
AddressBookWin()

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; AddressBook Event Mananger

AddressBookEventManager(AddressBook)

; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
Save this one as : Contact Structure.pb

Code: Select all

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; AUTOMATICALLY GENERATED CODE, DO NOT MODIFY
; UNLESS YOU REALLY, REALLY, REALLY, MEAN IT !
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Code generated by : Type Editor
; Project name : Address Book Exemple
; File : The file name
; File Version : 1.5.0
; Programmation : OK
; Programmed by : Guimauve
; Date : 27-08-2005
; Last Update : 31-03-2006
; Coded for PureBasic V4.00
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Structure definition >>>>>

Structure Contact
   
   LastName.s
   FirstName.s
   Town.s
   Number.s
   Street.s
   PostalCode.s
   Email.s
   Phone01.s
   Phone02.s
   Comments.s
   
EndStructure

; <<<<<<<<<<<<<<<<<<<<
; <<<<< Mutators >>>>>

Macro SetContactLastName(ContactA, P_LastName)

   ContactA\LastName = P_LastName

EndMacro

Macro SetContactFirstName(ContactA, P_FirstName)

   ContactA\FirstName = P_FirstName

EndMacro

Macro SetContactTown(ContactA, P_Town)

   ContactA\Town = P_Town

EndMacro

Macro SetContactNumber(ContactA, P_Number)

   ContactA\Number = P_Number

EndMacro

Macro SetContactStreet(ContactA, P_Street)

   ContactA\Street = P_Street

EndMacro

Macro SetContactPostalCode(ContactA, P_PostalCode)

   ContactA\PostalCode = P_PostalCode

EndMacro

Macro SetContactEmail(ContactA, P_Email)

   ContactA\Email = P_Email

EndMacro

Macro SetContactPhone01(ContactA, P_Phone01)

   ContactA\Phone01 = P_Phone01

EndMacro

Macro SetContactPhone02(ContactA, P_Phone02)

   ContactA\Phone02 = P_Phone02

EndMacro

Macro SetContactComments(ContactA, P_Comments)

   ContactA\Comments = P_Comments

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Observators >>>>>

Macro GetContactLastName(ContactA)

   ContactA\LastName

EndMacro

Macro GetContactFirstName(ContactA)

   ContactA\FirstName

EndMacro

Macro GetContactTown(ContactA)

   ContactA\Town

EndMacro

Macro GetContactNumber(ContactA)

   ContactA\Number

EndMacro

Macro GetContactStreet(ContactA)

   ContactA\Street

EndMacro

Macro GetContactPostalCode(ContactA)

   ContactA\PostalCode

EndMacro

Macro GetContactEmail(ContactA)

   ContactA\Email

EndMacro

Macro GetContactPhone01(ContactA)

   ContactA\Phone01

EndMacro

Macro GetContactPhone02(ContactA)

   ContactA\Phone02

EndMacro

Macro GetContactComments(ContactA)

   ContactA\Comments

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Simple Update >>>>>

Macro UpdateContact(ObjetA, P_LastName, P_FirstName, P_Town, P_Number, P_Street, P_PostalCode, P_Email, P_Phone01, P_Phone02, P_Comments)
   
   SetContactLastName(ObjetA, P_LastName)
   SetContactFirstName(ObjetA, P_FirstName)
   SetContactTown(ObjetA, P_Town)
   SetContactNumber(ObjetA, P_Number)
   SetContactStreet(ObjetA, P_Street)
   SetContactPostalCode(ObjetA, P_PostalCode)
   SetContactEmail(ObjetA, P_Email)
   SetContactPhone01(ObjetA, P_Phone01)
   SetContactPhone02(ObjetA, P_Phone02)
   SetContactComments(ObjetA, P_Comments)
   
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Copy operator >>>>>

Macro CopyContact(Source, Destination)
   
   CopyMemory(Source, Destination, SizeOf(Contact))
   
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Read & Write Binary String <<<<<

Procedure WriteBinaryString(FileID, String.s)

  length.l = Len(String)
  WriteLong(FileID, length)
  WriteData(FileID, @String, length)

EndProcedure 

Procedure.s ReadBinaryString(FileID)

  length.l = ReadLong(FileID)
  String.s = Space(length)
  ReadData(FileID, @String, length)

  ProcedureReturn String
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Read Binary file >>>>>

Procedure ReadContact(FileID.l, *ObjectA.Contact)
   
   SetContactLastName(*ObjectA, ReadBinaryString(FileID))
   SetContactFirstName(*ObjectA, ReadBinaryString(FileID))
   SetContactTown(*ObjectA, ReadBinaryString(FileID))
   SetContactNumber(*ObjectA, ReadBinaryString(FileID))
   SetContactStreet(*ObjectA, ReadBinaryString(FileID))
   SetContactPostalCode(*ObjectA, ReadBinaryString(FileID))
   SetContactEmail(*ObjectA, ReadBinaryString(FileID))
   SetContactPhone01(*ObjectA, ReadBinaryString(FileID))
   SetContactPhone02(*ObjectA, ReadBinaryString(FileID))
   SetContactComments(*ObjectA, ReadBinaryString(FileID))
   
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Write Binary file >>>>>

Procedure WriteContact(FileID.l, *ObjectA.Contact)
   
   WriteBinaryString(FileID, GetContactLastName(*ObjectA))
   WriteBinaryString(FileID, GetContactFirstName(*ObjectA))
   WriteBinaryString(FileID, GetContactTown(*ObjectA))
   WriteBinaryString(FileID, GetContactNumber(*ObjectA))
   WriteBinaryString(FileID, GetContactStreet(*ObjectA))
   WriteBinaryString(FileID, GetContactPostalCode(*ObjectA))
   WriteBinaryString(FileID, GetContactEmail(*ObjectA))
   WriteBinaryString(FileID, GetContactPhone01(*ObjectA))
   WriteBinaryString(FileID, GetContactPhone02(*ObjectA))
   WriteBinaryString(FileID, GetContactComments(*ObjectA))

EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Sort by field offset >>>>>

Macro SortContactLastName()

   OffsetOf(Contact\LastName)

EndMacro

Macro SortContactFirstName()

   OffsetOf(Contact\FirstName)

EndMacro

Macro SortContactTown()

   OffsetOf(Contact\Town)

EndMacro

Macro SortContactNumber()

   OffsetOf(Contact\Number)

EndMacro

Macro SortContactStreet()

   OffsetOf(Contact\Street)

EndMacro

Macro SortContactPostalCode()

   OffsetOf(Contact\PostalCode)

EndMacro

Macro SortContactEmail()

   OffsetOf(Contact\Email)

EndMacro

Macro SortContactPhone01()

   OffsetOf(Contact\Phone01)

EndMacro

Macro SortContactPhone02()

   OffsetOf(Contact\Phone02)

EndMacro

Macro SortContactComments()

   OffsetOf(Contact\Comments)

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code generated in : 234 ms <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Save this one as : Address book Structure.pb

Code: Select all

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; AUTOMATICALLY GENERATED CODE, DO NOT MODIFY
; UNLESS YOU REALLY, REALLY, REALLY, MEAN IT !
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Code generated by : Type Editor
; Project name : Address Book Exemple
; File : AddressBook Structure and methods
; File Version : 1.5.0
; Programmation : OK
; Programmed by : Guimauve
; Date : 27-08-2005
; Last Update : 31-03-2006
; Coded for PureBasic V4.00
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Structure definition >>>>>

Structure AddressBook
   
   ContactQTY.l
   ContactID.l
   FileName.s
   
EndStructure

; <<<<<<<<<<<<<<<<<<<<
; <<<<< Mutators >>>>>

Macro SetAddressBookContactQTY(ObjetA, Contact_QTY)
   
   ObjetA\ContactQTY = Contact_QTY
   
EndMacro

Macro SetAddressBookContactID(ObjetA, Contact_ID)
   
   ObjetA\ContactID = Contact_ID
   
EndMacro

Macro SetAddressBookFileName(ObjetA, File_Name)
   
   ObjetA\FileName = File_Name
   
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Observators >>>>>

Macro GetAddressBookContactQTY(ObjetA)
   
   ObjetA\ContactQTY
   
EndMacro

Macro GetAddressBookContactID(ObjetA)
   
   ObjetA\ContactID
   
EndMacro

Macro GetAddressBookFileName(ObjetA)
   
   ObjetA\FileName
   
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code generated in : 31 ms <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Save this one as : Constants.pb

Code: Select all

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : Address Book Exemple
; File : Contants, array, linked list, etc. 
; File Version : 1.5.0
; Programmation : OK
; Programmed by : Guimauve
; Date : 27-08-2005
; Last Update : 31-03-2006
; Coded for PureBasic V4.00
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; 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_Delete
   #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(#GUIFont))
   
EndIf

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Init program mother Structure
   
SetAddressBookFileName(AddressBook.AddressBook, "My Address Book.dat")
   
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< TxtGUI Array Indexing Constants >>>>>

Enumeration
   
   #TxtGUI_ProgrName
   #TxtGUI_BtnPrevious
   #TxtGUI_BtnNext
   #TxtGUI_BtnModify
   #TxtGUI_BtnDelete
   #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_WarningMessage00
   #TxtGUI_WarningMessage01
   
   #TxtGUI_dimsize
   
EndEnumeration

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Declare TextGUI Array >>>>>

Global 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_BtnDelete) = "Delete"
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) = "Door 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"
TextGUI(#TxtGUI_WarningMessage00) = "Warning ! The delete command can't be undone." 
TextGUI(#TxtGUI_WarningMessage01) = "Click YES If you wish to delete %NAME% from the Address book."

; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
Save this one as : Procedures.pb

Code: Select all

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project Name : Address Book Exemple
; File : Procedures
; Version : 1.5.0
; Programmation : OK
; Programmed by : Guimauve
; Date : 27-08-2005
; Last Update : 31-03-2006
; Coded for PureBasic V4.00
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Programmation - OK

Macro Scrolling(Number, Minimum, Maximum, Increment)
   
   Number + Increment
   
   If Number > Maximum
      
      Number = Minimum
   
   ElseIf Number < Minimum
      
      Number = Maximum
      
   EndIf

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Programmation - OK

Procedure PlugContactInGUI(*ObjectA.Contact)
   
   ; We flush all information in the main window before
   ; We put the Contact Informations in the main window
   
   For GadgetID = #String_LastName To #Editor_Comments
      SetGadgetText(GadgetID, "")
   Next 
   
   SetGadgetText(#String_LastName, GetContactLastName(*ObjectA))
   SetGadgetText(#String_FirstName, GetContactFirstName(*ObjectA))
   SetGadgetText(#String_Town, GetContactTown(*ObjectA))
   SetGadgetText(#String_Number, GetContactNumber(*ObjectA))
   SetGadgetText(#String_Street, GetContactStreet(*ObjectA))
   SetGadgetText(#String_PostalCode, GetContactPostalCode(*ObjectA))  
   SetGadgetText(#String_Email, GetContactEmail(*ObjectA))
   SetGadgetText(#String_HousePhone, GetContactPhone01(*ObjectA))
   SetGadgetText(#String_WorkPhone, GetContactPhone02(*ObjectA))
   SetGadgetText(#Editor_Comments, GetContactComments(*ObjectA))
   
EndProcedure 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Programmation - OK

Procedure FirstPlugging(List.Contact())
   
   ; We sort the Address book by FirstName
   SortStructuredList(List(), 0, SortContactFirstName(), #PB_Sort_String)
   
   ; We clear ComboBox listing all contacts
   ClearGadgetItemList(#ComboBox_FirstNameList)
   
   ; We fill the combobox gadget with address book Contact FirstName
   ForEach List()
      
      AddGadgetItem(#ComboBox_FirstNameList, - 1, GetContactFirstName(List()))
      
   Next 
   
   ; We show the first contact in the address book
   SelectElement(List(),0)
   PlugContactInGUI(List())
   SetGadgetState(#ComboBox_FirstNameList,0)
   
EndProcedure 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Programmation - OK

Procedure CreateFakeAdressBook(*Object.AddressBook, List.Contact())
   
   If FileSize(GetAddressBookFileName(*Object)) = -1
      
      ClearList(List()) ; ---> ? ? ? ? ? ? Not needed I think
      
      ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      ; It's just for creating a fake address book in case we don't have one.
      
      AddElement(List())
      UpdateContact(List(),"Runner","Road", "Texas","3215","55th HighWay", "J0W 3P3","roadrunner@superfast.com","123-4587","987-6543","Personnage de dessin animé. Il court très très vite.")

      AddElement(List())
      UpdateContact(List(),"Coyote","Will","Texas","3225","55th HighWay", "J0W 3P7","vilcoyote@superfast.com","569-3387","987-4443","Personnage de dessin animé. Il tente d'attaper Road Runner !")
      
      SetAddressBookContactQTY(*Object, 1)
      
   EndIf 
   
EndProcedure 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Programmation - OK

Procedure LoadAddressBook(*ObjectA.AddressBook, List.Contact())
   
   If ReadFile(0, GetAddressBookFileName(*ObjectA)) <> 0
      
      Repeat
         
         AddElement(List())
         ReadContact(0, List())
         
      Until Eof(0)
      
      SetAddressBookContactQTY(*ObjectA, CountList(List()) - 1)
      
      CloseFile(0)
      
   Else 
      
      CreateFakeAdressBook(*ObjectA, List())
      
   EndIf 
   
EndProcedure 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Programmation - OK

Procedure SaveAddressBook(*ObjectA.AddressBook, List.Contact())
   
   If CreateFile(0, GetAddressBookFileName(*ObjectA))
      
      ForEach List()
         
         WriteContact(0, List())
         
      Next
      
      CloseFile(0)
      
   EndIf 
   
EndProcedure 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Programmation - OK

Procedure SelectContact(*ObjectA.AddressBook, List.Contact())
   
   Index = GetGadgetState(#ComboBox_FirstNameList)
   
   If Index <> - 1
      SelectElement(List(),Index)
      PlugContactInGUI(List())
      SetAddressBookContactID(*ObjectA, Index)
   EndIf 
   
EndProcedure 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Programmation - OK

Procedure ScrollContact(*ObjectA.AddressBook, List.Contact(), Direction.b)
   
   Index =  GetAddressBookContactID(*ObjectA)
   Scrolling(Index, 0, GetAddressBookContactQTY(*ObjectA), Direction)
   
   SetGadgetState(#ComboBox_FirstNameList,Index)
   SelectElement(List(),Index)
   PlugContactInGUI(List())
   SetAddressBookContactID(*ObjectA, Index)
   
EndProcedure 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Programmation - OK

Procedure DeleteContact(*ObjectA.AddressBook, List.Contact())
   
   Index = GetGadgetState(#ComboBox_FirstNameList)
   SelectElement(List(),Index)
   
   msg.s = TextGUI(#TxtGUI_WarningMessage00) + Chr(10)+Chr(13)
   msg + ReplaceString(TextGUI(#TxtGUI_WarningMessage01),"%NAME%",GetContactFirstName(List()) + " " +GetContactLastName(List()))
   
   If MessageRequester(TextGUI(#TxtGUI_ProgrName), msg, #MB_YESNO) = #IDYES
      
      DeleteElement(List())
      SetAddressBookContactQTY(*ObjectA, GetAddressBookContactQTY(*ObjectA) - 1)
      RemoveGadgetItem(#ComboBox_FirstNameList, Index)
      SetGadgetState(#ComboBox_FirstNameList,0)
      
      If CountList(List()) <> 0
         
         SelectContact(*ObjectA, List())
         
      Else 
         
         PlugContactInGUI(NULL.Contact)
         
      EndIf 
      
   EndIf 
   
EndProcedure 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Programmation - OK

Procedure TransferInfo()
   
   GadgetIDSource = #String_LastName
   
   For GadgetID = #String_EDIT_LastName To #Editor_EDIT_Comments
      
      SetGadgetText(GadgetID,GetGadgetText(GadgetIDSource))
      
      GadgetIDSource+1
      
   Next 
   
EndProcedure 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Programmation - OK

Procedure EditContact(*ObjectA.AddressBook, Mode.b, List.Contact())
   
   LastName.s = GetGadgetText(#String_EDIT_LastName)
   FirstName.s = GetGadgetText(#String_EDIT_FirstName)
   Town.s = GetGadgetText(#String_EDIT_Town)
   Number.s = GetGadgetText(#String_EDIT_Number)
   Street.s = GetGadgetText(#String_EDIT_Street)
   PostalCode.s = GetGadgetText(#String_EDIT_PostalCode)
   Email.s = GetGadgetText(#String_EDIT_Email)
   Phone01.s = GetGadgetText(#String_EDIT_HousePhone)
   Phone02.s = GetGadgetText(#String_EDIT_WorkPhone)
   Comments.s = GetGadgetText(#Editor_EDIT_Comments)
   
   If Mode = 1
      
      SelectElement(List(), GetAddressBookContactID(*ObjectA))
      
   Else 
      
      AddElement(List())
      SetAddressBookContactQTY(*ObjectA, GetAddressBookContactQTY(*ObjectA)+1)
      
   EndIf 
   
   UpdateContact(List(), LastName, FirstName, Town, Number, Street, PostalCode, Email, Phone01, Phone02, Comments)
   
   FirstPlugging(List())
   
EndProcedure 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Programmation - OK

Procedure ButtonGadgetGroup(FirstButtonID, LastButtonID, X, Y, Width, Height, Gap_Between_Gadget)
   
   For GadgetID = FirstButtonID To LastButtonID
       ButtonGadget(GadgetID, X, Y, Width, Height, "")
      X + Width + Gap_Between_Gadget
   Next
    
EndProcedure 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Programmation - OK

Procedure TextGadgetGroup(FirstTextID, LastTextID, X, Y, Width, Height, Gap_Between_Gadget)
   
   For GadgetID = FirstTextID To LastTextID
      TextGadget(GadgetID, X, Y, Width, Height, "",#PB_Text_Center)
      Y + Height + Gap_Between_Gadget
   Next
   
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Programmation - OK

Procedure StringGadgetGroup(FirstStringID, LastStringID, X, Y, Width, Height, Gap_Between_Gadget)
    
    For GadgetID = FirstStringID To LastStringID
       StringGadget(GadgetID, X, Y, Width, Height, "", #PB_String_ReadOnly)
       Y + Height + Gap_Between_Gadget
    Next
    
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Programmation - OK

Procedure StringGadgetGroupSTD(FirstStringID, LastStringID, X, Y, Width, Height, Gap_Between_Gadget)
   
   For GadgetID = FirstStringID To LastStringID
      StringGadget(GadgetID, X, Y, Width, Height, "")
      Y + Height + Gap_Between_Gadget
   Next
   
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Programmation - OK

Procedure EditContactWin(*ObjectA.AddressBook, Title.s, Mode.b, List.Contact())
   
   HideWindow(#Main_Win,1)
   
   If OpenWindow(#Edit_Win, 0, 0, 500, 480, Title, #Edit_Win_Style)
      
      If CreateGadgetList(WindowID(#Edit_Win))
         
         TextGadgetGroup(#Text_EDIT_LastName,#Text_EDIT_WorkPhone, 5, 5, 130, 20, 5)
         StringGadgetGroupSTD(#String_EDIT_LastName,#String_EDIT_WorkPhone, 145, 5, 350, 20, 5)
         EditorGadget(#Editor_EDIT_Comments,5,GadgetY(#String_EDIT_WorkPhone)+30,490,200)
         
         ButtonGadgetGroup(#Btn_EDIT_OK, #Btn_EDIT_CANCEL, 275, 445, 100, 25, 5)
         SetGadgetText(#Btn_EDIT_OK,TextGUI(#TxtGUI_EditOk))
         SetGadgetText(#Btn_EDIT_CANCEL,TextGUI(#TxtGUI_EditCancel))
         
      EndIf
      
   EndIf
   
   TxtGUI_Index = #TxtGUI_LastName
   
   For GadgetID = #Text_EDIT_LastName To #Text_EDIT_WorkPhone
      
      SetGadgetText(GadgetID,TextGUI(TxtGUI_Index))
      TxtGUI_Index + 1
      
   Next 
   
   If Mode = 1
      TransferInfo()
   EndIf 
   
   Repeat
      
      EventID = WindowEvent()
      
      If EventID = #PB_Event_Gadget
         
         Select EventGadget()                 
            
            Case #Btn_EDIT_OK
               EditContact(*ObjectA,Mode, List())
               EventID = #PB_Event_CloseWindow
               
            Case #Btn_EDIT_CANCEL
               EventID = #PB_Event_CloseWindow
               
         EndSelect
      EndIf
      
   Until EventID = #PB_Event_CloseWindow
   
   HideWindow(#Main_Win,0)
   
   CloseWindow(#Edit_Win)
   
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<
; <<<< END OF FILE <<<<
; <<<<<<<<<<<<<<<<<<<<<
And finally save this one as : MainWindow and EventManager.pb

Code: Select all

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : Address Book Exemple
; File : Main window and the EventManager
; Version : 1.5.0
; Programmation : OK - Complete
; Programmed by : Guimauve
; Date : 27-08-2005
; Last update : 31-03-2006
; Coded for PureBasic V4.00
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Programmation - OK

Procedure AddressBookWin()
   
   If OpenWindow(#Main_Win, 0, 0, 600, 480, TextGUI(#TxtGUI_ProgrName), #Main_Win_Style) <> 0
      
      If CreateGadgetList(WindowID(#Main_Win)) <> 0
         
         ComboBoxGadget(#ComboBox_FirstNameList,5,5,200,150)
         ButtonGadgetGroup(#Btn_Previous, #Btn_New, 210, 5, 75, 25, 2)
         
         Frame3DGadget(#Frame_Info,5,35,590,250,"")
         TextGadgetGroup(#Text_LastName,#Text_WorkPhone, 10, 55, 130, 20, 5)
         StringGadgetGroup(#String_LastName,#String_WorkPhone, 145, 55, 440, 20, 5)
         
         Frame3DGadget(#Frame_Comments,5,290,590,185,"")
         
         EditorGadget(#Editor_Comments,10,310,580,160)
         SendMessage_(GadgetID(#Editor_Comments), #EM_SETOPTIONS, #ECOOP_OR, #ECO_READONLY)
         SendMessage_(GadgetID(#Editor_Comments), #EM_SETBKGNDCOLOR, 0, GetSysColor_(#COLOR_3DFACE))
         
      EndIf
      
   EndIf
   
   TxtGUI_Index = #TxtGUI_BtnPrevious
   
   For GadgetID = #Btn_Previous To #Text_WorkPhone
      
      SetGadgetText(GadgetID,TextGUI(TxtGUI_Index))
      TxtGUI_Index + 1
      
   Next 
   
EndProcedure 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Programmation - OK

Procedure AddressBookEventManager(*ObjectA.AddressBook)
   
   ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   ; Create Contact linked list
   
   NewList MyAddressBook.Contact()
   
   ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   ; We load the address book from HardDrive
   
   LoadAddressBook(*ObjectA, MyAddressBook())
   
   ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   ; Display the first conctact + Miscallineous setting
   
   FirstPlugging(MyAddressBook())
   
   Repeat
      
      EventID = WindowEvent()
      
      Select EventID
         
         Case #PB_Event_Gadget
            
            Select EventGadget()
               
               Case #ComboBox_FirstNameList
                  SelectContact(*ObjectA, MyAddressBook())
                  
               Case #Btn_Previous
                  ScrollContact(*ObjectA, MyAddressBook(), -1)
                  
               Case #Btn_Next
                  ScrollContact(*ObjectA, MyAddressBook(), 1)
                  
               Case #Btn_New
                  EditContactWin(*ObjectA, TextGUI(#TxtGUI_BtnNew),0, MyAddressBook())
                  
               Case #Btn_Modify
                  EditContactWin(*ObjectA, TextGUI(#TxtGUI_BtnModify),1, MyAddressBook())
                  
               Case #Btn_Delete
                  DeleteContact(*ObjectA, MyAddressBook())
                  
            EndSelect
            
            ; Case #PB_Event_Menu ; We don't have Menu for the moment
            ; Select EventMenu()
            ; EndSelect
            
      EndSelect
      
   Until EventID = #PB_Event_CloseWindow
   
   ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   ; 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(*ObjectA, MyAddressBook())
   
   End
   
EndProcedure 

; <<<<<<<<<<<<<<<<<<<<<
; <<<< END OF FILE <<<<
; <<<<<<<<<<<<<<<<<<<<<
Regards
Guimauve

Posted: Fri May 19, 2006 11:15 pm
by GeoTrail
Nice work, again :)

And for lazy people, I've uploaded all the source files in one zip archive here.

Posted: Sat May 27, 2006 2:00 am
by Guimauve
GeoTrail wrote:Nice work, again :)

And for lazy people, I've uploaded all the source files in one zip archive here.
Thanks

By the way, don't use the the CopyContact() Macro. This macro are not safe to use and can be deleted.

Regards
Guimauve

Posted: Sun May 28, 2006 8:25 pm
by Guimauve
A small addon to this project :

The working Copy operator and the Debug operator just in case someone need or would like to modify the code.

Code: Select all

; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Copy operator >>>>>

Macro CopyContact(ObjectA, ObjectB)
   
   SetContactLastName(ObjectB, GetContactLastName(ObjectA))
   SetContactFirstName(ObjectB, GetContactFirstName(ObjectA))
   SetContactTown(ObjectB, GetContactTown(ObjectA))
   SetContactNumber(ObjectB, GetContactNumber(ObjectA))
   SetContactStreet(ObjectB, GetContactStreet(ObjectA))
   SetContactPostalCode(ObjectB, GetContactPostalCode(ObjectA))
   SetContactEmail(ObjectB, GetContactEmail(ObjectA))
   SetContactPhone01(ObjectB, GetContactPhone01(ObjectA))
   SetContactPhone02(ObjectB, GetContactPhone02(ObjectA))
   SetContactComments(ObjectB, GetContactComments(ObjectA))
   
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Debug Macro >>>>>

Macro DebugContact(ObjectA)
   
   Debug GetContactLastName(ObjectA)
   Debug GetContactFirstName(ObjectA)
   Debug GetContactTown(ObjectA)
   Debug GetContactNumber(ObjectA)
   Debug GetContactStreet(ObjectA)
   Debug GetContactPostalCode(ObjectA)
   Debug GetContactEmail(ObjectA)
   Debug GetContactPhone01(ObjectA)
   Debug GetContactPhone02(ObjectA)
   Debug GetContactComments(ObjectA)
   
EndMacro
Regards
Guimauve

Posted: Tue Jun 06, 2006 7:57 am
by Michael Vogel
GeoTrail wrote:Nice work, again :)

And for lazy people, I've uploaded all the source files in one zip archive here.
I'm lazy, so I can't understand why I was not allowed to get the file? :roll: