Page 4 sur 6

Re: PB2Web : Codez en PB et convertissez pour le web

Publié : jeu. 16/janv./2014 15:41
par falsam
Dobro a écrit :c'est possible de sauver une ou plusieurs Variables avec ce truc ?

je veux dire , faire un Formulaire... et sauver le contenu des champs (variables ) sur le Serveur .. ?
ou bien sauver un choix par bouton , ou meme lancer un liens... ??

(si c'est le cas , on peut envisager la creation d'un site non ? )
C'est possible soit avec un exe cgi, soit en lançant des scripts php.
J'ai fait des tests concluant (avec l'aide de kifi) en intégrant des script php.

Par contre je n'ai pas réussi à faire fonctionner le même code avec des exe cgi. je pense que ça doit venir des droits que je ne maîtrise pas ou bien mon hébergeur ne permet pas l’exécution de script cgi ou alors je paramètre mal l'outil de conversion.

J'essayerais de poster des exemples de codes simples.

Re: PB2Web : Codez en PB et convertissez pour le web

Publié : jeu. 16/janv./2014 16:30
par falsam
Voila un exemple qui ne fonctionne pas en cgi. J'aimerais que quelqu'un teste ce code.

Environnement Windows 7 + WampServer + Apache 2.0.63 + Version de PHP 5.3.5

l'objectif est d'enregistrer des noms d'utilisateurs et leurs localisations dans un fichier texte.

Code : Tout sélectionner

XIncludeFile "D:\Applications\Pure Basic\Pb2Web\p2w.pbi"

P2W_Converter_SetProfile("pb2webtest (CGI)")

;Pour la création du cgi
ProcedureDLL.s WriteUserAndLocation(User.s, Location.s)
  
  Protected FF
  
  FF = OpenFile(#PB_Any, "users.txt", #PB_File_Append)
  
  If FF
    WriteStringN(FF, User + "|" + Location)
    CloseFile(FF)
    ProcedureReturn "OK"
  Else
    ProcedureReturn "!OpenFile()"
  EndIf
  
EndProcedure


;Sera généré en java
Procedure DataRecord(user.s, location.s)
  Protected ReturnValue.s
  
  ReturnValue = WriteUserAndLocation(user, location)
  Debug ReturnValue
EndProcedure  

DataRecord("falsam","Paris")
■ Configuration du profil.
Image


[EDIT] Réponse de Kiffi : Le cgi étant généré sous windows, il ne peut pas fonctionner sur un serveur linux. ça parrait logique ...... quoique. A suivre. En attendant je vais faire communiquer mon code de test avec des scripts php pour l'envoie et la réception de données.

Re: PB2Web : Codez en PB et convertissez pour le web

Publié : jeu. 16/janv./2014 19:43
par Frenchy Pilou
Ah trop fort le KIffi et Blendman et... :D

Image

Re: PB2Web : Codez en PB et convertissez pour le web

Publié : jeu. 16/janv./2014 23:31
par falsam
Démo supprimée

Re: PB2Web : Codez en PB et convertissez pour le web

Publié : ven. 17/janv./2014 1:07
par falsam
Kiffi annonce une nouvelle version (2014-01-16) de pb2web accessible en cliquant sur ce lien http://pb2web.de/download/

Lien de l'annonce http://www.purebasic.fr/english/viewtop ... 57#p435157

Re: PB2Web : Codez en PB et convertissez pour le web

Publié : ven. 17/janv./2014 9:01
par blendman
Frenchy Pilou a écrit :Ah trop fort le KIffi et Blenderman et... :D
C'est blendman moi ;).
Sinon, je suis en train d'ajouter les calques(le système fonctionne déjà un peu), j'attends la gestion de l'alpha, là ce sera bien classe, y compris pour le jeu ^^.

Sinon, tu as vu dans le panneau "dyn" (dynamique), tu peux changer quelques paramètres : random de la taille et random de la position (scatter).
J'aimerai ajouter la rotation du brush, mais il me faudrait quelque chose qui n'utilise pas les apis, uniquement avec les fonctions de bases de PB, je ne sais pas si c'est possible ^^.

Sinon, la nouvelle version est cool, il avance vite Kiffi, bravo à lui :) !

Je testerai bientôt une petite démo de jeu vidéo (avec un canvas)

EDIT :
Je viens de créer une version "offline" de purepaint, en changeant quelques infos dans les fichiers .js lorsque c'est nécessaire.
Et ça marche nickel.

La version (qui est donc multiplateforme : win/linux/mac/chromeOS (?), Android (plus ou moins), et sur les systèmes propriétaires (comme Hercule ecafe) via Chrome, Chromium ou firefox.
http://www.dracaena-studio.com/purebasi ... ffline.zip

L'intérêt ?
Et bien c'est de concevoir une application qui fonctionne comme un logiciel classique (en mode non connecté) et multi-plateforme sans devoir compiler pour mac/linux. D'autant que PB ne permet pas de compiler pour d'autres systèmes, comme les dérivés de linux (par exemple sur mon hercules ecafe), sur chromeOS, android, etc..
Avec cette version offline (la même que la version online), je peux utiliser mon soft de painting n'importe où comme n'importe quel logiciel qui serait compatible avec plusieurs systèmes.
je proposerai les 2 versions, pour ceux qui comme moi ne sont pas toujours connectés ^^.

Par exemple, sur les chromebook, certains se plaignent de ne pas pouvoir installer d'applications et de ne pas pouvoir utiliser la plupart des applications offline. Avec pb2web, ça devient possible d'utliser une application sur chromebook même en étant offline.

C'est donc réellement topissime comme outil !
Je pense qu'on ne se rend pas compte de ce que ça ouvre comme possibilité à Purebasic ^^.

Encore un immense merci à Kiffi en tout cas :).

EDIT 2 :
Pour charger une image via son disque dur (ne fonctionne qu'en appli-web locale) :

Code : Tout sélectionner

XIncludeFile "..\p2w.pbi"

P2W_Converter_SetProfile("pb2webtest")

UsePNGImageDecoder()
UseJPEGImageDecoder()


Structure S_Pb2Web
  OFR_Win.i
  OFR_Btn.i
  OFR_Str.i
EndStructure
Global Pb2Web.S_Pb2Web


Procedure Pb2Web_OFR_Bind()
  
  File$ = GetGadgetText(Pb2Web\OFR_Str)
  
  Debug File$
  
  If File$ <> ""
    
    temp = LoadImage(#PB_Any, File$)
    
    Debug "We Open The file with OpenFile() or LoadImage() or other..."
    
    StartDrawing(CanvasOutput(1))
    DrawImage(ImageID(temp), Random(100), Random(100))
    StopDrawing()
    FreeImage(temp)
    
  EndIf

  ;UnbindGadgetEvent(Pb2Web\OFR_Btn,  @Pb2Web_OFR_Bind()) ; needed ?
  CloseWindow(Pb2Web\OFR_Win)  

EndProcedure

Procedure Pb2Web_OpenFileRequester(Title$, DefaultFile$, Pattern$, Position, Flags=0)
  
  Pb2Web\OFR_Win = OpenWindow(#PB_Any,0,0,300,200, Title$, #PB_Window_ScreenCentered|#PB_Window_SizeGadget)
  Pb2Web\OFR_Btn = ButtonGadget(#PB_Any, 150, 100, 80, 20, "Open")
  Pb2Web\OFR_Str = StringGadget(#PB_Any, 10, 100, 120, 20, DefaultFile$)
  
  BindGadgetEvent(Pb2Web\OFR_Btn, @Pb2Web_OFR_Bind())
  
EndProcedure

Procedure BtnEvent()
  
  Debug "your image must be in the pb2web directory (root or sub-directory)"
  Pb2Web_OpenFileRequester("Open File", "Image.png", "*.*", 0)
  
EndProcedure

P2W_Converter_Begin_Comment
If OpenWindow(0, 0,0,600,400,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu) :  EndIf
P2W_Converter_End_Comment 

ButtonGadget(0, 20, 50, 80, 50, "Open Image")
CanvasGadget(1, 120, 50, 200, 200)
SetGadgetColor(1, #PB_Gadget_BackColor, RGB(100,100,100))

BindGadgetEvent(0, @BtnEvent())

P2W_Converter_Begin_Comment

Repeat
  
  Event = WaitWindowEvent()
  
Until Event = #PB_Event_CloseWindow

P2W_Converter_End_Comment 

Re: PB2Web : Codez en PB et convertissez pour le web

Publié : ven. 17/janv./2014 16:03
par falsam
Petit retour d'expérience :

je me suis assuré dans tout les cas que javascript était bien activé.

j'ai testé un code contenant un canvas. (Application A)
Et un code permettant de saisir des données et de les enregistrer dans un fichier. (Application B)

Windows XP Windows 7 et Windows8 : (Application A) et (Application B) pas de problème.

Android 2.2 : (Application A) et (Application B) ne fonctionnent pas : Fenêtre invisibles.
Android 4.X : (Application A) Fenêtres figées. (Application B) Pas de problème.

Surface Windows RT : (Application A) : Les dessins se font avec la souris. (Application B) pas de problème.

Re: PB2Web : Codez en PB et convertissez pour le web

Publié : ven. 17/janv./2014 17:14
par Frenchy Pilou
@Blendman
Confus je suis! : c'est corrigé! :oops:
et encore bravo pour tous ces tests! 8)

Re: PB2Web : Codez en PB et convertissez pour le web

Publié : ven. 17/janv./2014 19:33
par falsam
la fonction OpenFileRequester() a été introduite avec la version (2014-01-16) de pb2web.

Re: PB2Web : Codez en PB et convertissez pour le web

Publié : ven. 17/janv./2014 20:02
par MetalOS
Je vient de tester l'exemple de Blendman sur Safari (sur Mac OS X 10.9) et ça fonctionne très bien.

Dommage qu'il soit impossible de programmer sous Mac avec PB2Web.

Re: PB2Web : Codez en PB et convertissez pour le web

Publié : ven. 17/janv./2014 20:09
par blendman
falsam a écrit :la fonction OpenFileRequester() a été introduite avec la version (2014-01-16) de pb2web. Je vous propose une petite démonstration en cliquant sur ce lien :
cool, ça marche nickel ;).
On pourrait voir le code s'te plouze ?
car je n'ai pas réussi à faire ce genre de chose ^^
Dommage qu'il soit impossible de programmer sous Mac avec PB2Web.
Oui, c'est dommage effectivement, car c'est un excellent outil.

Re: PB2Web : Codez en PB et convertissez pour le web

Publié : ven. 17/janv./2014 21:34
par majikeyric
blendman et falsam s'amusent comme des petits fous :mrgreen:

Re: PB2Web : Codez en PB et convertissez pour le web

Publié : ven. 17/janv./2014 21:37
par falsam
blendman a écrit :On pourrait voir le code s'te plouze ?
Ooops j'ai oublié de le poster.

■ le code Pure Basic

Code : Tout sélectionner

XIncludeFile "D:\Applications\Pure Basic\Pb2Web\p2w.pbi"

P2W_Converter_SetProfile("pb2webtest")

Enumeration
  #fmain
  #fmlist
  #fmdownload
  #fmimage
  #fmimageview
  #fmprogressbar
EndEnumeration

Procedure LoadImageCallback(Image)  
  ResizeGadget(#fmimageview, #PB_Ignore, #PB_Ignore, ImageWidth(#fmimage), ImageHeight(#fmimage))
  SetGadgetState(#fmimageview, ImageID(#fmimage)) 
EndProcedure


Procedure ImageShow()
  Protected imagefolder.s, imagename.s
  imagefolder = "data\"
  
  imagename = GetGadgetItemText(#fmlist, GetGadgetState(#fmlist))
  
  ;LoadImage can be slow. So we have to use a callback
  ;to know when the image is completely loaded
  LoadImage(#fmimage, imagefolder+imagename, 0, @LoadImageCallback())
  
EndProcedure

Procedure OpenFileRequesterCallback(UploadEvent, Message.s)
  Protected n.i
  
	Select UploadEvent
			
		Case #PB_Event_Upload_BeforeSend
			HideGadget(#fmdownload, #True)
			HideGadget(#fmprogressbar, #False)
			
		Case #PB_Event_Upload_Complete
		  ;Files download
			For n = 1 To CountString(Message, "|")
			  AddGadgetItem(#fmlist, -1, StringField(Message, n, "|"))
			Next
		
		Case #PB_Event_Upload_Error
			MessageRequester("Error", Message)
			
		Case #PB_Event_Upload_Success
		  HideGadget(#fmprogressbar, #True)
		  HideGadget(#fmdownload, #False)
		  
		  MessageRequester("Information","Download done. To view an image, select the name in the list.") 
			
		Case #PB_Event_Upload_UploadProgress			
			Protected PercentageComplete.s = StringField(Message, 3, ";")
			SetGadgetState(#fmprogressbar, Val(PercentageComplete.s))
	EndSelect
	
EndProcedure

Procedure SelectFiles()
	; 1. Parameter: Ignored
	; 2. Parameter: Upload-URL
	; 3. Parameter: Mime-Type (see: http://www.webmaster-toolkit.com/mime-types.shtml)
	; 4. Parameter: MaxFileSize in bytes
	; 5: 0 or #PB_Requester_MultiSelection (works only in browser with HTML5-Support)
	; 6: A callback to get the upload events
	OpenFileRequester("","upload.php", "image/*",10000, #PB_Requester_MultiSelection, @OpenFileRequesterCallback())
	
EndProcedure

Procedure WindowShow()
  ;UsePNGImageDecoder()
  
  ListViewGadget(#fmlist, 20, 20, 500, 400)
  
  ButtonGadget(#fmdownload, 20, 440, 500, 30, "Test OpenFileRequester()")
  ProgressBarGadget(#fmprogressbar, 20, 440, 500, 30, 0, 100)
  HideGadget(#fmprogressbar, #True)
  
  ImageGadget(#fmimageview, 540, 20, 400, 400, ImageID(#fmimage))
  
  BindGadgetEvent(#fmlist, @ImageShow())
  BindGadgetEvent(#fmdownload, @SelectFiles())
EndProcedure

WindowShow()
■ OpenFileRequester ne pouvant pas fonctionner sur un serveur distant, Kiffi fourni un code php à mettre sur le serveur qui recevra les fichiers. Ce code ne permet que d'avoir une visualisation du tableau reçu.

Je te propose celui que j'ai codé pour la réalisation de cette démonstration qui peut fonctionner sans modification avec toutes les applications que tu souhaiteras coder.

Ce code se place dans le même dossier que l'application générée.

Le code php : upload.php

Code : Tout sélectionner

<?php
// Destination folder
$dirtarget="data";

if (isset($_FILES['P2W_Upload'])) {
	foreach ($_FILES["P2W_Upload"]["error"] as $key => $error) {
		if ($error == UPLOAD_ERR_OK) {
			
			$tmp_name = $_FILES["P2W_Upload"]["tmp_name"][$key];
			$name = $_FILES["P2W_Upload"]["name"][$key];
			$type = $_FILES["P2W_Upload"]["type"][$key];
			
			move_uploaded_file($tmp_name, "$dirtarget/$name");
			
			//Return file name
			echo $name."|";
		}
	}
}
echo "\n";
?>
■ Le dossier de destination est indiquée dans la variable $dirtarget

Code : Tout sélectionner

$dirtarget="data"; 
Ce dossier doit etre créer sur le serveur. Bien évidement tu peux changer de nom.

Ce nom de dossier doit être le même dans le code Pure Basic. Tu trouveras la variable correspondante dans la procédure ImageShow()

Code : Tout sélectionner

imagefolder = "data\"
■ Le script upload.php renverra le nom de chaque fichier reçu au code Pure basic.

Code : Tout sélectionner

//Return file name
echo $name."|";
Chaque nom de fichier est séparé par le caractère "|".

Le code Pure Basic qui réceptionne les noms se trouve dans la procédure OpenFileRequesterCallback()

Code : Tout sélectionner

Case #PB_Event_Upload_Complete
    ;Files download
    For n = 1 To CountString(Message, "|")
        AddGadgetItem(#fmlist, -1, StringField(Message, n, "|"))
   Next
C'est la variable Message qui reçoit ces noms.

Voila que j'ai dit l’essentiel. :)
majikeyric a écrit :blendman et falsam s'amusent comme des petits fous :mrgreen:
Hoooo que oui :)

Re: PB2Web : Codez en PB et convertissez pour le web

Publié : ven. 17/janv./2014 21:44
par majikeyric
J'ai testé l'openfilerequester et ça ne marche pas avec mon firefox (v26), quand on clique sur le bouton, rien ne se passe, mais ça passe avec chrome...

Re: PB2Web : Codez en PB et convertissez pour le web

Publié : ven. 17/janv./2014 21:54
par falsam
majikeyric a écrit :J'ai testé l'openfilerequester et ça ne marche pas avec mon firefox (v26), quand on clique sur le bouton, rien ne se passe, mais ça passe avec chrome...
J'ai fait ce test avec la même version que toi et je n'ai pas de souci. Le sélecteur de fichier s'ouvre bien et je peux envoyer des fichiers sur le serveur.