PB2Web : Pure Basic to JavaScript (Windows)

Vous avez développé un logiciel en PureBasic et vous souhaitez le faire connaitre ?
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.03 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
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message 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.
Dernière modification par falsam le jeu. 16/janv./2014 21:43, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

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

Message par Frenchy Pilou »

Ah trop fort le KIffi et Blendman et... :D

Image
Dernière modification par Frenchy Pilou le ven. 17/janv./2014 17:12, modifié 1 fois.
Est beau ce qui plaît sans concept :)
Speedy Galerie
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message par falsam »

Démo supprimée
Dernière modification par falsam le dim. 10/août/2014 19:46, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 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
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.03 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
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

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

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

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

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

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

Message par Frenchy Pilou »

@Blendman
Confus je suis! : c'est corrigé! :oops:
et encore bravo pour tous ces tests! 8)
Est beau ce qui plaît sans concept :)
Speedy Galerie
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message par falsam »

la fonction OpenFileRequester() a été introduite avec la version (2014-01-16) de pb2web.
Configuration : Windows 11 Famille 64-bit - PB 6.03 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
MetalOS
Messages : 1492
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

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

Message 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.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

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

Message 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.
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

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

Message par majikeyric »

blendman et falsam s'amusent comme des petits fous :mrgreen:
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message 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 :)
Configuration : Windows 11 Famille 64-bit - PB 6.03 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
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

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

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

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

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre