Code : Tout sélectionner
;-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
; Gestion d'une liste de Site INTERNET perso et indépendant historique navigateur * V00.01
; Collection de couper coller réunis dans cette gestion de Site et appartient à tous ! (GeBonet) G. Jourdan 02-10-2008
;
; Note : Permet de garder des sites personnels (voirs importants) dans un fichier indépendant des navigateurs....
; Se transporte aussi avec son fichier sur une CLEF partout et se "joue" de partout........ Et on repart !
; Le fichier des données se trouve dans le répertoire "Data" attenant au répertoire du programme
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
; Forme de gestion de fichier qui traite un enregistrement par ligne de type "TXT" alors peu aussi traiter des lignes de soures HTML
; Qui serait crée par une fenêtre de boutons correspondant a des marqueurs HTML de l'objet désigné... Texte, Images, vidéo, liens
; La suite des lignes seraient alors le codes à executer par FireFox ou autre pour verifier le rendu...
;
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
; Constantes *
; -------------------*
Declare.s ProgramDirectory()
Enumeration
#Window_0
#Window_1
; ------------------------------------------------
#texte_affiche_selection
#Fenetre_main
#Fenetre_ajouter
EndEnumeration
Enumeration
#cadre_0
#text_Nom
#String_Nom
#bouton_valide
#bouton_annule
#file
#Liste
#Web_0
EndEnumeration
Enumeration
#menu_Ajoute
#menu_Modifier
#menu_Effacer
#menu_Affichier_Site
#menu_Quitter
#menu_Triage
#MenuAide
EndEnumeration
Define.l event, EventWindow, EventGadget, EventType, EventMenu
Declare Sauver()
; procedure pour la creation d'un élement de la liste
Global Modification, NonOk, Position.l
Global Rep.s
Global ww, wh
;Rep.s=PureFILE_GetExePath() +"Data\" ; Répertoire actuel + le répertoire du fichier... GNOZAL Ok
If FileSize("Data") =-1
CreateDirectory(ProgramDirectory() +"Data")
EndIf
Rep.s=ProgramDirectory() +"Data\"
Debug Rep.s
Modification=0
;-----------------------------------------------------------------------------------------------------------
; SI on veux que cela soit redimensionnable ...
;-----------------------------------------------------------------------------------------------------------
;
;************************************************************
; Procédures de redimensionnement de la fenêtre
;
; Procédures et de sauvegarde de la fenêtre
;
; ************************************************************
Procedure sauve_taille_gadget(id_window,nb_max_gadget)
Structure gadget
id.l
x.l
y.l
l.l
h.l
EndStructure
Global Dim gadget.gadget(1)
nb_gadget=0
For num_gadget=0 To nb_max_gadget ; #PB_Compiler_EnumerationValue
If IsGadget(num_gadget)
Debug num_gadget
nb_gadget=nb_gadget+1
Redim gadget.gadget(nb_gadget)
gadget(nb_gadget)\id=num_gadget
gadget(nb_gadget)\x=GadgetX(num_gadget)
gadget(nb_gadget)\y=GadgetY(num_gadget)
gadget(nb_gadget)\h=GadgetHeight(num_gadget)
gadget(nb_gadget)\l=GadgetWidth(num_gadget)
EndIf
Next
gadget(0)\id=nb_gadget
gadget(0)\h=WindowHeight(id_window)
gadget(0)\l=WindowWidth(id_window)
EndProcedure
; Redimentionnement
Procedure resize_gadget(id_window)
hw=gadget(0)\h
lw=gadget(0)\l
nhw=WindowHeight(id_window)
nlw=WindowWidth(id_window)
For num_gadget=1 To gadget(0)\id
Debug num_gadget
If IsGadget(gadget(num_gadget)\id)
nx=gadget(num_gadget)\x*nlw/lw
ny=gadget(num_gadget)\y*nhw/hw
nh=gadget(num_gadget)\h*nhw/hw
nl=gadget(num_gadget)\l*nlw/lw
ResizeGadget(gadget(num_gadget)\id,nx,ny,nl,nh)
EndIf
Next
EndProcedure
; *************************************************************************************************************************************
; La fenetre doit être ouverte avec des paramètres variables : ici ce sont : ww et wh qui aurons par exemple été définit
; avant par ww=650:wh=450 ou tout autre valeurs compatible. et "#PB_Window_SizeGadget" dans l'ouverture même...
; et
; If OpenWindow(0,0,0,ww,wh,"PROGENE V 1.0 PB 4.2 septembre 2008",#PB_Window_SizeGadget|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
;
; >>> A PLACER AVANT LA BOUCLE D'ATTENTE et APRES LA DEFINITION DE TOUT LES GADGETS...
;
; sauve_taille_gadget(0,100) ;100 c'est le nombre de gadget max, comme dans mes programme l'énumeration
; ; des gadget à lieu avant j'utilise :#PB_Compiler_EnumerationValue
; ---------------------------------------------------------------------------------------------------------------------
;Repeat ; Boucle de contrôle des actions et d'ATTENTE
; -------------------------------------------------------------------------------------------------------------------
; >>> A PLACER DANS LA FIN DE BOUCLE DE LA FENETRE ....
;
; Case #PB_Event_SizeWindow ; Redimensionne la fenêtre proportionellement
; resize_gadget(0) ; ---------------------------------------------------------------
; ---------------------------------------------------------------------------------------------------------------------
; EndSelect ; Fin de boucle de fenetre
;
; ******************************************************************************************
; Procédures : 1- Vérifie l'existance du fichier application
; 2- Lecture des données d'un fichier descriptif ....
; 3- Ecriture des données dans un fichier descriptif ....
; -----------------------------------------------------------------------------------------------------------------
; 1- Vérifie l'existance du fichier application
Procedure ExistAplication(NomAplication$,NomFichier$)
Rep$=GetCurrentDirectory()
SetCurrentDirectory(Rep$+"\"+NomAplication$)
Etat=1
ProcedureReturn Etat
EndProcedure
; ******************************************************************************************
; Modèle de Structure d'un enregistrement descripteur d'un fichier…
; --------------------------------------------------------------------------------------------------------------
Structure Application
;
NomFichier.s ; Fichier concerné Pour créer le fichier
NombreChamp.s ; Nombre de champs
LongueurEnreg.s ; Longueur de l'enregistrement
; Et Pour chaque champs :
NomChamp.s ; Nom du champ
TypeClef.s ; 0=Pas une clef, 1=Automatique, 2=Principale, 3=Secondaire,
TypeDon.s ; Type (Alpha, Entier, Entier Long, Double précision)
LongFixe.s ; Longueur MAX
RelaOuN.s ; Relation O/N (oui ou Non)
FichierExte.s ; Fichier d'origine (dans lequel on va lire ou écrire)
ChampClef.s ; Nom du champ de cette fiche qui est la clef d'accès
ChampExte.s ; Nom du champ du fichier externe à partir de ce champs
ZoneCalcul.s ; Zone qui sera calculé selon la formule entrée (Voir ci-après)
EntreSortie.s ; E/S (Sens où l'on va lire ou écrire dans l'autre fichier)
EndStructure
;
;
; ==========================================================================
; Fenetre pour afficher le site choisi...
; ==========================================================================
Procedure OpenWindow_Window_0(LeSiteSelection$)
ww=925 : wh=750
Option=#PB_Window_SizeGadget|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|#PB_Window_SystemMenu|#PB_Window_ScreenCentered
If OpenWindow(0,0,0,ww,wh,"Site "+LeSiteSelection$+"1.0 PB 4.2 Octobre 2008",Option)
If CreateGadgetList(WindowID(#Window_0))
WebGadget(#Web_0, 0, 0, 920, 740, LeSiteSelection$) ; #PB_Web_Mozilla
sauve_taille_gadget(0,100) ;100 c'est le nombre de gadget max, comme dans mes programme l'énumeration
EndIf
EndIf
;
Repeat
event = WaitWindowEvent()
Select event
; ////////////////////////////////////////
Case #PB_Event_Gadget
EventGadget = EventGadget()
EventType = EventType()
If EventGadget = #Web_0
EndIf ; ////////////////////////////////////
Case #PB_Event_CloseWindow
EventWindow = EventWindow()
If EventWindow = #Window_0
CloseWindow(#Window_0)
Break
EndIf
Case #PB_Event_SizeWindow ; Redimensionne la fenêtre proportionellement
resize_gadget(0) ;
EndSelect
ForEver
EndProcedure
;---------------------------------------------------------------------------------------------
Procedure Lecture() ; Lecture à partir du fichier ...................
If OpenFile(#file,Rep.s+"Mes_Site.Txt")<>0
OpenFile ( #file , Rep.s+"Mes_Site.Txt" )
k=0
While Eof ( #file )=0 ; Remplis la liste chainée.............
AddGadgetItem (#Liste ,-1,ReadString ( #file )):k=k+1
Wend
CloseFile( #file )
;
If k=0 ; Quelques sites si il n'y a pas de fichier existant !
AddGadgetItem (#Liste ,-1,"http://www.rigolus.com/les_avatars/humour/les_avatars_humour_002.jpg")
AddGadgetItem (#Liste ,-1,"http//:www.google.com.be")
AddGadgetItem (#Liste ,-1,"http://www.purebasic.com/french/links.php3")
AddGadgetItem (#Liste ,-1,"http://www.purebasic.fr/english/")
AddGadgetItem (#Liste ,-1,"http://purebasic.fr/french/login.php")
Sauver() ; et les sauve pour la fois suivante... Note : Le fichier est accéssible avec le Bloc Notes...
EndIf
EndIf
EndProcedure
;---------------------------------------------------------------------------------------------
Procedure Sauver() ; La liste des sites........
CallDebugger
If CreateFile ( #file , Rep.s+"Mes_Site.Txt" ) ;
total_item=CountGadgetItems(#Liste)-1 ; Nombre d'élément dans la liste
If total_item>0
For i=0 To total_item ; Step -1
WriteStringN ( #file, GetGadgetItemText (#Liste , i, 0))
Next
CloseFile ( #file)
EndIf
Else
MessageRequester("Information","Impossible de créer le fichier!")
EndIf
EndProcedure
;---------------------------------------------------------------------------------------------
Procedure RemoveGadget() ; **** Effacer les éléments avec Check_Box = ON ****
Protected i.l,total_item.l ; ---------------------------------------------
total_item=CountGadgetItems(#Liste)-1 ; Nombre d'élément dans la liste
For i=total_item To 0 Step -1 ; Contrôle l'état check_Box ?
If GetGadgetItemState(#Liste, i) & #PB_ListIcon_Checked
; Si le Check Box est coché ALORS ...
RemoveGadgetItem(#Liste,i) ; On Efface l'élément du ListIconGadget
EndIf
Next i
EndProcedure
;---------------------------------------------------------------------------------------------
;************* Procedure d'affichage des fenetres *************
;---------------------------------------------------------------------------------------------
Procedure Main_0()
ww=570:wh=335 ; Dimensions de la fenêtre principale....
Options=#PB_Window_TitleBar|#PB_Window_MinimizeGadget|#PB_Window_SystemMenu|#PB_Window_ScreenCentered
If OpenWindow(#Fenetre_main,0,0,ww,wh," Liste de MES SITES privilègiés J.G. 2008", Options)
;-----------------------------------------------------------------------------------
If CreateMenu(0,WindowID(#Fenetre_main)) ; Le Menu
MenuTitle("Fichier")
MenuItem(#menu_Ajoute,"Ajoute un Site")
MenuItem(#menu_Modifier,"Modifier un Site")
; GadgetToolTip(#menu_Modifier, "Pour Modifier ou Supprimer il faut cocher le site concerné")
MenuItem(#menu_Effacer,"Effacer un Site")
MenuBar()
MenuItem(#menu_Quitter,"Quitter")
MenuTitle("Accès au Site")
MenuItem(#menu_Affichier_Site,"AFFICHER le Site")
MenuBar()
MenuItem(#menu_Quitter,"Quitter")
MenuTitle("?")
MenuItem(#MenuAide,"Aide ?")
EndIf
;-------------------------- La grille des données ------------------------------------
If CreateGadgetList(WindowID(#Fenetre_main))
ListIconGadget(#Liste,10,20,550,280,"Nom des SITES ",545,#PB_ListIcon_GridLines|#PB_ListIcon_CheckBoxes);
EndIf
EndIf
EndProcedure
; ************************************************************************************************************
Procedure Nouvelle() ; *** Ouverture de la Fenêtre d'Ajout ****
If OpenWindow(#Fenetre_ajouter,0,0,560,100,"Nouveau SIte",#PB_Window_TitleBar|#PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(#Fenetre_ajouter))
Frame3DGadget(#cadre_0,10,10,525,50,"", #PB_Frame3D_Double)
TextGadget(#text_Nom, 15, 25, 50,20,"URL :")
StringGadget(#String_Nom, 80, 25,440,20,"")
EndIf
ButtonGadget(#bouton_valide, 40,70,120,20,"Valider")
ButtonGadget(#bouton_annule,380,70,120,20,"Annuler")
EndIf
;----------------------------------------------------------------------------------------------------------------------------------
; *********** Après la saisie de la nouvelle fiche on ajoute a la liste ***********
;----------------------------------------------------------------------------------------------------------------------------------
Repeat
Select WaitWindowEvent () ; Traite les boutons....
Case #PB_Event_Gadget
Select EventGadget () ; Selectionne en fonction de ....???
Case #bouton_valide
AddGadgetItem ( #Liste ,-1,GetGadgetText (#String_Nom )) ; OU AJOUTE une NOUVELLE adresse
Sauver() ; Sauve le fichier...
Fermer_window1=1
Case #bouton_annule ; Annule l'entrée
Fermer_window1=1
EndSelect
EndSelect
Until Fermer_window1=1
CloseWindow ( #Fenetre_ajouter ) ; Fermeture de la fenêtre ajoute...
EndProcedure
; -------------------------------------------------------------------------------------------------------------------------------------
Procedure Modification()
If OpenWindow(#Fenetre_ajouter,0,0,560,100,"Nouveau SIte",#PB_Window_TitleBar|#PB_Window_ScreenCentered)
If Modification=1
total_item=CountGadgetItems(#Liste)-1 ; Nombre d'élément dans la liste
For i=total_item To 0 Step -1 ; Contrôle l'état check_Box ?
If GetGadgetItemState(#Liste, i) & #PB_ListIcon_Checked
;--------------------------------------------------------
If CreateGadgetList(WindowID(#Fenetre_ajouter))
Frame3DGadget(#cadre_0,10,10,525,50,"", #PB_Frame3D_Double)
TextGadget(#text_Nom, 15, 25, 50,20,"URL :")
StringGadget(#String_Nom, 80, 25,440,20,GetGadgetItemText ( #Liste , i, 0))
EndIf
ButtonGadget(#bouton_valide, 40,70,120,20,"Valider")
ButtonGadget(#bouton_annule,380,70,120,20,"Annuler")
;--------------------------------------------------------
Repeat
Select WaitWindowEvent () ; Traite les boutons....
Case #PB_Event_Gadget
Select EventGadget () ; Selectionne en fonction de ....???
Case #bouton_valide
SetGadgetItemText(#Liste , i, GetGadgetText (#String_Nom ) ,0); OU AJOUTE une NOUVELLE adresse
Case #bouton_annule ; Annule l'entrée
Fermer_window1=1
EndSelect
EndSelect
Until Fermer_window1=1
;--------------------------------------------------------
EndIf
Next i
CloseWindow ( #Fenetre_ajouter ) ; Fermeture de la fenêtre ajoute...
EndIf
Modification=0
EndIf
EndProcedure
; ===================================
; **** Boucle principale du programme ****
; ===================================
Main_0() ; Fenêtre principale
Lecture() ;Chargement du fichier initial s'il y a ...
;
Repeat
Select WaitWindowEvent ()
Case #PB_Event_Menu ;
Select EventMenu()
Case #menu_Ajoute ; Procédure nouvelle adresse...
Nouvelle() ;
Main_0() ; Fenêtre principale
Lecture() ; Chargement du fichier
Case #menu_Modifier ;
Modification=1 ; Flag de Modif.. Mais procédure ID Nouvelle
Modification()
Sauver() ; Procédure pour SAUVER après Modif
Modification=0 :Ref=0
Main_0() ; Fenêtre principale
Lecture() ; Chargement du fichier
Case #menu_Effacer ; Procédure pour effacer une adresse marquée
RemoveGadget() ; Après avoir retiré de la liste les élément
Sauver() ; Marqués on sauve le fichier ....
Main_0() ; Réaffiche origine..
Lecture() ; Chargement du fichier
Case #menu_Affichier_Site ; < AFFICHE LE premier SITE COCHE >
total_item=CountGadgetItems(#Liste)-1 ; Nombre d'élément dans la liste
OK=0
For i=total_item To 0 Step -1 ; Contrôle l'état check_Box ?
If GetGadgetItemState(#Liste, i) & #PB_ListIcon_Checked
; Si le Check Box est coché ALORS ...
LeSiteSelection$=GetGadgetItemText(#Liste,i,0) ; On prend le titre
OK=i
Break
EndIf
Next i ; ***********************************************************************************************
If OK<>0 ; ***********************
OpenWindow_Window_0(LeSiteSelection$) ; Appel du site ....
SetGadgetItemState(#Liste,OK, 0) ; Remise a 0 du Check Box
EndIf ; ***********************
; ***********************************************************************************************
Case #menu_Quitter ; Procédure pour QUITTER et SAUVER
fermer_window0=1
Case #MenuAide
Aide$=" Pour une action sur un site existant que ce soit pour : "+Chr(13)+Chr(13)
Aide$=Aide$+" 1- Modifier ou "+Chr(13)
Aide$=Aide$+" 2- Effacer ou "+Chr(13)
Aide$=Aide$+" 3- AFFICHER le SITE "+Chr(13)+Chr(13)
Aide$=Aide$+"Vous devez COCHER Site Concerné... "+Chr(13)+Chr(13)
Aide$=Aide$+"(redimensionnement possible)"+Chr(13)
MessageRequester("Aide pour liste Site",Aide$, #PB_MessageRequester_Ok )
EndSelect
Case #PB_Event_CloseWindow
fermer_window0=1
EndSelect
Until fermer_window0=1
End ; si il y a eu Modification fichier
Procedure.s ProgramDirectory()
; Donne le chemin courrant du prg
ProgramDirectory.s = Space(#MAX_PATH)
GetCurrentDirectory_(#MAX_PATH, ProgramDirectory)
;Debug ProgramDirectory + "\"
ProcedureReturn ProgramDirectory + "\"
EndProcedure