[ Résolut ] Librairiie "String" et "stringext

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

[ Résolut ] Librairiie "String" et "stringext

Message par GeBonet »

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 ???
Dernière modification par GeBonet le dim. 02/nov./2008 16:16, modifié 1 fois.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

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.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

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
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

Message par GeBonet »

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... ?

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  
Puis l'include ...

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
;
Voilà, voilà...
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Je maintiens ce que je dis, d'ailleurs je bloque déjà sur cette ligne qui est une commande d'une lib utilisateur

Code : Tout sélectionner

PureFILE_GetExePath
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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

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 ! :)

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.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

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 :lol:

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 ! :lol:

de toute façn, ça marchais pas non plus en 4.20 :D
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

Message par GeBonet »

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... :oops:

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é :lol: 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.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

GeBonet 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.
tout a fait :)

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 :D
Répondre