Simplifier le PB
Publié : sam. 08/août/2009 16:02
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 :
Que ceux qui souhaitent m'aider à faire ce projet... s'y mettent maintenant et postent ce code avec leurs fonctions en plus !
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 :
au lieu de :
ou encore ça (projet) :
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'...
Bon travail ! Moi-même je continue de réfléchir là-dessus.
@ très bientôt
Kris
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()

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()
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
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()
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'...

Bon travail ! Moi-même je continue de réfléchir là-dessus.
@ très bientôt
Kris
