Simplifier le PB

Vous avez développé un logiciel en PureBasic et vous souhaitez le faire connaitre ?

Que pensez-vous du projet Simplificator ?

Cool mais je ne pense pas bosser dessus
1
14%
Je m'y mets tout de suite !!!
1
14%
J'attends de voir... On verra bien !
5
71%
 
Nombre total de votes : 7

KrisJNT
Messages : 110
Inscription : ven. 31/oct./2008 16:51

Simplifier le PB

Message par KrisJNT »

Bonjour à tous !
Avant tout, je souhaite dire : je connais le C++, mais je n'ai pas du tout envie de programmer avec... Trop rigoureux pour moi :)
Mais, par exemple, avec Qt, la programmation est bien plus simple, puisque Qt n'utilise que des classes.
Je me suis alors dit : pourquoi ne simplifier le langage PB en faisant pareil ?

J'ai alors débuté ce projet : L'include "Simplificator.pbi"
dont voici le début de code :

Code : Tout sélectionner

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;L'include débute ici
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;{
Macro _
  \hInterface\
EndMacro

Macro Assign
  \hInterface =
EndMacro

;--------------------------------- Windows

Interface iWindow
  Open(flags = #PB_Window_SystemMenu)
  SetTitle(title$)
  Geometric(x, y, w, h)
  SetSignal(signal, proc)
  Close()
  Wait()
EndInterface

Structure signals
  *close
EndStructure

Structure window
  hInterface.iWindow
  handle.l
  events.signals
EndStructure

Procedure Open(*self, flags=#PB_Window_SystemMenu)
  *struct.window = *self
  *struct\handle = OpenWindow(#PB_Any, 10, 10, 200, 100, "", flags)
EndProcedure

Procedure SetTitle(*self, title$)
  *struct.window = *self
  SetWindowTitle(*struct\handle, title$)
EndProcedure

Procedure Geometric(*self, x, y, w, h)
  *struct.window = *self
  ResizeWindow(*struct\handle, x, y, w, h)
EndProcedure

Procedure Close(*self)
  *struct.window = *self
  CloseWindow(*struct\handle)
EndProcedure

Structure thSignalStruct
  signal.l
  proc.l
EndStructure

Procedure thSignal(*struct)
  *rec.thSignalStruct = *struct
  Repeat
    If WaitWindowEvent() = *rec\signal
      CreateThread(*rec\proc, 0)
    EndIf
  ForEver
EndProcedure

Procedure SetSignal(*self, signal, proc)
  *struct.window = *self
  Select signal
    Case #WM_CLOSE : *struct\events\close = proc
  EndSelect
EndProcedure

Procedure Wait(*self)
  *struct.window = *self
  Repeat 
  Select WaitWindowEvent()
    Case #WM_CLOSE : CreateThread(*struct\events\close, 0)
  EndSelect
  ForEver
EndProcedure

;--------------------------------- Buttons

Interface iButton
  Create(flags = #WS_VISIBLE)
  Geometric(x, y, w, h)
  SetText(text$)
EndInterface

Structure button
  hInterface.iButton
  handle.l
EndStructure

Procedure createB(*self, flags)
  *struct.button = *self
  *struct\handle = ButtonGadget(#PB_Any, 0, 0, 100, 20, "")
EndProcedure

Procedure GeometricB(*self, x, y, w, h)
  *struct.button = *self
  ResizeGadget(*struct\handle, x, y, w, h)
EndProcedure

Procedure SetTextB(*self, title$)
  *struct.window = *self
  SetGadgetText(*struct\handle, title$)
EndProcedure

;--------------------------------- Misc

Procedure Msg(flags, title.s, msg.s)
  ProcedureReturn MessageRequester(title, msg, flags)
EndProcedure

DataSection
  windowProc:
    Data.l ?window
  window:
    Data.l @Open(), @SetTitle(), @Geometric(), @SetSignal(), @Close(), @Wait()
  buttonProc:
    Data.l ?button
  button:
    Data.l @CreateB(), @GeometricB(), @SetTextB()
EndDataSection
;}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;L'exemple débute ici
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Global hello.window Assign ?windowProc
Global button1.button Assign ?buttonProc

Procedure closeHello(null)
  If Msg(#MB_ICONEXCLAMATION|#MB_YESNO, "Attention !", "Vous allez fermer le programme !") = #IDYES
    hello _ Close()
    End
  EndIf
EndProcedure

hello _ Open()
hello _ Geometric(50, 50, 150, 150)
hello _ SetTitle("Hello")
hello _ SetSignal(#WM_CLOSE, @closeHello())

button1 _ Create()
button1 _ Geometric(0, 0, 150, 150)
button1 _ SetText("Cliquez ici !")

hello _ Wait()

Que ceux qui souhaitent m'aider à faire ce projet... s'y mettent maintenant et postent ce code avec leurs fonctions en plus ! :P

Si vous avez des suggestions encore plus intéressantes, n'hésitez pas à me le dire.

Mine de rien c'est quand même plus clair (à mon goût) d'écrire :

Code : Tout sélectionner

Include "Simplificator.pbi"

Global hello.window Assign ?windowProc
Global button1.button Assign ?buttonProc

Procedure closeHello(null)
  If Msg(#MB_ICONEXCLAMATION|#MB_YESNO, "Attention !", "Vous allez fermer le programme !") = #IDYES
    hello _ Close()
    End
  EndIf
EndProcedure

hello _ Open()
hello _ Geometric(50, 50, 150, 150)
hello _ SetTitle("Hello")
hello _ SetSignal(#WM_CLOSE, @closeHello())

button1 _ Create()
button1 _ Geometric(0, 0, 150, 150)
button1 _ SetText("Cliquez ici !")

hello _ Wait()
au lieu de :

Code : Tout sélectionner

#hello = 0
#button1 = 0

OpenWindow(#hello, 50, 50, 150, 150, "Hello")
ButtonGadget(#button1, 0, 0, 150, 150, "Cliquez ici")

Repeat
  Select WaitWindowEvent()
  Case #PB_Event_CloseWindow
      If Msg(#MB_ICONEXCLAMATION|#MB_YESNO, "Attention !", "Vous allez fermer le programme !") = #IDYES
      CloseWindow(#hello)
      End
    EndIf
  EndSelect
ForEver
ou encore ça (projet) :

Code : Tout sélectionner

Include "Simplificator.pb"
Global comp.serialport Assign ?serialportProc
Global beep.sound Assign ?soundProc ; Utiliser BASS Audio ?
;Et même pourquoi pas Next-3D ?!

comp _ Open()
comp _ Write(@"Bienvenue !")
comp _ Close()

beep _ Create()
sineWave = sine(440, 500) ; Une fonction (fournie ou pas avec Simplificator) qui générerait un buffer audio d'une onde sinusoïdale de 440Hz pendant une demie seconde.
beep _ SetBuffer(sineWave)
beep _ Play(0)
beep _ Free()

Pas vrai ?
De plus, on pourrait même ajouter des fonctions à Simplificator comme window _ SetTransparent(color, alpha, flags) qui n'existent pas en PB, que l'on doit aller chercher sur la MSDN ou autre, parce que 'Aide Contextuelle non disponible'... :roll:

Bon travail ! Moi-même je continue de réfléchir là-dessus.

@ très bientôt

Kris :wink:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Simplifier le PB

Message par Backup »

KrisJNT a écrit : Mine de rien c'est quand même plus clair (à mon goût) d'écrire :
1 Include "Simplificator.pbi"
2 Global hello.window Assign ?windowProc
3 Global button1.button Assign ?buttonProc
4 Procedure closeHello(null)
5 If Msg(#MB_ICONEXCLAMATION|#MB_YESNO, "Attention !", "Vous allez fermer le programme !") = #IDYES
6 hello _ Close()
7 End
8 EndIf
9 EndProcedure

10 hello _ Open()
11 hello _ Geometric(50, 50, 150, 150)
12 hello _ SetTitle("Hello")
13 hello _ SetSignal(#WM_CLOSE, @closeHello())

14 button1 _ Create()
15 button1 _ Geometric(0, 0, 150, 150)
16 button1 _ SetText("Cliquez ici !")

17 hello _ Wait()
au lieu de :
1 #hello = 0
2 #button1 = 0

3 OpenWindow(#hello, 50, 50, 150, 150, "Hello")
4 ButtonGadget(#button1, 0, 0, 150, 150, "Cliquez ici")

5 Repeat
6 Select WaitWindowEvent()
7 Case #PB_Event_CloseWindow
8 If Msg(#MB_ICONEXCLAMATION|#MB_YESNO, "Attention !", "Vous allez fermer le programme !") = #IDYES
9 CloseWindow(#hello)
10 End
11 EndIf
12 EndSelect
13 ForEver
:

que tu veuille faire ton propre langage qui reprends les fonctions de Purebasic
ma foix pourquoi pas ...(attention au droit..)

mais dans ton exemple le code original fait 13 lignes , contre 17 avec ton code "simplifié" ;)

perso je prefere le code Purebasic pour le coup !! :D
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Code : Tout sélectionner

Procedure Wait(*self) 
 *struct.window = *self 
 Repeat  
 Select WaitWindowEvent() 
  Case #WM_CLOSE : CreateThread(*struct\events\close, 0) 
 EndSelect 
 ForEver 
EndProcedure 
Ne fonctionne pas avec plusieurs fenêtres

il faut tester eventwindow()
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Message par poshu »

Il me manque une réponse type "Regarde du coté des précompilo POO" ou encore "M'en fou comme de l'an 40" au poll...
KrisJNT
Messages : 110
Inscription : ven. 31/oct./2008 16:51

Message par KrisJNT »

@Dobro,
je suis d'accord avec toi sur le nombre de lignes, mais c'est surtout la clarté et l'aisance de programmation que je recherche :)

@LSI
en effet, j'ai pas encore réussi à faire plusieurs fenêtres et même plusieurs boutons. :?
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

J'attends de voir...
Même si la clarté est au rendez vous, cela me fait réapprendre une nouvelle syntaxe alors que j'ai déjà mis pas mal de temps (et c'est pas terminé) a apprendre celle de PB.. Et là je coince.
~~~~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
SpaceMan
Messages : 290
Inscription : mar. 26/oct./2004 19:35
Contact :

Message par SpaceMan »

je ne sais pas si on peut encore faire plus simple que PB mais tout comme Ar-S j'attends de voir... car j'ai essayé plusieurs langages appelés basic mais qui malgré leur mot clé et syntaxe sont vraiment répulsifs(du moins pour moi) Ibasic, Realbasic, visualBasic... PB, je l'ai essai essayé et je l'ai adopté parce que c'est simplement du Basic pur...
Un défaut qui empêche les hommes d’agir, c’est de ne pas sentir de quoi ils sont capables.
Jacques Bénigne Bossuet
Répondre