Ah? Ben merde alors... A parler de choses que l'on n'a pas gouté! Je pensais qu'il déclarait automatiquement sous jaPBe. Ben désolé pour l'intox!
(Sans transition

)
L'environnement : L'environnement c'est la partie statique d'un programme qu'il est urgent
de savoir créer.
Avec un tel code, ci-dessus, on remarque que les concepteurs de PureBasic nous ont gâté :
Une seule ligne et le tour est joué. C'est efficace mais peu acceptable pour le futur utilisateur
d'un programme.
Voici un exemple plus concis:
Code : Tout sélectionner
MessageRequester("Message", "Environnement pour les requêtes")
ça y est! Je suis un pro. Je suis encore plus content à l'idée qu'une seule ligne a suffi pour ça.
Conclusion : youpi.
Pour les nostalgiques des années 80, l'environnement console est toujours accessible:
Code : Tout sélectionner
OpenConsole() ; Ouvre l'environnement de la console
EnableGraphicalConsole(0) ; Affiche la console en 1er plan
Print("Environnement console") ; Affiche un message
Input() ; Attend l'appui de la touche [Entrée]
CloseConsole() ; Ferme la console
Pour les classiques de la fenêtre:
Code : Tout sélectionner
Structure FENETRE
Numero.L
LargeurInterne.L
HauteurInterne.L
Titre.S
EndStructure
*Fenetre.FENETRE = AllocateMemory(SizeOf(FENETRE) )
Procedure FenetreTailleStandard(*Fenetre.FENETRE)
With *Fenetre
\LargeurInterne = 384
\HauteurInterne = 64
EndWith
EndProcedure
Procedure Fenetre(*Fenetre.FENETRE)
With *Fenetre
\Numero = OpenWindow(-1, 0, 0, \LargeurInterne, \HauteurInterne, \Titre, $CF0001)
creategadgetlist(WindowID(\Numero) )
TextGadget(-1, 0, 0, \LargeurInterne, \HauteurInterne, "Environnement classique de base: pas de centrage ni de bouton ok.")
Repeat
Until WaitWindowEvent() = 16
CloseWindow(\Numero)
EndWith
EndProcedure
FenetreTailleStandard(*Fenetre)
Fenetre(*Fenetre)
Là, ça se complique net... Pour un simple message, on a sorti la trousse à outil pleine d'instructions...
Enfin...
Pour accélérer l'affichage et quitter l'Interface de l'OS, voici un environnement
pseudo-graphique:
Code : Tout sélectionner
Structure ENSEMBLE
*Bureau
*Fenetre
EndStructure
Structure BUREAU
Largeur.L
Hauteur.L
EndStructure
Structure FENETRE
Numero.L
LargeurInterne.L
HauteurInterne.L
Titre.S
EndStructure
InitSprite()
*Ensemble.ENSEMBLE = AllocateMemory(SizeOf(ENSEMBLE) )
*Bureau.BUREAU = AllocateMemory(SizeOf(BUREAU) )
*Fenetre.FENETRE = AllocateMemory(SizeOf(FENETRE) )
With *Ensemble
\Bureau = *Bureau
\Fenetre = *Fenetre
EndWith
Procedure BureauInterroge(*Bureau.BUREAU)
With *Bureau
ExamineDesktops()
\Largeur = DesktopWidth(0)
\Hauteur = DesktopHeight(0)
EndWith
EndProcedure
Procedure FenetreTailleBureau(*Ensemble.ENSEMBLE)
Protected *Bureau.BUREAU
Protected *Fenetre.FENETRE
With *Ensemble
*Bureau = \Bureau
*Fenetre = \Fenetre
EndWith
*Fenetre\LargeurInterne = *Bureau\Largeur
*Fenetre\HauteurInterne = *Bureau\Hauteur
EndProcedure
Procedure FenetreSansRebord(*Fenetre.FENETRE)
With *Fenetre
\Numero = OpenWindow(-1, 0, 0, \LargeurInterne, \HauteurInterne, \Titre, $80000000)
OpenWindowedScreen(WindowID(\Numero), 0, 0, \LargeurInterne, \HauteurInterne, 0, 0, 0)
Repeat
StartDrawing(ScreenOutput() )
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(0, 0, "Environnement pseudo-graphique - Appuyez sur [Alt + F4] pour quitter...", #White)
StopDrawing()
FlipBuffers()
Until WaitWindowEvent() = 16
CloseWindow(\Numero)
EndWith
EndProcedure
Procedure PseudoGraphique(*Ensemble.ENSEMBLE)
With *Ensemble
BureauInterroge(\Bureau)
FenetreTailleBureau(*Ensemble)
FenetreSansRebord(\Fenetre)
EndWith
EndProcedure
;******************
; Programme principal
;******************
PseudoGraphique(*Ensemble)
Alors là, c'est le pompon : Tout ça pour un simple message inutile sur un écran noir.
La seule explication que je peux donner pour l'instant, c'est reculer pour mieux sauter.
Pour la création de jeux en plein éccran et demandant un maximum de vitesse :
Code : Tout sélectionner
Structure ENSEMBLE
*Bureau
*Screen
EndStructure
Structure BUREAU
Largeur.L
Hauteur.L
Profondeur.L
EndStructure
Structure SCREEN
Largeur.L
Hauteur.L
Profondeur.L
Titre.S
EndStructure
InitSprite()
InitKeyboard()
*Ensemble.ENSEMBLE = AllocateMemory(SizeOf(ENSEMBLE) )
*Bureau.BUREAU = AllocateMemory(SizeOf(BUREAU) )
*Screen.SCREEN = AllocateMemory(SizeOf(SCREEN) )
With *Ensemble
\Bureau = *Bureau
\Screen = *Screen
EndWith
Procedure BureauInterroge(*Bureau.BUREAU)
With *Bureau
ExamineDesktops()
\Largeur = DesktopWidth(0)
\Hauteur = DesktopHeight(0)
\Profondeur = DesktopDepth(0)
EndWith
EndProcedure
Procedure ScreenTailleBureau(*Ensemble.ENSEMBLE)
Protected *Bureau.BUREAU
Protected *Screen.SCREEN
With *Ensemble
*Bureau = \Bureau
*Screen = \Screen
EndWith
*Screen\Largeur = *Bureau\Largeur
*Screen\Hauteur = *Bureau\Hauteur
*Screen\Profondeur = *Bureau\Profondeur
EndProcedure
Procedure ScreenPlay(*Screen.SCREEN)
With *Screen
OpenScreen(\Largeur, \Hauteur, \Profondeur, \Titre)
Repeat
StartDrawing(ScreenOutput() )
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(0, 0, "Environnement graphique - Appuyez sur [Echap] pour quitter...", #White)
StopDrawing()
FlipBuffers()
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
CloseScreen()
EndWith
EndProcedure
Procedure Graphique(*Ensemble.ENSEMBLE)
With *Ensemble
BureauInterroge(\Bureau)
ScreenTailleBureau(*Ensemble)
ScreenPlay(\Screen)
EndWith
EndProcedure
;******************
; Programme principal
;******************
Graphique(*Ensemble)
Donc, si on récapitule, on a:
1) Environnement rudimentaire (fenêtre de déboguage)
2) Environnement pour les requêtes
3) Environnement pour la console
4) Environnement pour les fenêtres
5) Environnement pseudo-graphique
6) Environnement graphique plein écran avec accélération matérielle
Un problème majeur réside dans l'incompatibilité d'accéder à tous ces environnements
dans un même programme. Il faut donc choisir selon ses besoins...