mercredi 15 octobre 2008

bankor3

' BANKOR 3 de DEVIERS FABIEN

$INCLUDE "objets\RAPIDQ.INC"
$TYPECHECK on
$APPTYPE GUI
$RESOURCE ICON AS "Z:\rapidq\projets\BANKOR\data\ICON.ICO"
$RESOURCE LOGO AS "Z:\rapidq\projets\BANKOR\data\logo.bmp"

CONST titre = "BANKOR v.0.3" ' EST une constante ; A modifier lors de la modification de la version.
DIM Fichier AS qfilestream 'pour les sauvegardes
DIM FichLog AS qfilestream 'pour les LOG
DIM MagList AS string
DIM Chemin AS STRING
DIM Colo AS INTEGER ' pour la colonne
DIM Lign AS INTEGER 'pour la ligne
' déclarations pour les boites de dialogues d'ouverture de fichiers et d'enregistrement
DIM savedial AS QSaveDialog
DIM ouvredial AS QOpenDialog
DIM filtre AS string 'pour n'ouvrir que les fichier avec l'extension choisie
filtre =("Fichiers Bankor (*.bank)|*.bank|Tous les fichiers (*.*)|*.*")
' si la liste des libellé n'existe pas ;
if fileexists("liste.txt")= false then
' la créer
fichier.open("Liste.txt",fmcreate)
' et y ajouter quesques exemples...
fichier.writeline "INTERMARCHE" : fichier.writeline "LIDER PRICE" : fichier.writeline "CASINO"
fichier.writeline "CHAMPION" : fichier.writeline "INTERSPORT"
fichier.WriteLine "PAYE MOI" : fichier.WriteLine "PAYE TOI"
' ne pas oublier de fermer le fichier.
fichier.close
' ne pas oublier d'informer l'utilisateur.
showmessage "Le fichier Liste.txt à été crée avec succes. Vous Pouvez ajouter dans ce fichier texte la liste des options afin de gérér au mieux vos dépences et entrée d'argent."+chr$(13)+_
+"EXEMPLE : "+chr$(13)+"INTERMARCHE"+chr$(13)+"PAYE MOI"+chr$(13)+"PAYE TOI"+chr$(13)+"CASINO"+chr$(13)+"..."+chr$(13)+chr$(13)+"Vous pourez le modifier autant de fois que vous le souhaitez. Ce dernier peut être ouvert avec le simple bloc note."
end if
'ouvrir la liste des libellés
Fichier.open("liste.txt",fmopenread)
'charger les libellés
MagList = Fichier.readstr(Fichier.size)
' ne pas oublier de fermer le fichier.
Fichier.close

'fenêtre principale
DECLARE SUB affiche_liste_comptes
DECLARE SUB sauvegarde_rapide
DECLARE SUB Ferme_grille
DECLARE SUB Quit_Click
DECLARE SUB EllipsisClick (Col AS LONG, Row AS LONG, Sender AS QSTRINGGRID)
DECLARE SUB Apropos_click
'fenêtre liste comptes
DECLARE SUB charge_click (Sender AS QBUTTON)
DECLARE SUB new_click (Sender AS QBUTTON)
DECLARE SUB del_click (Sender AS QBUTTON)
DECLARE SUB Annule_Click (Sender AS QBUTTON)
DECLARE SUB effacetout 'pour le chargement de fichiers....
DECLARE SUB fermeapropo
DECLARE SUB efface_ligne(Row as long, Sender AS QSTRINGGRID)
DECLARE SUB supprime_ligne(Row as long, Sender AS QSTRINGGRID)
DECLARE SUB insert_Ligne(Row as long,r as integer)
DECLARE SUB affich_fen_libel
DECLARE SUB charge_liste_libel
DECLARE SUB enreg_liste_click
DECLARE SUB Ferme_liste_click
'gestion de la grille
DECLARE SUB AffichSolde (montant as double)
DECLARE SUB AffichSelectCell(Col%, Row%)
' fenêtre liste des libellés
DECLARE SUB ajout_libel
DECLARE SUB supprime_libel
DECLARE SUB btn_annul_libel_click
DECLARE SUB btn_valid_libel_click
DECLARE SUB demande_enreg_libel
DECLARE SUB imprim_compte

CREATE Fenetreprincipale AS QFORM
Caption = titre
ICOHandle = ICON
' La variable 'titre' est une constante qui ne peut pas etre modifié tout au long du programme.
Width = 790
Height = 590
Center ' on centre la fenetre dans l'écran
CREATE menu AS QMAINMENU
CREATE mnufichier AS QMENUITEM
Caption = "Fichier"
CREATE mnu_nouveau AS QMENUITEM
Caption = "&Liste des comptes"
Onclick = affiche_liste_comptes
Shortcut = "Ctrl+L"
END CREATE
CREATE mnu_Sauv_rapid AS QMENUITEM
Caption = "&Sauvegarder"
Onclick = sauvegarde_rapide
Shortcut = "Ctrl+S"
Enabled = false
END CREATE
CREATE mnu_ferme_grille AS QMENUITEM
Caption = "&Fermer"
Onclick = Ferme_grille
enabled = false
Shortcut = "Ctrl+F"
END CREATE
CREATE mnu_brek AS QMENUITEM
Caption = "-"
END CREATE
CREATE mnu_imprime AS QMENUITEM
Caption = "Imprimer"
OnClick = imprim_compte
Enabled = False
END CREATE
CREATE mnu_brek2 AS QMENUITEM
Caption = "-"
END CREATE
CREATE mnu_Quit AS QMENUITEM
Caption ="&Quitter"
Onclick = quit_click
Shortcut = "Ctrl+Q"
END CREATE
END CREATE
CREATE System AS QMENUITEM
Caption = "Système"
CREATE mnuAfichSolde AS QMENUITEM
Caption = "Afficher le solde"
onclick = affichsolde
Enabled = False
END CREATE
CREATE mnuMofi_liste AS QMENUITEM
Caption = "Modifier la liste des libellés"
onclick = affich_fen_libel
END CREATE
END CREATE
CREATE mnuaide AS QMENUITEM
Caption = "Aide"
CREATE mnu_apropo AS QMENUITEM
Caption = "A propos de ..."
Onclick = Apropos_click
END CREATE
END CREATE
END CREATE
CREATE grilleB as qstringgrid 'pour l'insertion de lignes...
align = 2
fixedCols=0
colcount=3
visible = false ' (Doit être invisible pour l'utilisateur final.)
END CREATE
CREATE Grille AS QSTRINGGRID
Visible = false
Align = alClient
addoptions(5,6,7,9,10,11,14)
FixedRows = 1
FixedCols = 0
ColCount = 3
RowCount = 51
Separator = "|" ' Utile pour LoadFromFile et SaveToFile
' Il s'agit du caractère de séparations des données.
DefaultRowHeight = 20
DefaultColWidth = 120
ColumnStyle(1) = gcsList
' ColumnStyle(0) = gcsEllipsis
' supression car version anglaise de la date ; risque de
' mauvaise donnée si l'utilisateur ne donne pas toutes les dates en anglais.
ColumnList(1) = MagList
Cell(0,0) = " Date"
Cell(1,0) = " Libellé"
Cell(2,0) = " Montant"
ColWidths(0)= 100
ColWidths(1)= 500
' ColWidths(2)= 200
Font.name = "Courier New"
'font.name = "arial"
font.size = 10
OnEllipsisClick = EllipsisClick
onselectcell = AffichSelectCell
create pop_menu as qpopupmenu
create pop_mnu_solde as qmenuitem
Caption = "Afficher le solde"
onclick = affichsolde
end create
create mnu_popup_brek as qmenuitem
Caption = "-"
end create
create mnu_ajoute_ligne_av as qmenuitem
Caption = "Inserer une ligne"
Onclick = insert_Ligne
end create
create mnu_popup_brek2 as qmenuitem
Caption = "-"
end create
create mnu_efface_ligne as qmenuitem
Caption = "Effacer la ligne"
Onclick = efface_ligne
end create
create mnu_popup_brek3 as qmenuitem
Caption = "-"
end create
create mnu_supprime_ligne as qmenuitem
Caption = "Supprimer la ligne"*
OnClick = supprime_ligne
end create
end create
END CREATE
CREATE StatusBar AS QSTATUSBAR
AddPanels(Date$,"")
Panel(0).Width = 80
Panel(0).Alignment = TaCenter
hint = "Mois / Jour / Année"
END CREATE
OnCLose = Quit_Click
END CREATE

CREATE frm_liste_compte AS QFORM
Caption = titre + " - Liste des comptes -"
Width = 325
Height = 228
BorderStyle = -2
Center
CREATE Lbl_copyright AS QLABEL
Caption = "COPYRIGHT TO"+chr$(13)+"DEVIERS F."
Left = 230
Top = 150
Cursor = -21
' Utilisation d'un curseur en forme de main afin de faire réagir l'utilisateur afin qu'il
'Clique dessu a la façon d'un lien hypertexte.
OnClick = Apropos_click
Transparent = 1
END CREATE
CREATE liste_comptes AS QFILELISTBOX
Left = 8
Top = 8
Width = 217
Mask="*.bank"
' N'affiche ques les fichiers dont l'extention est : ".bank"
ShowIcons = true
' affiche les icones (plus professionnel ???)
Height = 185
onDblClick = Charge_Click
END CREATE
CREATE Btn_charge AS QBUTTON
Caption = "Charger"
Left = 232
Top = 8
TabOrder = 1
OnClick = charge_click
END CREATE
CREATE Btn_Nouveau AS QBUTTON
Caption = "Nouveau"
Left = 232
Top = 40
TabOrder = 2
OnClick = new_click
END CREATE
CREATE Btn_Supprimer AS QBUTTON
Caption = "Supprimer"
Left = 232
Top = 72
TabOrder = 3
OnClick = del_click
END CREATE
CREATE Btn_Annuler AS QBUTTON
Caption = "Annuler"
Left = 232
Top = 104
TabOrder = 3
OnClick = Annule_Click
END CREATE
END CREATE

CREATE Frm_apropos AS QFORM
Caption = "A propos de " + titre
' voila une preuve de l'utilité d'utiliser une constante...
Width = 243
Height = 262
Center
CREATE Panel1 AS QPANEL
Left = 8
Top = 8
Width = 225
Height = 65
BevelInner = 1
CREATE Label1 AS QLABEL
Caption = titre
Left = 8
Top = 8
Width = 200
Alignment = 2
Transparent = 1
END CREATE
CREATE Label2 AS QLABEL
Caption = "Une application de DEVIERS Fabien"
Left = 8
Top = 40
Width = 200
Alignment = 2
Transparent = 1
END CREATE
END CREATE
CREATE Button1 AS QBUTTON
Caption = "&OK"
Left = 78
Top = 201
TabOrder = 1
OnClick = FermeApropo
END CREATE
CREATE Panel2 AS QPANEL
Left = 7
Top = 80
Width = 225
Height = 113
BevelInner = 1
TabOrder = 2
CREATE Image1 AS QIMAGE
BMPHANDLE = LOGO
Left = 12
Top = 9
Width = 200
Height = 94
showhint = true
hint = "Application créé avec le compilateur gratuit RAPID-Q"
AutoSize = 1
END CREATE
END CREATE
END CREATE

create fen_libel as qform
BorderStyle = -2
Caption = titre +" - Liste des libellés"
' titre est tu là ???? ;-)
center
Height = 300
create liste_libel as qlistbox
align=5
create main_menu2 as qpopupmenu
create mnu_ajoute as qmenuitem
Caption = "Ajouter un libellé
onclick = ajout_libel
end create
create mnu_supprime as qmenuitem
Caption = "Supprimer"
onclick = supprime_libel
end create
create mnu_sauve as qmenuitem
Caption = "Sauvegarder"
onclick = enreg_liste_click
end create
create mnu_coupe as qmenuitem
Caption = "-"
end create
create mnu_ferme as qmenuitem
Caption = "Fermer"
onclick = Ferme_liste_click
end create
end create
end create
onclose = demande_enreg_libel
end create

create frm_ajout_libel as qform
center
borderstyle = -2
Caption = titre + " - Ajouter un libellé"
' titre est décidement présent partout...
Width = 300
Height = 105
create nom_libel as qedit
text = ""
top = 10
left = 10
Width = 280
end create
create btn_valid_libel as qbutton
Caption = "Valider"
Top = 40
Left = 130
OnClick = btn_valid_libel_click
end create
create btn_annul_libel as qbutton
Caption = "Annuler"
Top = 40
Left = 215
OnClick = btn_annul_libel_click
end create
end create

IF FILEEXISTS("Bankor.log")=false THEN
FichLog.open("Bankor.log",fmcreate) : FichLog.CLose : end if
FichLog.open("Bankor.log",fmopenwrite)
FichLog.Position = FichLog.Size
Fichlog.writeline("Démarrage de BANKOR2 le :"+date$+" à "+Time$)
FichLog.CLose

DIM r as integer

Fenetreprincipale.Showmodal

SUB affiche_liste_comptes
frm_liste_compte.showmodal
END SUB

SUB sauvegarde_rapide
Grille.SaveToFile(chemin,0,0,51)
END SUB

SUB EllipsisClick (Col AS LONG, Row AS LONG, Sender AS QSTRINGGRID)
'affiche la date (date$) dans la cellule sible.
Sender.cell(col,row) = date$
END SUB

SUB Quit_Click
FichLog.open("Bankor.log",fmopenwrite)
FichLog.position=FichLog.Size
Fichlog.writeline("Arret de BANKOR2 le :"+date$+" à "+Time$)
' Ecrit une petite phrase dans un LOG...
' Utile pour savoir si quelqu'un utilise votre prog lors de vos absences...
' le MUST serai une demande de mot de passe...
' ce n'est pas impossible que je l'insère dans la version suivante...
' ne pas oublier de modifier la constante titre.
FichLog.CLose
' ne pas oublier de fermer le fichier...
Application.Terminate
END SUB

SUB AffichSelectCell(Col%, Row%)
statusbar.Panel(1).Caption = str$(row%)+ "° Ligne."
' Petit must. Pratiquement inutile.
END SUB

SUB charge_click (Sender AS QBUTTON)
call effacetout
grille.visible = true
Chemin = liste_comptes.filename
grille.loadfromfile(liste_comptes.filename,0,0,51)
frm_liste_compte.CLose
'Showmessage "Chargement réussi."+chr$(13)+liste_comptes.filename
mnu_sauv_rapid.Enabled = True
mnuAfichSolde.Enabled = True
' Rendre l'impression possible par le biais du menu
mnu_imprime.enabled = true
mnu_ferme_grille.enabled = true
END SUB

SUB new_click (Sender AS QBUTTON)
Showmessage ("Attention, Lors de la création de votre sauvegarde, n'oubliez pas d'ajouter "+chr$(34)+".bank"+chr$(34)+chr$(13)+" Pour voir votre compte apparaitre dans la liste.")
' On peut rajouter un code afin de détecter si le .BANK a bien été rajouté.
' du style :

savedial.filter = filtre
if savedial.execute then
if ucase$(right$(savedial.filename,5))<>".BANK" then
savedial.filename= savedial.filename + ".bank"
end if
fichier.open(savedial.filename,fmcreate)
fichier.close
end if
liste_comptes.mask="*.*" : liste_comptes.mask="*.bank"
' Cette ligne de code est une sorte de mise à jours des fichier portant l'extentions .BANK
END SUB

SUB del_click (Sender AS QBUTTON)
kill(liste_comptes.filename)
liste_comptes.mask="*.*" : liste_comptes.mask="*.bank"
END SUB

SUB Annule_Click (Sender AS QBUTTON)
frm_liste_compte.close
END SUB

sub effacetout
For lign = 0 To grille.RowCount -1
For Colo = 0 To grille.ColCount -1
grille.Cell(colo, lign) = ""
Next colo
Next lign
Grille.Cell(0,0) = " Date"
Grille.Cell(1,0) = " Libellé"
Grille.Cell(2,0) = " Montant"
end sub

SUB AffichSolde (montant as double)
Dim I as integer
montant = 0
for i = 1 to 50
montant = montant + val(grille.cell(2,i))
next
if montant < 0 then
showmessage "Votre solde est négatif."
end if
showmessage "Le solde est de : "+ Format$("%8.2m", str$(montant))
END SUB

SUB apropos_Click
frm_apropos.showmodal
END SUB

SUB fermeapropo
frm_apropos.close
END SUB

SUB Ferme_grille
call sauvegarde_rapide
showmessage "Grille enregistrée"
call effacetout
grille.visible = false
mnu_Sauv_rapid.enabled = false
mnu_imprime.enabled = false
mnu_ferme_grille.enabled = false
mnuAfichSolde.enabled = false
END SUB

SUB efface_ligne(Row as long, sender as QSTRINGGRID)
' showmessage "Effacement de la ligne n°: "+str$(grille.row)
grille.cell(0,grille.Row)=""
grille.cell(1,grille.Row)=""
grille.cell(2,grille.Row)=""
END SUB

SUB supprime_ligne(Row as long, Sender AS QSTRINGGRID)
'+simple
grille.deleterow(grille.row)
'dim i as grille.row
'for i=grille.row to grille.rowcount
' grille.cell(0,i)=grille.cell(0,i+1)
' grille.cell(1,i)=grille.cell(1,i+1)
' grille.cell(2,i)=grille.cell(2,i+1)
'next
END SUB

SUB insert_Ligne(Row as long)
r=grille.row
for r=grille.row to 50 ' simple copie.
' if MESSAGEDLG("Si la valeur de "+chr$(34)+"r"+chr$(34)+" ne varie pas vous pouvez cliquer sur le bouton "+chr$(34)+"annuler"+chr$(34)+"."+chr$(13)+chr$(13)+"r="+str$(r)+chr$(13)+chr$(13)+"Désirez-vous continuer ?" , mtconfirmation, 1+2, 1)=mrno then
' exit sub
' end if
GrilleB.cell(0,r) = grille.cell(0,r)
GrilleB.cell(1,r) = grille.cell(1,r)
GrilleB.cell(2,r) = grille.cell(2,r)
r=r+1
next

efface_ligne(grille.row,grille)
r=grille.row

for r=grille.row to 50
Grille.cell(0,r+1) = grilleB.cell(0,r)
Grille.cell(1,r+1) = grilleB.cell(1,r)
Grille.cell(2,r+1) = grilleB.cell(2,r)
r=r+1
next
'remise à zéro de la grille invisible.
r=0
for r=0 to 50
grilleB.cell(0,r)=""
grilleB.cell(1,r)=""
grilleB.cell(2,r)=""
r=r+1
next
END SUB

SUB affich_fen_libel
Liste_libel.LoadFromFile("liste.txt")
fen_libel.ShowModal
END SUB

SUB enreg_liste_click
Liste_libel.SaveToFile("liste.txt")
maglist=""
'Fichier.open("liste.txt",fmopenread)
'MagList = Fichier.readstr(Fichier.size)
'Fichier.close
END SUB

SUB Ferme_liste_click
fen_libel.Close
call enreg_liste_click
END SUB

SUB ajout_libel
nom_libel.text=""
frm_ajout_libel.showmodal
end sub

SUB supprime_libel
showmessage "Item à supprimer : "+liste_libel.item(liste_libel.itemindex)
liste_libel.delitems(liste_libel.itemindex)
END SUB

SUB btn_annul_libel_click
nom_libel.text=""
frm_ajout_libel.close
END SUB

SUB btn_valid_libel_click
showmessage nom_libel.text
liste_libel.additems(nom_libel.text)
frm_ajout_libel.close
END SUB

SUB demande_enreg_libel
if MESSAGEDLG("Désirez-vous enregistrer les changements ?", mtconfirmation, 1+2, 1)=mryes then
call enreg_liste_click
showmessage "Modification(s) enregistré(es).
end if
END SUB

SUB imprim_compte
dim vali
if MESSAGEDLG("Désirez-vous enregistrer les changements ?", mtconfirmation, 1+2, 1)=mryes then
dim i as integer
lprint "Nom du Compte : " + liste_comptes.filename
lprint "Impression du : "+DATE$ +" à "+ TIME$
lprint
lprint
lprint
'lprint grille.handle ' n° interne du composant
for i = 0 to grille.rowcount
' grille.cell (col,row)
' SPACE$(Num) Retourne une chaîne composée de Num espaces

lprint grille.Cell(0,i) & space$(10)& grille.cell(1,i) & space$(50 - val(len(grille.cell(1,i)))) & grille.cell(2,i)
next
lflush
end if
END SUB

' VERSION TERMINEE LE 6 février 2006 à 18:04 - 585 lignes.
' VERSION TERMINEE LE 17 octobre 2006 à 10:52 - 595 lignes.

Faire une horloge

$apptype gui '--- Avertir RAPIDQ du caractère Fenêtré de notre application (Il ne s'agit pas d'une application en mode CONSOLE)
$include "objets\rapidq2.inc" '--- Ajouter les modus de base à RAPIDQ.
$include "objets\minimize.inc" '--- Ajout du module de réduction de l'application dans la barre de tache.

declare sub heure '--- Déclaration de la subroutine qui servira a afficher l'heure

dim fonta as qfont '--- Police d'écriture du label
fonta.bold = true '--- En gras
fonta.size = 20 '--- En gros caractère
fonta.name = "comic sans MS" '--- Avec la police comic sans MS

dim hor as qtimer '--- Horloge.
hor.interval = 1000 '--- Intervalle du minuteur.
hor.enabled = true '--- activer le minuteur.
hor.ontimer = heure '--- Aller vers la sub "heure" dès que l'intervalle est atteinte.

CREATE Form AS QFORM
Caption = "Initialisation de l'horloge" '--- texte affiché pendant la première seconde
Width = 130
Height = 70
Center '--- Centrer la fenêtre au centre de l'écran
delbordericons(2) '--- Masquer le bouton d'agrandissement.
Borderstyle = 1 '--- Pas de redimentionnement possible.
CREATE Label_heure AS QLABEL
Caption = "..." '--- Afficher "..." pendant la première seconde.
Alignment = 2 '--- Aligment du texte du label
Align = 5 '--- Aligment du composant dans la fenêtre
Autosize = true '--- Activer l'ajustage du composant au texte qu'il contient
'--- N'est pas obligatoire
font = fonta '--- Notre police d'écriture dêjà programmée
Transparent = 1 '--- Afficher la fentre derrière le texte
END CREATE
END CREATE

setminimize(form) '--- Si l'utilisateur appui sur le bouton de minimisation de la fenêtre.
Form.ShowModal '--- Afficher la fenêtre

'--- LES SUBROUTINES ---

sub heure
label_heure.caption = time$ '--- Attibuer l'heure courrante du PC au label
form.caption = label_heure.caption '--- Attribuer le texte du label au titre de la fenêtre
'--- Pour pouvoir lire l'heure dans la barre de tache de Windows
end sub