Page 1 sur 2

Pure_Smiley

Publié : mar. 07/juin/2016 19:24
par Zorro
donc suite a mon astuce pour lire le contenu d'un repertoire sur son propre site
http://www.purebasic.fr/french/viewtopi ... =6&t=16091

voici une application concrète de l'utilité de cette méthode


un prg pour avoir des Smileys sous la main ...

le prg va lire toutes les images se trouvant dans un dossier de mon site (ou de votre site si vous changez )
et ceux quelques soit le nombre d'images que j'ajouterai ou retirerai ..

sans qu'on ait besoin de modifier le prg :)

le prg affiche les images smiley qu'il trouve (une centaine)
avec un Scroll bar pour defiler en horizontal ....
si vous survolez une image avec la souris le BBcode est automatiquement inscrit dans le String

plus qu'a sélectionner et coller dans vos forums préféré ! ;)
ça tombe bien, le notre, manque sérieusement de smiley ....

le code utilise mon site, mais bien sur je vous enjoint a utiliser le votre ;)

voici le source que vous pouvez utiliser tel quel ...
ps: la position de le fenetre est sauvegardé en quittant ...

Code : Tout sélectionner

;***********************************************
;Titre  :*Pure_Smiley
;Auteur  : Zorro
;Date  :07/06/2016
;Heure  :20:17:13
;Version Purebasic :  PureBasic 5.42 LTS (Windows - x86)
;Version de l'editeur :EPB V2.62
; Libairies necessaire : Aucune 
;***********************************************


UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()
Declare  recup_image(adresse.s)




Enumeration
	#win
	#Scroll_area
	#String
	#compteur
EndEnumeration
#File2=2
Structure Gadget 
	Identity_gadget.i
	BBcode.s
EndStructure

Global NewList Gadget.gadget()
if OpenFile(#file2,"Pure_Smiley.inf")
	Win_x=Val(ReadString(#file2))
	Win_y=Val(ReadString(#file2))
CloseFile(#file2)
Endif

If OpenWindow(#win, Win_x, Win_y, 800, 200, "Pure Smiley", #PB_Window_SystemMenu |#PB_Window_MinimizeGadget ) 
	
	StringGadget(#String, 10, 170, 700, 30, "")
	TextGadget(#compteur,GadgetWidth(#String)+30,GadgetY(#String),50,50,"0")
	ScrollAreaGadget(#Scroll_area, 10, 10, 800,150,80, 150, 30)
	
	
	Recup_image("http://michel.dobro.free.fr/Pure_Smiley/file_dir.txt")
	CloseGadgetList() 
	
	;-boucle
	Repeat 
		EventID.l=WaitWindowEvent()
		Select EventID
			Case #PB_Event_Gadget
			
			ForEach gadget()
				if Gadget()\Identity_gadget.i=EventGadget()
					SetGadgetText(#String, Gadget()\BBCode.s)
					Break
				Endif
			Next
		EndSelect
	Until EventID.l= #PB_Event_CloseWindow
	OpenFile(#file2,"Pure_Smiley.inf")
		WriteStringN(#file2,Str(WindowX(#win)))
		WriteStringN(#file2,Str(WindowY(#win)))
	CloseFile(#file2)
EndIf


;-Zone Procedures
Procedure Recup_image(Adresse.s)
	;By Zorro
	;-recuperation du fichier "file_dir.txt"
	InitNetwork()
	If ReceiveHTTPFile(Adresse.s,"file_dir.txt")
		
	Else
		MessageRequester("Erreur","Le fichier n'as pas pu etre récuperé !")
	Endif
	
	#file=1
	; initialisation position
	x_im=0 :y_im=0
	
	;-Lecture du contenu du fichier "file_dir.txt"
	If ReadFile(#file, "file_dir.txt")   ; Si le fichier peut être lu , on continue...
		While Eof(#file) = 0           ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File') 
			;Debug ReadString(#file)      ; Affiche le nom du fichier image
			Name_file.s=ReadString(#file) ;lit le nom des images dans le fichier
			extension.s="."+GetExtensionPart(Name_file.s)
			
			if extension.s =".gif" or extension.s =".bmp" or extension.s =".jpg" or extension.s =".jpeg" or extension.s =".tga" or extension.s =".png"
				Adresse.s=GetPathPart(Adresse.s) ; on recup l'adresse ou se trouve les images
				;-creation du webgadget avec l'adresse de l'image
				id_web_gadget=WebGadget(#pb_any,x_im,y_im,128,128,Adresse.s+"img/"+Name_file.s) ; creer un Webgadet pour afficher l'image
				;-ajout du numero du gadgetweb + adresse de l'image
				
				AddElement(Gadget())
				Gadget()\Identity_gadget.i = id_web_gadget
				Gadget()\BBcode.s ="[img]"+Adresse.s+"img/"+Name_file.s+"[/img]"
				x_im=x_im+130
				SetGadgetAttribute(#scroll_area, #PB_ScrollArea_InnerWidth  ,x_im) ; modifie l'Area de la fenetre
				compteur=compteur+1 ; accessoirement compte les images trouvée
				SetGadgetText(#compteur,str(compteur)) ; on l'affiche
			Endif
		Wend
		
	CloseFile(#file)               ; Ferme le fichier précédemment ouvert
Else
	MessageRequester("Information","Impossible d'ouvrir le fichier!")
EndIf
EndProcedure

; Epb 

Image


VErsion 2 avec resize fenetre et smiley danbs l'interface

Code : Tout sélectionner

;***********************************************
;Titre  :*Pure_Smiley
;Auteur  : Zorro
;Date  :07/06/2016
;Heure  :20:17:13
;Version Purebasic :  PureBasic 5.42 LTS (Windows - x86)
;Version de l'editeur :EPB V2.62
; Libairies necessaire : Aucune 
;***********************************************


UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()
Taille_x=64 ; taille x du Smiley representé dans l'interface Max 128 ......Min 16
Taille_y=64 ; ; taille y du Smiley representé dans l'interface Max 128 ..... min 16
Declare  recup_image(adresse.s,Taille_x,Taille_y)




Enumeration
	#win
	#Scroll_area
	#String
	#compteur
EndEnumeration
#File2=2
Structure Gadget 
	Identity_gadget.i
	BBcode.s
EndStructure

Global NewList Gadget.gadget()
if OpenFile(#file2,"Pure_Smiley.inf")
	Win_x=Val(ReadString(#file2))
	Win_y=Val(ReadString(#file2))
CloseFile(#file2)
Endif

If OpenWindow(#win, Win_x, Win_y, 800, 200, "Pure Smiley", #PB_Window_SystemMenu |#PB_Window_MinimizeGadget ) 
	
	StringGadget(#String, 10, 170, 700, 30, "")
	TextGadget(#compteur,GadgetWidth(#String)+30,GadgetY(#String),50,50,"0")
	ScrollAreaGadget(#Scroll_area, 10, 10, 800,150,80, 150, 30)
	
	Recup_image("http://michel.dobro.free.fr/Pure_Smiley/file_dir.txt",Taille_x,Taille_y)
	ResizeWindow(#win,#PB_Ignore,#PB_Ignore,#PB_Ignore,50+Taille_y +20)
	ResizeGadget(#Scroll_area,#pb_ignore,#PB_Ignore,#PB_Ignore,WindowHeight(#win)-50)
	ResizeGadget(#string,#pb_ignore,WindowHeight(#win)-30,#PB_Ignore,#PB_Ignore)
	ResizeGadget(#compteur,#pb_ignore,WindowHeight(#win)-30,#PB_Ignore,#PB_Ignore)
	
	CloseGadgetList() 
	
	;-boucle
	Repeat 
		EventID.l=WaitWindowEvent()
		Select EventID
			Case #PB_Event_Gadget
			
			ForEach gadget()
				if Gadget()\Identity_gadget.i=EventGadget()
					SetGadgetText(#String, Gadget()\BBCode.s)
					Break
				Endif
			Next
		EndSelect
	Until EventID.l= #PB_Event_CloseWindow
	OpenFile(#file2,"Pure_Smiley.inf")
		WriteStringN(#file2,Str(WindowX(#win)))
		WriteStringN(#file2,Str(WindowY(#win)))
	CloseFile(#file2)
EndIf


;-Zone Procedures
Procedure Recup_image(Adresse.s,Taille_x,Taille_y)
	;By Zorro
	;-recuperation du fichier "file_dir.txt"
	
	
	InitNetwork()
	If ReceiveHTTPFile(Adresse.s,"file_dir.txt")
		
	Else
		MessageRequester("Erreur","Le fichier n'as pas pu etre récuperé !")
	Endif
	
	#file=1
	; initialisation position
	x_im=0 :y_im=0
	
	;-Lecture du contenu du fichier "file_dir.txt"
	If ReadFile(#file, "file_dir.txt")   ; Si le fichier peut être lu , on continue...
		While Eof(#file) = 0           ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File') 
			;Debug ReadString(#file)      ; Affiche le nom du fichier image
			Name_file.s=ReadString(#file) ;lit le nom des images dans le fichier
			extension.s="."+GetExtensionPart(Name_file.s)
			
			if extension.s =".gif" or extension.s =".bmp" or extension.s =".jpg" or extension.s =".jpeg" or extension.s =".tga" or extension.s =".png"
				Adresse.s=GetPathPart(Adresse.s) ; on recup l'adresse ou se trouve les images
				
				;-creation du webgadget avec l'adresse de l'image
				; on creer une page Html pour pouvoir redimentionner les images, de sorte qu'elle restent
				; compatible avec l'interface 
				; mais les images auront leur Vraie taille sur le Forum 
				
				adr$=""
				Html$=""
				
				adr$=Adresse.s+"img/"+Name_file.s
				
				Html$+"<!DOCTYPE html>"+chr(10)
				Html$+"<html>"+chr(10)
				Html$+"<head>"+chr(10)
				; <meta content="text/html; charset=UTF-8" http-equiv="content-type">
				Html$+"<meta content="+chr(34)+"text/html; charset=UTF-8"+chr(34)+" http-equiv="+chr(34)+"content-type"+chr(34)+"> "+chr(10)
				Html$+" <title></title> "+chr(10)
				Html$+"</head>"+chr(10)
				Html$+"<body>"+chr(10)
				Html$+"<p><br>"+chr(10)
				
				Html$+"<img style="+chr(34)+"POSITION: absolute; TOP: 0px; LEFT: 0px; border: 0 "+chr(34)+" src="+chr(34)+adr$+chr(34)+" align="+chr(34)+"top"+chr(34)+" height="+chr(34)+str(Taille_x)+chr(34)+" width="+chr(34)+str(Taille_y)+chr(34)+">"+chr(10)
				Html$+"</p>"    +chr(10)
				Html$+"</body>"+chr(10)
				Html$+"</html>"+chr(10)
				
				id_web_gadget=WebGadget(#pb_any,x_im,y_im,Taille_x+16,Taille_y+16,"") ; creer un Webgadet pour afficher l'image
				SetGadgetItemText(id_web_gadget, #PB_Web_HtmlCode ,html$)
				
				;-ajout du numero du gadgetweb + adresse de l'image
				AddElement(Gadget())
				Gadget()\Identity_gadget.i = id_web_gadget
				Gadget()\BBcode.s ="[img]"+Adresse.s+"img/"+Name_file.s+"[/img]"
				x_im=x_im+130
				SetGadgetAttribute(#scroll_area, #PB_ScrollArea_InnerWidth  ,x_im) ; modifie l'Area de la fenetre
				compteur=compteur+1 ; accessoirement compte les images trouvée
				SetGadgetText(#compteur,str(compteur)) ; on l'affiche
			Endif
		Wend
		
	CloseFile(#file)               ; Ferme le fichier précédemment ouvert
Else
	MessageRequester("Information","Impossible d'ouvrir le fichier!")
EndIf
EndProcedure

; Epb 


Re: Pure_Smiley

Publié : mar. 07/juin/2016 20:00
par Ar-S
N'utilise pas openfile ou fais la vérif avant sinon on se retrouve avec "le #File n'est pas initialisé"

Re: Pure_Smiley

Publié : mar. 07/juin/2016 20:07
par Zorro
Ar-S a écrit :N'utilise pas openfile ou fais la vérif avant sinon on se retrouve avec "le #File n'est pas initialisé"

j'ai trouvé le bleme !!
j'avais utiliser la meme constante #file dans le prg
c'est corrigé .. Merci :) Image

Re: Pure_Smiley

Publié : mar. 07/juin/2016 20:24
par falsam
Chez toi ça doit fonctionner parce que le fichier Pure_Smiley.inf existe. Pour ceux qui exécute ce fichier la premiere fois, ce fichier manque et provoque une erreur ligne ligne 36.

ça me rappelle un code d'Ar-S (BBCODE Smile Me) que j'ai utilisé pendant quelques temps.

:arrow: http://ldvmultimedia.com/telecharger_bb ... 1ceV5GLRhE

Un peu de pub quand c'est bien, ça ne fait pas de mal ^^

Re: Pure_Smiley

Publié : mar. 07/juin/2016 22:35
par Ar-S
Ouai, les smiley sont toujours là mais faudra que je le rénove... un jour ^^

Re: Pure_Smiley

Publié : mer. 08/juin/2016 8:03
par Zorro
falsam a écrit :Chez toi ça doit fonctionner parce que le fichier Pure_Smiley.inf existe. Pour ceux qui exécute ce fichier la premiere fois, ce fichier manque et provoque une erreur ligne ligne 36.
ben pas chez moi !!
de plus je me demande pourquoi il y aurai une erreur !??
partant du principe que la fonction OpenFile() si elle ne trouve pas de fichier , elle le creer !!
les variables Win_x et Win_y ,dans ce cas prennent la valeur 0, et la fenetre se retrouve en haut a gauche de l'ecran .....
toutefois ,j'ai ajouté un if ... mais chez moi, ça n'a jamais planté !!!

ça me rappelle un code d'Ar-S (BBCODE Smile Me) que j'ai utilisé pendant quelques temps.

:arrow: http://ldvmultimedia.com/telecharger_bb ... 1ceV5GLRhE

Un peu de pub quand c'est bien, ça ne fait pas de mal ^^

j'ai deja parlé du prg de AR-s ici :
http://www.purebasic.fr/french/viewtopi ... =6&t=16091

ici j'applique concrètement ce que j'explique dans ce post ...
de tout façons , je ne revendiquais pas la paternité de l'idée du prg de Smileys , puisque moi-meme, j'en parle (du prg de Ar-s )
dans ce topic sur le Scan d'un dossier Internet

l'avantage ici , c'est quand meme de disposer du source .... non ?


Image

Re: Pure_Smiley

Publié : mer. 08/juin/2016 9:57
par Kwai chang caine
Il est joli ce petit crabe :mrgreen:

Bon, je ne peux pas l'essayer car comme dab pas de gestion des PROXY :cry:

Au premier regard, c'est pas beau ça :wink:

Code : Tout sélectionner

   If ReceiveHTTPFile(Adresse.s,"file_dir.txt")
      
   Else
      MessageRequester("Erreur","Le fichier n'as pas pu etre récuperé !")
   EndIf
pourquoi n'utilises tu pas ?

Code : Tout sélectionner

   If Not ReceiveHTTPFile(Adresse.s,"file_dir.txt")
      MessageRequester("Erreur","Le fichier n'as pas pu etre récuperé !")
   EndIf
Enfin ce que j'en dit..

En tout cas merci pour le partage 8)

Re: Pure_Smiley

Publié : mer. 08/juin/2016 9:59
par Bernie
Merci du partage ça marche très bien

Re: Pure_Smiley

Publié : mer. 08/juin/2016 13:24
par Zorro
Kwai chang caine a écrit : pourquoi n'utilises tu pas ?

Code : Tout sélectionner

If Not ReceiveHTTPFile(Adresse.s,"file_dir.txt")
      MessageRequester("Erreur","Le fichier n'as pas pu etre récuperé !")
   EndIf

et bien figure toi que je n'utilise pas ce genre de formulation par ... principe :)
tu sais je suis de la vieille ecole en Programmation Basic
et ça : If Not .... c'est pour moi un non sens :)
je sais que ça fonctionne , avec PB et qu'il faut vivre avec son temps :)

mais pour moi un "Not" n'a rien a faire dans un "If" !!
un not c'est un operateur booleen , donc dans le cadre d'un traitement "chiffre " ou binaire
ça prends son sens , mais dans une condition , non !

pour moi une condition c'est une evaluation , pas un traitement mathematique
et pour ça on a inventé le "Else" ou bien a la rigueur "<>"

donc un If xxx Else yyy Endif ben... c'est tres beau :)

mais tu te souviens, il y a un autre truc sur lequel je ne suis pas d'accords
c'est l'utilisation de toto+1 au lieu de toto=toto+1

sémantiquement parlant, c'est pas la meme chose ! ... mais bon , je ne me refais pas , c'est ça etre un vieux con
[reedit] bon j'essai de me soigner, il n'y a qu'a regarder ma variable "Html$" ;) [/reedit]

ps: j'ajouterai un smiley apres, car la je bosse encore sur le code

Merci pour ta remarque :)

Re: Pure_Smiley

Publié : mer. 08/juin/2016 14:39
par Zorro
ajout dans le premier message
d'une version utilisant le Html
cela permet de resizer les images et donc l'interface de sorte
qu'on puisse reduire l'interface
la taille est a modifier dans le code Taille_x et Taille_y

cela ne change pas la taille des Smiley en sortie
mais juste la taille des Smiley a l'interieur de l'interface ...
cela permet ainsi d'avoir une fenetre moins haute ....
la fenetre et ses gadgets ,se recadrent tout seul en fonction de la taille demandé

Re: Pure_Smiley

Publié : mer. 08/juin/2016 15:09
par Kwai chang caine
mais pour moi un "Not" n'a rien a faire dans un "If" !!
un not c'est un operateur booleen , donc dans le cadre d'un traitement "chiffre " ou binaire
ça prends son sens , mais dans une condition , non !
....................................
....................................
....................................
Alors la pour le coups, toi qui aime te simplifier la vie au maximum .....tu as drolement pensé pour une si petite fonction 8O
Image
J'espere que t'as pas réfléchis pour chacune des 1000 fonctions de PB comme ça :lol:

D'un autre coté je te comprend un peu
Car moi c'est les "if not is(quequechose)" qui me perturbent
En français "si non c'est quequechose", et ben j'ai mis un temps fou à les utiliser que ce soit en VB ou PB

En tout cas merci de ton explication plus que détaillée :wink:

Re: Pure_Smiley

Publié : mer. 08/juin/2016 15:53
par Marc56
Moi j'aime bien le If Not :mrgreen: , ça sous-entend "ce qui suit à loupé" et c'est ce qu'on fait aussi en C et tous ses dérivés avec l'opérateur « ! »
Le but étant d'en écrire le moins possible pour faciliter la maintenance.
En Basic, depuis la nuit des temps, on écrit souvent While Not Eof(0) qui est bien plus compréhensible (IMHO) que While Eof(0) = 0

:P

Re: Pure_Smiley

Publié : mer. 08/juin/2016 19:25
par Zorro
Marc56 a écrit : qui est bien plus compréhensible (IMHO) que While Eof(0) = 0

:P
je ne trouve pas :mrgreen: Image <--- ça c'est parceque je m'amuse avec mon nouveau joujou :)

J'espere que t'as pas réfléchis pour chacune des 1000 fonctions de PB comme ça
Serieux ? ; il y en a 1000 ?? Image

Re: Pure_Smiley

Publié : mer. 08/juin/2016 19:32
par Kwai chang caine
Bah on doit pas être bien loin
Car il y a pas mal de temps y'en avait 800, faut demander au debugger, mais je dois pas être bien loin

Re: Pure_Smiley

Publié : mer. 08/juin/2016 19:37
par Zorro
avoir autant de fonctions et faire si peu avec ...
c'est comme les voitures , plein de chevaux, et pas le droit de depasser 50 en aglomération.. :mrgreen: