[ Résolut ] Librairiie "String" et "stringext
[ Résolut ] Librairiie "String" et "stringext
Avec PB 3 Vb4, en voulant faire tourner un prog sans problème en 4.20
J'ai
Un message Box qui m'a annoncé que il manquait "StringExtension"
Puis quand j'ai placé le "StringExtension" de 4.20 dans 4.30
Il me dit qu'il y a double emploi avec "string" et "StringExtension" de Bin()...
D'ou j'en conclu que "string" à remplacé "StringExtension" mais que tout le monde n'est pas au courant entre eux... Puisque l'application 4.20 ne passe pas sous 4.30 Vb4... ???
Que faire ???
J'ai
Un message Box qui m'a annoncé que il manquait "StringExtension"
Puis quand j'ai placé le "StringExtension" de 4.20 dans 4.30
Il me dit qu'il y a double emploi avec "string" et "StringExtension" de Bin()...
D'ou j'en conclu que "string" à remplacé "StringExtension" mais que tout le monde n'est pas au courant entre eux... Puisque l'application 4.20 ne passe pas sous 4.30 Vb4... ???
Que faire ???
Dernière modification par GeBonet le dim. 02/nov./2008 16:16, modifié 1 fois.
montrer ton code qu'on puisse tester de notre côté ?
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Ton code dois utiliser une librairie utilisateur ancienne qui utilise les fonctions décrites à l'époque dans la librairie PureBasic Stringextension.
Essaye de voir quelle librairie utilisateur tu utilises et cherche s'il existe une version 4.30. Si c'est le cas c'est bien sinon ton code ne tourneras pas sauf à supprimer les commandes de la lib qui est en cause, voir plusieurs lib en cause.
Denis
Essaye de voir quelle librairie utilisateur tu utilises et cherche s'il existe une version 4.30. Si c'est le cas c'est bien sinon ton code ne tourneras pas sauf à supprimer les commandes de la lib qui est en cause, voir plusieurs lib en cause.
Denis
Ce n'est pas une librairie utilisateur, mais bien une librairie PB.
Et quand on regarde la taille, sous PB 4.20 il y avait "string", 8k
"StringExtension" de 13k... Taandis que maintenant il n'y a au départ à l'installation que "string" et sa taille est de 22k, soit comme si il y avait eu fusion des deux avec ménage... ?
Puis l'include ...
Voilà, voilà...
Et quand on regarde la taille, sous PB 4.20 il y avait "string", 8k
"StringExtension" de 13k... Taandis que maintenant il n'y a au départ à l'installation que "string" et sa taille est de 22k, soit comme si il y avait eu fusion des deux avec ménage... ?
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 *
; -------------------*
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
Debug Rep.s
Modification=0
;-----------------------------------------------------------------------------------------------------------
; SI on veux que cela soit redimensionnable ...
;-----------------------------------------------------------------------------------------------------------
;
IncludeFile "ProcedureResize.pbi"
;
; ==========================================================================
; 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........
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
Code : Tout sélectionner
;************************************************************
; 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
;
Je maintiens ce que je dis, d'ailleurs je bloque déjà sur cette ligne qui est une commande d'une lib utilisateur
C'est peut-être une lib de Gnozal ou autre.
Lorsque l'on crée un lib utilisateur, celle-ci a de grandes chances d'utiliser des fonctions PB. Ces fonctions PB dépendent de la version dans laquelle la lib utilisateur est créée. La lib Stringextension de PB a été supprimée et ses fonctions placées dans la lib String de PB.
D'ou la nécessité d'utiliser les librairies utilisateurs correspondantes à la version de PB
Code : Tout sélectionner
PureFILE_GetExePath
Lorsque l'on crée un lib utilisateur, celle-ci a de grandes chances d'utiliser des fonctions PB. Ces fonctions PB dépendent de la version dans laquelle la lib utilisateur est créée. La lib Stringextension de PB a été supprimée et ses fonctions placées dans la lib String de PB.
D'ou la nécessité d'utiliser les librairies utilisateurs correspondantes à la version de PB
teste moi ce code pour voir
pour info j'ai changer la fameuse fonction de la lib a Gnozal
en créant une nouvelle procédure "ProgramDirectory()"
(il me semble pourtant t'avoir répondu récemment a ce sujet....)
et j'ai tout réuni dans le même listing prg+include
donc teste tel quel !
pour info j'ai changer la fameuse fonction de la lib a Gnozal
en créant une nouvelle procédure "ProgramDirectory()"
(il me semble pourtant t'avoir répondu récemment a ce sujet....)
et j'ai tout réuni dans le même listing prg+include
donc teste tel quel !

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
Dernière modification par Backup le sam. 01/nov./2008 13:20, modifié 1 fois.
je viens de modifier le listing ci-dessus
car tu ne testais pas l'existence du dossier "Data"
et comme chez moi il n'était pas présent, ben ton prg ne marchais pas
voila qui est corrigé
ps : je n'ai pas ajouté la consultation du site choisi hein ... reste a faire
arf !! j'ai pas testé sous la V 4.30 , puisque je l'ai pas installé !! Pffff quel quiche !
de toute façn, ça marchais pas non plus en 4.20
car tu ne testais pas l'existence du dossier "Data"
et comme chez moi il n'était pas présent, ben ton prg ne marchais pas

voila qui est corrigé

ps : je n'ai pas ajouté la consultation du site choisi hein ... reste a faire

arf !! j'ai pas testé sous la V 4.30 , puisque je l'ai pas installé !! Pffff quel quiche !

de toute façn, ça marchais pas non plus en 4.20

Ben si justement, tel que je l'ai placé il marchait au poil sous 4.20... Y compris la sélection de site... (en cochant celui que l'on veux voir...)
ET ma question était justement celle là... Mais peut-être induite par la fonction Gnozal... Je fonce vers PB 3 et dis quoi...
Effectivement, tel que sous PB 3 Version Béta 4... Je confirme, et c'est la fonction de Gnozal "Rep.s=PureFILE_GetExePath()" qui par ricochet appelait certainement "StringExtension" qui n'existe plus sous PB 3...
Maintenant avec la procédure appelant l'API directement... Tout fonctionne...
Et c'est vrai que je ne testais pas l'existence du dossier Data... Manque d'habitude de cette manière de faire, qui je devrais l'avoir remarqué, se fait pour à peut près tout...
Tout comme c'est vrai que l'on en avait discuté... Mais je peut aussi là et t'affirmer, que la forme de repérage du fait d'avoir là au dessus dans "document..... directory les référence unique pour plusieurs version, me dérange beaucoup surtout que je passe essentiellement mon temps à regarder tout un peut partout avec les différente version... Et en arrivant sur le tard ça fait un paquet de chose à voir. Super PB, mais aussi super chargé
Et sous PB 4.2 PureFILE_GetExePath() me donnait ou j'étais ou que j'aille ce qui n'était pas le cas des autres formes qui me renvoyais toujours le répertoire de la dernière installation du à la référence unique.
Enfin un "mystère de plus résolut...", Je ne vais plus bougé de PB 4.2 avant la clôture définitive de PB 3.0... Trop d'inconnues ! Pour Comtois ça à l'air d'aller... Moi, pas encore.
ET ma question était justement celle là... Mais peut-être induite par la fonction Gnozal... Je fonce vers PB 3 et dis quoi...
Effectivement, tel que sous PB 3 Version Béta 4... Je confirme, et c'est la fonction de Gnozal "Rep.s=PureFILE_GetExePath()" qui par ricochet appelait certainement "StringExtension" qui n'existe plus sous PB 3...
Maintenant avec la procédure appelant l'API directement... Tout fonctionne...
Et c'est vrai que je ne testais pas l'existence du dossier Data... Manque d'habitude de cette manière de faire, qui je devrais l'avoir remarqué, se fait pour à peut près tout...

Tout comme c'est vrai que l'on en avait discuté... Mais je peut aussi là et t'affirmer, que la forme de repérage du fait d'avoir là au dessus dans "document..... directory les référence unique pour plusieurs version, me dérange beaucoup surtout que je passe essentiellement mon temps à regarder tout un peut partout avec les différente version... Et en arrivant sur le tard ça fait un paquet de chose à voir. Super PB, mais aussi super chargé

Enfin un "mystère de plus résolut...", Je ne vais plus bougé de PB 4.2 avant la clôture définitive de PB 3.0... Trop d'inconnues ! Pour Comtois ça à l'air d'aller... Moi, pas encore.
tout a faitGeBonet a écrit : Je ne vais plus bougé de PB 4.2 avant la clôture définitive de PB 3.0... Trop d'inconnues ! Pour Comtois ça à l'air d'aller... Moi, pas encore.

j'attends aussi la version finale !

apres tout Fred prefere avoir le retour des "anglais" pour les bugs et les suggestions... (il ne passe plus beaucoups ici, et ne tiens jamais compte de nos suggestions , cela nous force a aller sur les forum des mangeurs de trucs pas bon a la menthe)
du coup , je ne teste plus les beta version!
j'attends les version finale !

c'est ma façon de raler
