Pure_Smiley

Programmation d'applications complexes
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Pure_Smiley

Message 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 

Dernière modification par Zorro le mer. 08/juin/2016 19:42, modifié 6 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Pure_Smiley

Message par Ar-S »

N'utilise pas openfile ou fais la vérif avant sinon on se retrouve avec "le #File n'est pas initialisé"
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Pure_Smiley

Message 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
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Pure_Smiley

Message 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 ^^
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Pure_Smiley

Message par Ar-S »

Ouai, les smiley sont toujours là mais faudra que je le rénove... un jour ^^
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Pure_Smiley

Message 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
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Pure_Smiley

Message 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)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Bernie
Messages : 282
Inscription : mar. 22/mars/2016 10:12
Localisation : En France

Re: Pure_Smiley

Message par Bernie »

Merci du partage ça marche très bien
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Pure_Smiley

Message 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 :)
Dernière modification par Zorro le mer. 08/juin/2016 19:35, modifié 1 fois.
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Pure_Smiley

Message 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é
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Pure_Smiley

Message 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:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: Pure_Smiley

Message 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
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Pure_Smiley

Message 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
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Pure_Smiley

Message 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
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Pure_Smiley

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