Librairie load_Net()

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Librairie load_Net()

Message par Zorro »

voici en poursuivant l'idée une collection de fonctions
qui permettent d'utiliser des fichiers media, localisés sur internet
je n'ai pas tenu compte des parametres optionnel de certaines fonction Load()
simplement, parceque je ne sais plus comment on fait pour declarer un parametre optionnel dans une procedure ....

@Ar-s j'ai uniformisé les procedures, inutile d'inclure les Pluggin (UsePNGImageDecoder() .... )
puisqu'en principe ceux ci sont deja dans le code qui utilisera ces procedures ;)
si tu veux t'amuser a rajouter les parametres optionnel , c'est toi qui voit :)


voici le code, libre a vous de le modifier :)

Code : Tout sélectionner

;***********************************************
;Titre  :*internet_load()
;Auteur  : Dobro and Ar-s
;Date  :02/07/2016
;Heure  :17:01:08
;Version Purebasic :  PureBasic 5.42 LTS (Windows - x86)
;Version de l'editeur :EPB V2.64
; Libairies necessaire : Aucune 
;***********************************************
UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()


Declare openwindow_win()
Declare.l loadimage_net(adr$,nom_fichier$)
Declare.l loadsound_net(adr$,nom_fichier$)
Declare.l loadsound3d_net(adr$,nom_fichier$)
Declare.l loadmusic_net(adr$,nom_fichier$)
Declare.l loadsprite_net(adr$,nom_fichier$)
Declare.l loadmovie_net(adr$,nom_fichier$)
Declare.l loadfont_net(adr$,nom_fichier$,taille)
Declare catchimage_net(adr$)
Declare catchsound_net(adr$)
Declare catchmusic_net(adr$)
Declare catchsprite_net(adr$)



; ************************************* Code Sample ***********************************
;{- Enumerations / DataSections
;{ Windows
Enumeration
		#Win
EndEnumeration
;}
;{ Gadgets
Enumeration
		#Image_gadget
		#Text_titre
		#Button_Play
EndEnumeration
;}
;{ Images
Enumeration
		#Image
EndEnumeration
;}
Define.l Event
InitSound()


;}
Procedure OpenWindow_Win()
		If OpenWindow(#Win, 404, 84, 400, 400, "Demo Lib Loadnet by Dobro", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
				ImageGadget(#Image_gadget, 45, 50, 295, 270, 0, #PB_Image_Border)
				TextGadget(#Text_titre, 160, 10, 95, 25, "Demo Lib Load Net")
				ButtonGadget(#Button_Play, 45, 340, 80, 35, "Play")
				
		EndIf
EndProcedure

OpenWindow_Win()


;{- Event loop
Repeat
		Event = WaitWindowEvent(12)
		Select Event
				; ///////////////////
		Case #PB_Event_Gadget
				Select EventGadget()
				Case #Image_gadget
				Case #Text_titre
				Case #Button_Play
						Adr$="http://michel.dobro.free.fr/Bank_images/"
						nom_fichier$="girl2.bmp"
						;im=Loadimage_net(Adr$,nom_fichier$) ; Choice 1
						im=CatchImage_Net(Adr$ + nom_fichier$) ; choice 2
						if im>0
								SetGadgetState(#Image_gadget, imageId(im))
						Endif
						nom_music$="Maupiti.mod"
						;music=LoadMusic_net(Adr$,nom_music$) ; choice 1
						music= CatchMusic_Net(Adr$+nom_music$) ; choice 2
						if music>0
								PlayMusic(music)
						Endif
				EndSelect
				; ////////////////////////
		Case #PB_Event_CloseWindow
				Select EventWindow()
				Case #Win
						CloseWindow(#Win)
						Break
				EndSelect
		EndSelect
Forever
;
;}
; ********************************************************************************************

; ***************************** Librairie LoadNEt *****************************************
Procedure.l Loadimage_net(Adr$,nom_fichier$)
		
		; By Dobro
		;Adr$=adresse du fichier image a charger
		;nom_image$ = nom qu'on donne a cette image
		; la procedure renvoi l'Id de l'image recupérée ou False en cas d'erreur
		Protected image
		if InitNetwork()
				path$=GetTemporaryDirectory()
				If ReceiveHTTPFile(Adr$+nom_fichier$,path$+nom_fichier$)
						image=LoadImage(#pb_any,path$+nom_fichier$)
						DeleteFile(path$+nom_fichier$)
						ProcedureReturn image
				Else
						ProcedureReturn #false
				EndIf
		Else
				ProcedureReturn #false
		Endif
EndProcedure

Procedure.l LoadSound_net(Adr$,nom_fichier$)
		; By Dobro
		;Adr$=adresse du fichier image a charger
		;nom_fichier$ = nom qu'on donne a ce son
		; la procedure renvoi l'Id du son recupéré ou False en cas d'erreur
		Protected sound,path$
		InitNetwork()
		path$=GetTemporaryDirectory()
		If ReceiveHTTPFile(Adr$+nom_fichier$, path$+nom_fichier$)
				sound=LoadSound(#pb_any, path$+nom_fichier$)
				DeleteFile(path$+nom_fichier$)
				ProcedureReturn sound
		Else
				ProcedureReturn #false
		EndIf
EndProcedure

Procedure.l LoadSound3D_net(Adr$,nom_fichier$)
		; By Dobro
		;Adr$=adresse du fichier image a charger
		;nom_fichier$ = nom qu'on donne a ce son
		; la procedure renvoi l'Id du son recupéré ou False en cas d'erreur
		Protected sound,path$
		InitNetwork()
		path$=GetTemporaryDirectory()
		If ReceiveHTTPFile(Adr$+nom_fichier$, path$+nom_fichier$)
				sound=LoadSound3D(#pb_any, path$+nom_fichier$)
				DeleteFile(path$+nom_fichier$)
				ProcedureReturn sound
		Else
				ProcedureReturn #false
		EndIf
EndProcedure

Procedure.l LoadMusic_net(Adr$,nom_fichier$)
		; By Dobro
		;Adr$=adresse du fichier image a charger
		;nom_fichier$ = nom qu'on donne a cette Musique
		; la procedure renvoi l'Id de la Music recupérée ou False en cas d'erreur
		Protected Music, path$
		InitNetwork()
		path$=GetTemporaryDirectory()
		If ReceiveHTTPFile(Adr$+nom_fichier$, path$+nom_fichier$)
				Music=LoadMusic(#pb_any,path$+nom_fichier$)
				DeleteFile(path$+nom_fichier$)
				ProcedureReturn Music
		Else
				ProcedureReturn #false
		EndIf
EndProcedure

Procedure.l LoadSprite_net(Adr$,nom_fichier$)
		; By Dobro
		;Adr$=adresse du fichier image a charger
		;nom_fichier$ = nom qu'on donne a ce Sprite
		; la procedure renvoi l'Id du Sprite recupéré ou False en cas d'erreur
		Protected spr,path$
		InitNetwork()
		path$=GetTemporaryDirectory()
		If ReceiveHTTPFile(Adr$+nom_fichier$, path$+nom_fichier$) 
				spr=LoadSprite(#pb_any, path$+nom_fichier$)
				DeleteFile(path$+nom_fichier$)
				ProcedureReturn spr
		Else
				ProcedureReturn #false
		EndIf
EndProcedure

Procedure.l LoadMovie_net(Adr$,nom_fichier$)
		; By Dobro
		;Adr$=adresse du fichier image a charger
		;nom_fichier$ = nom qu'on donne a cette Video
		; la procedure renvoi l'Id de la video recup?r? ou False en cas d'erreur
		Protected movie
		InitNetwork()
		path$=GetTemporaryDirectory()
		If ReceiveHTTPFile(Adr$+nom_fichier$, path$+nom_fichier$)
				movie=LoadSprite(#pb_any, path$+nom_fichier$)
				DeleteFile(path$+nom_fichier$)
				ProcedureReturn movie
		Else
				ProcedureReturn #false
		EndIf
EndProcedure

Procedure.l LoadFont_net(Adr$,nom_fichier$,taille)
		; By Dobro
		;Adr$=adresse du fichier image a charger
		;taille = taille de la fonte
		; la procedure renvoi l'Id de la Fonte recupérée ou False en cas d'erreur
		Protected Font
		InitNetwork()
		path$=GetTemporaryDirectory()
		If ReceiveHTTPFile(Adr$+nom_fichier$, path$+nom_fichier$)
				Font=LoadFont(#pb_any, path$+nom_fichier$,taille)
				DeleteFile(path$+nom_fichier$)
				ProcedureReturn Font
		Else
				ProcedureReturn #false
		EndIf
EndProcedure

; ************** les Catchs ***********************************************************

Procedure CatchImage_Net(Adr$)
		InitNetwork()
		Protected image
		; By Ar-S  
		*Buffer = ReceiveHTTPMemory(Adr$)
		If *Buffer
				Image = CatchImage(#PB_Any, *Buffer, MemorySize(*Buffer) )
				FreeMemory(*Buffer)
				ProcedureReturn Image
		Else
				ProcedureReturn #false   
		EndIf
EndProcedure

Procedure CatchSound_Net(Adr$)
		InitNetwork()
		Protected sound
		
		; By Ar-S  
		*Buffer = ReceiveHTTPMemory(Adr$)
		If *Buffer
				Sound = Catchsound(#PB_Any, *Buffer, MemorySize(*Buffer) )
				FreeMemory(*Buffer)
				ProcedureReturn Sound
		Else
				ProcedureReturn #false  
		EndIf
EndProcedure


Procedure CatchMusic_Net(Adr$)
		InitNetwork()
		Protected Music
		; By Ar-S  
		*Buffer = ReceiveHTTPMemory(Adr$)
		If *Buffer
				Music = CatchMusic(#PB_Any, *Buffer, MemorySize(*Buffer) )
				FreeMemory(*Buffer)
				ProcedureReturn Music
		Else
				ProcedureReturn #false  
		EndIf
EndProcedure

Procedure CatchSprite_Net(Adr$)
		InitNetwork()
		Protected Spr
		; By Ar-S  
		*Buffer = ReceiveHTTPMemory(Adr$)
		If *Buffer
				Spr = CatchSprite(#PB_Any, *Buffer, MemorySize(*Buffer) )
				FreeMemory(*Buffer)
				ProcedureReturn Spr
		Else
				ProcedureReturn #false  
		EndIf
Endprocedure


; Epb
Dernière modification par Zorro le lun. 18/juil./2016 18:52, modifié 2 fois.
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: Librairie load_Net()

Message par Marc56 »

Merci pour cette lib :)
Zorro a écrit : je n'ai pas tenu compte des parametres optionnel de certaines fonction Load()
simplement, parceque je ne sais plus comment on fait pour declarer un parametre optionnel dans une procedure ....
  • Paramètre(s) optionnel(s) après paramètre(s) obligatoire(s)
    AND
  • Paramètre(s) optionnel(s) avec une valeur par défaut

Code : Tout sélectionner

Declare Calcul(num1, num2=0)

Procedure Calcul(num1, num2=0)
    ProcedureReturn num1 * num2
EndProcedure

Debug Calcul (2, 3)   ; 6
Debug Calcul (2)      ; 0
(Dérivé de l'exemple de l'aide sur Procedure)

Mais je ne sais pas si j'ai bien compris la question, j'ai un peu de mal ce matin :?

:wink:
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: Librairie load_Net()

Message par Marc56 »

Juste pour le plaisir de coder :P

Je pense qu'étant donné que les 6 premières procédures se ressemblent, elles pourraient être compilées en une seule avec un paramètre supplémentaire.

Exemple fonctionnel de test.

Code : Tout sélectionner

EnableExplicit

Global ID.l

Declare.l Load_From_Internet(Adr$, nom_fichier$, FileType$)

Procedure.l Load_From_Internet(Adr$, nom_fichier$, FileType$)
    ; Initial code By Dobro
    ; Adr$=adresse du fichier à charger
    ; la procédure renvoie l'Id de l'image récupérée ou False en cas d'erreur
    Protected Tmp_Fichier$ = GetTemporaryDirectory() + nom_fichier$
    InitNetwork()
    
    If FileType$ = ""
        Debug "Type de Fichier non précisé"
        ProcedureReturn #False
    EndIf   
    
    If ReceiveHTTPFile(Adr$, Tmp_Fichier$)
        Debug "OK, Fichier Chargé: " + Tmp_Fichier$
        
        Select FileType$
            Case "Image"     
                ID = LoadImage(#PB_Any,      Tmp_Fichier$)
            Case "Sound"
                ID = LoadSound(#PB_Any,      Tmp_Fichier$)
            Case "Sound3D"
                ID = LoadSound3D(#PB_Any,    Tmp_Fichier$)
            Case "Music"
                ID = LoadMusic(#PB_Any,      Tmp_Fichier$)
            Case "Sprite"
                ID = LoadSprite(#PB_Any,     Tmp_Fichier$)
            Case "Movie"
                ID = LoadSprite(#PB_Any,     Tmp_Fichier$)
            Default
                Debug "Erreur: Type de fichier non précisé"
        EndSelect 
        
        If DeleteFile(Tmp_Fichier$) : Debug Tmp_Fichier$ +  " Supprimé." : EndIf
        
        ProcedureReturn ID
    Else
        ProcedureReturn #False
    EndIf
EndProcedure


; --- Test

UsePNGImageDecoder()

If Load_From_Internet("http://www.purebasic.com/images/box.png", "box.png", "Image")
    Debug "OK ID = " + ID
Else
    Debug "Echec au chargement en mémoire (ID = " + ID + ")"
EndIf
Celle du LoadFont pourrait aussi être traitée en jouant sur un paramètre variable (analyser si le troisième paramètre est un nombre)

Même système pour les 4 dernières.

:wink:
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Librairie load_Net()

Message par Zorro »

Marc56 a écrit :Juste pour le plaisir de coder :P

Je pense qu'étant donné que les 6 premières procédures se ressemblent, elles pourraient être compilées en une seule avec un paramètre supplémentaire.

non en fait j'ai fait expres de ne pas tout reunir !
pour rester dans la philosophie de Purebasic , qui propose des fonction loadimage() pour les images , loadmovie() pour les videos etc ..

le but etant la clarté , chaque fonction ayant son mode, son nom !

car il ne sert a rien d'avoir dans ton code des fonctions qui ne servirons pas
pourquoi avoir dans ton listing un loadSound si tu ne t'en sert pas ??
il n'est pas exclu que le compilo grossisse ton executable en chargeant une librairie meme si tu n'en fait pas appel ...

le but est de completer les fonctions de Purebasic , pas de faire un mega pack ou tu appel toutes les fonctions de Purebasic avec un seul nom mais moultes parametres .. :mrgreen: :mrgreen:

ta manie de vouloir faire une usine a gaz te reprends :mrgreen: :)

le principe d'une librairie , c'est une collections de fonctions (procedures )
et tu pioches seulement celles que tu veux ;) (comme avec le Purebasic)

Merci pour le rappel sur les parametres optionnel :)
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: Librairie load_Net()

Message par Marc56 »

Ah, OK :) donc ton code n'est pas à considérer comme un fichier unique, mais on copie/colle simplement la procédure dont on a besoin. C'est ça ?
Je m'y perds entre libraries, dll, modules, .pbi etc :roll: et ton libellé de topic "Librairie" m'a trompé. :o

DLL, je connais: module compilé dont les fonctions peuvent être appelées par plusieurs programmes. Une DLL doit être livrée avec l'application (ou déjà présente sur le disque). Elle n'est pas nécessairement écrite dans le même langage que le programme appelant.

.pbi: fichier source (Pure Basic Include) inclus au moment de la compilation. La totalité du fichier est compilé, même si le programme n'en utilise qu'une partie.

Module: je relis ça, mais j'ai du mal :?

Comment faire pour qu'en PB le programme principal puisse prendre dans un autre code source, seulement les procédures dont il a besoin et les compile dans l'EXE (un (X)Include partiel en quelque sortes) ? C'est ça un module ?

:?:
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Librairie load_Net()

Message par Zorro »

une librairie c'est un ensemble de procedures ...

ensuite il y a different type de librairies

les DLL (tout est compilé a l'interieur d'un fichier conteneur (DLL )
appelable a partir de ton prg compilé , bref les 2 sont compilés ...

les Modules : un source,d'une collection de Procedures, qui peut etre appelé par le prg
les modules ne sont pas compilé, le source est visible , lorsque tu fais appel a une fonction d'un module
le module est compilé avec ton prg ...c'est transparent pour nous ) , le seul defaut, le sources est visible ...
donc lorsque tu partage ton source, on a accé aussi aux sources des modules que tu as utilisés....
mais c'est aussi un avantage puisqu'on peut modifier le contenu d'une procedure qui plante ...

les Librairies Taillbite : un prg Taillbite (utilitaire indépendant) permet de compiler sa propre librairie a poser dans le dossier Librairies_user de PB , donc ta collection de Procedures sera compilé en Lib (va voir ton dossier \Purebasic_5_42\x86\PureLibraries\UserLibraries )
ensuite l'appel des fonctions se fait comme pour une fonction Purebasic
le source n'est pas accessible contrairement aux Modules

si tu fait une Procedure TOTO() , ben tu pourra l'appeler de la meme façon que DisplaySprite()

mais Tailbite n'est pas toujours a jour ...
le probleme c'est que ta lib est fermé ; si une évolution de PB la rend incompatible, c'est foutu si t'a pas le source ...

et puis...

tu as une collections de Procedures (une librairie donc, comme ci dessus )
c'est a dire que tu te codes ou récupère une collections de procedures qui vont bien
et lorsque tu a besoin d'un truc, tu va piocher la (ou les) procedures que tu desires , dans ton stock de codes

perso je ne code pratiquement que par copier-collé (j'ai un gros stock de code )
mais il m'arrive aussi de coder a la main de temps en temps :mrgreen:

pour transformer une libraire en fonction appelable comme les fonction de purebasic
l'utilisation de Tailbite est essentiel ... comme ça tu te fait un Purebasic maison en y ajoutant tes propres fonctions
mais attention , si tu partage ton code sur le forum , seulement ceux qui disposent de ta librairie pourrons utiliser tes codes ... ;)
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: Librairie load_Net()

Message par Marc56 »

OK, Merci pour cette explication précise :P
Zorro a écrit :... lorsque tu fais appel a une fonction d'un module le module est compilé avec ton prg...
Question subsidiaire: Quand un fichier module contient plusieurs procédures et que le programme principal n'en appelle qu'une seule, est-ce que c'est tout le fichier module qui est compilé et inclus dans le code principal ou seulement la procédure appelée (et les éventuelles déclarations) ?
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Librairie load_Net()

Message par Micoute »

Veuillez m'excuser pour cette intrusion dans ce post, mais il faut je fasse un éclaicissement Les modules sont un moyen facile d'isoler un morceau de code à partir d'un code principal, permettant ainsi la réutilisation d'un code et son partage sans risque de conflit de nom.Ce qui permet d'avoir plusieurs procédures portant exactement le même nom, à partir du moment qu'elles se trouvent dans un module différent. Ainsi je peux avoir 2 modules, un pour l'écran et un pour les fenêtres, par exemple, et avoir dans chacun une procédure Afficher(), pour les appeler on fera ecran::Afficher() ou Fenetre::Afficher() ou UseModule Ecran : Afficher() et pour sortir du module on fera UnuseModule Ecran ou Fenetre selon le cas, idem pour Fenetre, les 2 pouvant être dans le même programme.

Il faut savoir que quand on utilise des bibliothèques de fonctions utilisateurs ou des modules, seules les procédures utilisées seront compilées dans le programmes final.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Librairie load_Net()

Message par Zorro »

Marc56 a écrit : Quand un fichier module contient plusieurs procédures et que le programme principal n'en appelle qu'une seule, est-ce que c'est tout le fichier module qui est compilé et inclus dans le code principal ou seulement la procédure appelée (et les éventuelles déclarations) ?
Fred a l’époque avait expliqué que seule la fonction appelé etait linké (contrairement au Dark Basic qui chargeait tout ! )

mais le problème c'est que depuis cette affirmation, il a changer le compilateur/linker , et va encore le changer prochainement
(si j'ai bien suivi ) ..

qu'en sera t'il pour le futur ??

toutefois lorsqu tu as groupée les appels de plusieurs fonction Purebasic dans une seule Grosse Procedures
ça m'a fait mal aux yeux .. :)
j'imaginais le Purebasic avec une seule fonction et un parametre qui change style :

Appel_fonction(displaysprite,xx,xx,xx)
Appel_fonction(debug,xx)
Appel_fonction(flipbuffer)

:lol:
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: Librairie load_Net()

Message par Marc56 »

Merci à vous deux.

@Micoute: je n'ai pas trouvé la phrase dont tu fais référence « Il faut savoir que quand on utilise des bibliothèques de fonctions utilisateurs ou des modules, seules les procédures utilisées seront compilées dans le programmes final. » Ni dans la doc en ligne, ni via Google ? d'où cela vient-il ? Est-ce dans la doc de PB ou ailleurs (autre langage?)

:wink:
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Librairie load_Net()

Message par Zorro »

c'est Fred qui l'avait dit ;)
mais depuis il y a eu quelque changement de compilateur donc ....???
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Librairie load_Net()

Message par djes »

A priori c'est toujours le cas, et c'est facile à vérifier en faisant plusieurs exe et en voyant que leurs tailles diffèrent en fonction du nombre de fonctions utilisées ;)
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: Librairie load_Net()

Message par Marc56 »

djes a écrit :A priori c'est toujours le cas, et c'est facile à vérifier en faisant plusieurs exe et en voyant que leurs tailles diffèrent en fonction du nombre de fonctions utilisées ;)
Bonne idée :wink:
Exercice: Essayer de "téléporter" :mrgreen: le code initial de ce topic dans un module et voir ce que ça donne en appelant l'une ou l'autre procédure.

(bon, euh, tout à l'heure parce que là j'ai les crocs 8) )
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Librairie load_Net()

Message par Zorro »

correction du Code (premier message )

j'ai inclu un exemple dans le code , histoire de tester
il n'y a qu'a lancer le code et appuyer sur le bouton Play

une image ,et une musique (celebre :D ) se fera entendre si tout se passe bien :)
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
Guillot
Messages : 529
Inscription : jeu. 25/juin/2015 16:18

Re: Librairie load_Net()

Message par Guillot »

salut,
tres bonne idée cette librairie

ma petite contribution:
j'ai fais en sorte que les fonctions loadimage, LoadSound, LoadMusic, LoadSprite puissent gérer indifféremment les chargements sur le net ou en local

Code : Tout sélectionner

Procedure Loadobjet(n,Adr.s,type,Flags=0)
    Protected nn,l,*Buffer
    If LCase(Left(adr,5))="http:" Or LCase(Left(adr,6))="https:"
        *Buffer = ReceiveHTTPMemory(Adr)
        If *Buffer
            l=MemorySize(*Buffer)
            Select type
                Case 0:nn = CatchImage(n, *Buffer, l)
                Case 1:nn = CatchSound(n, *Buffer, l)
                Case 2:nn = CatchMusic(n, *Buffer, l)
                Case 3:nn = CatchSprite(n, *Buffer, Flags)
            EndSelect
            FreeMemory(*Buffer)
        Else
            Debug ""+adr+"  !!"
            ProcedureReturn #False   
        EndIf
    Else
        Select type
            Case 0:nn = LoadImage(n,Adr,Flags)
            Case 1:nn = LoadSound(n,Adr,Flags)
            Case 2:nn = LoadMusic(n,Adr)
            Case 3:nn = LoadSprite(n,Adr,Flags)
        EndSelect
    EndIf
    ProcedureReturn nn 
EndProcedure

Macro LoadImage(n,Adr):Loadobjet(n,Adr,0):EndMacro
Macro LoadSound(n,Adr):Loadobjet(n,Adr,1):EndMacro
Macro LoadMusic(n,Adr):Loadobjet(n,Adr,2):EndMacro
Macro LoadSprite(n,Adr,Flags=0):Loadobjet(n,Adr,3,Flags):EndMacro


; ========================================== example ==========================================
InitNetwork()
InitSound()  
UseJPEGImageDecoder()

Define n,idx,idy

n=LoadImage(-1,"http://www.photodenature.fr/wp-content/uploads/2014/09/photo-photo-paysage-cascade-5.jpg")
idx=ImageWidth(n)
idy=ImageHeight(n)
OpenWindow(0, 0, 0, idx, idy, "GradientColor", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ImageGadget(0, 0, 0, idx, idy, ImageID(n))

LoadSound(0,"http://soundbible.com/grab.php?id=1705&type=wav")
PlaySound(0)

LoadMusic(0,"http://api.modarchive.org/downloads.php?moduleid=178988#kooky.mod")
PlayMusic(0)

Repeat:Until WaitWindowEvent() = #PB_Event_CloseWindow

Répondre