Input et Consoles

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
charlyB
Messages : 5
Inscription : sam. 05/sept./2009 17:20

Input et Consoles

Message par charlyB »

Bonjour,

J'ai autrefois beaucoup programmé dans divers Basics, mais je débute avec PureBasic (PB 4.30). Malgré pas mal de recherches dans le Forum et les Tutos, je n'ai pas trouvé certaines réponses ... Alors, tant pis pour moi, allons-y pour quelques questions bêtes ...

- Je n'ai pas réussi à employer INPUT sous OpenWindow, Open(Window)Screen, et j'ai très souvent besoin de Input. Est-ce possible ?

J'en suis donc réduit actuellement à me limiter à Open(Graphical)Console.

- Peut-on déplacer (par ex. centrer) la Console ?

- Peut-on en changer la couleur de FOND (noire par défaut) ?

- Peut-on en changer les dimensions ?

Merci par avance à qui pourra m'éclairer de ses :idea: !...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Input et Consoles

Message par Backup »

charlyB a écrit :Bonjour,


- Je n'ai pas réussi à employer INPUT sous OpenWindow, Open(Window)Screen, et j'ai très souvent besoin de Input. Est-ce possible ?.

tu as connu l'epoque des 8 bits je suppose ;)

maintenant (avec Windows,Linux) , les systèmes d'exploitations ne se programme plus comme avant !

il existe en gros 3 façons de programmer

1 la console
2 le mode fenetré+gadget
3 le mode fenetré ou plein ecran Graphique !


en mode fenetré
on ne parle plus d'input , mais de Gadgets, et d'evenement de fenetre !

les gadgets sont des éléments qui s'affichent dans une fenetre
pour tout a un tas de possibilité offertes !

par exemple les Boutons (Buttongadget()) servent a recuperer un choix
les StringGadget servent a recuperer une phrase entré par l'utilisateur

etc ....

il te faut aller dans les Tutos et regarder ceux qui parlent des fenetres et évènement par exemple le TUTO numero 11 :)
http://www.purebasic.fr/french/viewtopic.php?t=6664

voila un bref aperçus :)

a savoir que un gadget peut etre visible ou devenir invisible
actif ou inactif ....


le mode Console est plutôt réservé a une utilisation rapide
ou a un utilitaire ....
bref un brouillon ....
c'est pas vraiment fait pour faire quelque chose de bien fini :)
charlyB
Messages : 5
Inscription : sam. 05/sept./2009 17:20

Dobro a écrit : tu as connu l'epoque des 8 bits je suppose

Message par charlyB »

Merci de ta réponse, Dobro, j’ai effectivement beaucoup programmé avec les Basics de l’époque (GWBasic, QBAsic, etc…).
J’ai essayé de tirer profit de ton Tuto 11, qui m’a donné des idées … J’ai fait plusieurs essais sans aboutir à rien, exploré également StringGadget(), lu d’autres Tutos, sans résultat … Bref, j’y suis toujours jusqu’au cou !
J’aurais dû m’y prendre autrement et mieux m’expliquer : enseignant retraité, mon dada n’est pas la création de jeux (bien que je sois un peu accro aux jeux sur PC …) mais de programmes utilitaires comme je l’ai très souvent fait dans ma vie professionnelle.
J’espère simplement que PureBasic m’apportera, en plus de la puissance, des possibilités de présentation nouvelles (Polices et attributs, sous-fenêtres, etc ) car, en mode Console, elles sont moindres qu’en vieux Basic … à moins que je n’aie pas trouvé comment faire, d’où les questions posées dans mon 1er message. Mais je comprends très bien que Console = Brouillon !

J’ai donc écrit un embryon de programme (code source ci-dessous) pour mieux cerner mon problème. Peut-on réaliser ceci autrement qu’en Console ? et si oui, comment ?

Merci par avance.
DATA_2

Code : Tout sélectionner

;OpenWindow(1, 60, 40, 1000, 600, "Conjugaison")
;InitSprite()  
;OpenScreen(640, 480, 32, "Conjugaison")  ; = Ecran noir. On sort avec Entrée

OpenConsole()
 ; StartDrawing(WindowOutput(1)) : BackColor(0) ' ne marche pas avec Console
EnableGraphicalConsole(1)
ConsoleTitle("Essai DATA")
ConsoleColor(11,0)

Dim T$(30) : Dim P$(30) : Dim RJ$(10) : Dim RU$(10)

LoadFont (1,"Arial",14)    ; ne marche pas avec Console
ConsoleLocate(30, 2)      
PrintN("CONJUGAISON") : PrintN("")

; ______________________________________________________________

; CHOIX DU VERBE

ConsoleColor(11,0) : Print ("Quel verbe (Etre ou Aller) ? ") :V$=Input() : PrintN("")
If V$="aller" 
 Restore Aller
  ElseIf V$="Etre"
   Restore Etre
EndIf

For i = 1 To 24
   Read.s  T$  :T$(i)=T$ ;:Print (T$(i) + " ")    
Next : PrintN("") 

  Restore Pronoms : For p=1 To 6 
    Read.s P$ : P$(p)=P$ ; Print (P$(p) + " ")
                         Next ;: PrintN("")
; ______________________________________________________________

; FORMATION REPONSE JUSTE

For i=1 To 6 : RJ$(i) = P$(i) + " " + T$(i) ;: PrintN (RJ$(i)) 
    Next
; ______________________________________________________________    

; FORMATION REPONSE UTILISATEUR et CONJUGAISON
L = 6
For i = 1 To 6 :  ConsoleLocate (10, L) : ConsoleColor (7,0)
                          Print (P$(i) + " ") : RU$ = Input() : RU$(i)=RU$ ; ...le   " " ;   pour éviter le   ?
                          RU$(i) =  P$(i) + " " +   RU$(i) ;:  x = 40-Len(RU$(i)) : x$=Str(x)
     ConsoleLocate (40, L) : If  RU$(i) = RJ$(i)  : Print ("Juste" +" " + x$) 
                                  Else 
     ConsoleLocate (40, L) : ConsoleColor (12,0) : Print ("ERREUR" + " " + x$) : ER=ER+1
     ConsoleLocate (60, L) : ConsoleColor (10,0) : Print (RJ$(i))
                                      EndIf
  L=L+1 : x = 0 :    Next i


Input()

CloseConsole()




DataSection

Aller:
Data.s "vais","vas","va","allons","allez","vont","allais","allais","allait","allions","alliez","allaient","allai","allas","alla","allâmes","allâtes","allèrent","irai","iras","ira","irons","irez","iront"

Etre:
Data.s "suis","es","est","sommes","êtes","sont","étais","étais","était","étions","étiez","étaient","fus","fus","fut","fûmes","fûtes","furent","serai","seras","sera","serons","serez","seront"

Pronoms :
Data.s "Je","Tu","Il","Nous","Vous","Ils"
EndDataSection
met toujours tes codes entre les balises [ Code] et [/ code]
autre solution tu sélectionne tout ton code et tu appuis sur le petit bouton Code juste au dessus de la zone d'ecriture des messages ;)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

voici une solution ..

qui te permettra de comprendre le fonctionnement des gadgets windows

j'utilise une une méthode plus simple que les Data
Stringfields() , qui est une fonction Purebasic , qui remplace avantageusement les tableaux surtout pour ce qui concerne les strings :)

on aurai aussi pu employer une liste chainée/structure :)

mais j'aime bien stringfield() :D

au debut je désactive les gadgets tant qu'on a pas choisi un verbe :)
ensuite l'analyse du stringgadget se fait en meme temps qu'on ecris :)
puisque je compare ceux ci dans la boucle d'evenement de windows :)

l'emploi de procedure permet de scinder le travaille
et evite les répetitions :)

l'utilisation a outrance de constante (#ddddddd) permet la clarté du code :)

je déplore l'utilisation de if elsif.......
qui m'a ete imposé par le Visual designer
perso je prefere les Select Case endselect :)

pour ne pas compliquer le code, je n'ai pas optimisé celui ci
expres !! :lol:


ps : en Purebasic on peut mettre les procedure a la fin du code
grace au Declare du debut de listing ....

c'est une ecole , moi je prefere les mettres a la fin
ça permet de voir de suite la boucle principale
sans avoir a scroller toutes les procedures !

et puis j'ai commencé la prog a la préhistoire
et les sous prg on les mettaient a la fin histoire que ce soit plus clair :lol:


Code : Tout sélectionner

; Code By Dobro
Declare Open_Window_0()
Declare  Prof(verbe$,pronom_num)
Declare on_off(etat)
;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Titre
  #Button_etre
  #Button_aller
  #je
  #Tu
  #il
  #Nous
  #Vous
  #Ils
  #String_je
  #String_Tu
  #String_il
  #String_nous
  #String_Vous
  #String_ils
  #String_res_je
  #String_res_tu
  #String_res_il
  #String_res_nous
  #String_res_vous
  #String_res_ils
  #Text_sign
EndEnumeration

;- Fonts
Global FontID1
FontID1 = LoadFont(1, "Arial", 48)
Global FontID2
FontID2 = LoadFont(2, "Arial", 28)
Global FontID3
FontID3 = LoadFont(3, "Arial", 12, #PB_Font_Bold)

Global verbe

Global aller$= "vais,vas,va,allons,allez,vont,allais,allais,allait,allions,alliez,allaient,allai,allas,alla,allâmes,allâtes,allèrent,irai,iras,ira,irons,irez,iront"
  

Global etre$="suis,es,est,sommes,êtes,sont,étais,étais,était,étions,étiez,étaient,fus,fus,fut,fûmes,fûtes,furent,serai,seras,sera,serons,serez,seront"



Open_Window_0()

Repeat ; Start of the event loop
  
  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
  
  WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
  
  GadgetID = EventGadget() ; Is it a gadget event?
  
  EventType = EventType() ; The event type
  
  ;You can place code here, and use the result as parameters for the procedures
  
  If Event = #PB_Event_Gadget
    
    If GadgetID = #Button_etre
       on_off(0)
      verbe$="etre" 
    ElseIf GadgetID = #Button_aller
       on_off(0)
      verbe$="aller"
      
    ElseIf GadgetID = #String_je
      pronom_num=0
      Prof(verbe$,pronom_num)
    ElseIf GadgetID = #String_Tu
      pronom_num=1
      Prof(verbe$,pronom_num)
    ElseIf GadgetID = #String_il
      pronom_num=2
      Prof(verbe$,pronom_num)
    ElseIf GadgetID = #String_nous 
      pronom_num=3
      Prof(verbe$,pronom_num)
    ElseIf GadgetID = #String_Vous
      pronom_num=4
      Prof(verbe$,pronom_num)
    ElseIf GadgetID = #String_ils
      pronom_num=5
      Prof(verbe$,pronom_num)
    ElseIf GadgetID = #String_res_je
      
    ElseIf GadgetID = #String_res_tu
      
    ElseIf GadgetID = #String_res_il
      
    ElseIf GadgetID = #String_res_nous
      
    ElseIf GadgetID = #String_res_vous
      
    ElseIf GadgetID = #String_res_ils
      
    EndIf
    
  EndIf
  
Until Event = #PB_Event_CloseWindow ; End of the event loop
  
End
  ;
  
  
  ; ************** Zone des procedures *************************
  
Procedure Open_Window_0()
  If OpenWindow(#Window_0, 224, 8, 357, 373, "Conjugaison",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_0))
      TextGadget(#Titre, 60, 10, 220, 50, "Conjugaison")
      SetGadgetFont(#Titre, FontID2)
      ButtonGadget(#Button_etre, 60, 90, 100, 30, "Verbe Etre")
      ButtonGadget(#Button_aller, 190, 90, 100, 30, "Verbe Aller")
      TextGadget(#je, 30, 140, 40, 20, "Je")
      SetGadgetFont(#je, FontID3)
      TextGadget(#Tu, 30, 170, 40, 20, "Tu")
      SetGadgetFont(#Tu, FontID3)
      TextGadget(#il, 30, 200, 40, 20, "Il")
      SetGadgetFont(#il, FontID3)
      TextGadget(#Nous, 10, 230, 40, 20, "Nous")
      SetGadgetFont(#Nous, FontID3)
      TextGadget(#Vous, 10, 260, 40, 20, "Vous")
      SetGadgetFont(#Vous, FontID3)
      TextGadget(#Ils, 30, 290, 40, 20, "Ils")
      SetGadgetFont(#Ils, FontID3)
      
      StringGadget(#String_je, 70, 140, 130, 20, "") 
      StringGadget(#String_Tu, 70, 170, 130, 20, "")
      StringGadget(#String_il, 70, 200, 130, 20, "")
      StringGadget(#String_nous, 70, 230, 130, 20, "")
      StringGadget(#String_Vous, 70, 260, 130, 20, "")
      StringGadget(#String_ils, 70, 290, 130, 20, "")
      StringGadget(#String_res_je, 230, 140, 50, 20, "")
      StringGadget(#String_res_tu, 230, 170, 50, 20, "")
      StringGadget(#String_res_il, 230, 200, 50, 20, "")
      StringGadget(#String_res_nous, 230, 230, 50, 20, "")
      StringGadget(#String_res_vous, 230, 260, 50, 20, "")
      StringGadget(#String_res_ils, 230, 290, 50, 20, "")
      on_off(1)
      TextGadget(#Text_sign, 300, 50, 50, 20, "By Dobro")
      
    EndIf
  EndIf
EndProcedure
  
Procedure Prof(verbe$,pronom_num)
  If verbe$="etre" 
    If GetGadgetText(#String_je+pronom_num)=StringField(etre$,1+pronom_num,",")
      SetGadgetText( #String_res_je+pronom_num,"Bon") 
      fl=1
    EndIf
    
    If GetGadgetText(#String_je+pronom_num)=StringField(etre$,7+pronom_num,",")
      SetGadgetText( #String_res_je+pronom_num,"Bon")
      fl=1
    EndIf
    
    If GetGadgetText(#String_je+pronom_num)=StringField(etre$,13+pronom_num,",")
      SetGadgetText( #String_res_je+pronom_num,"Bon")
      fl=1
    EndIf
    
    If GetGadgetText(#String_je+pronom_num)=StringField(etre$,18+pronom_num,",")
      SetGadgetText( #String_res_je+pronom_num,"Bon")
      fl=1
    EndIf
    If fl=0
      SetGadgetText( #String_res_je+pronom_num,"Faux")
    EndIf
    
    If fl=1 :fl=0:EndIf
    
  EndIf
  
  
  If verbe$="Aller" 
    If GetGadgetText(#String_je+pronom_num)=StringField(aller$,1+pronom_num,",")
      SetGadgetText( #String_res_je+pronom_num,"Bon")
      fl=1
    EndIf
    
    If GetGadgetText(#String_je+pronom_num)=StringField(aller$,7+pronom_num,",")
      SetGadgetText( #String_res_je+pronom_num,"Bon")
      fl=1
    EndIf
    
    If GetGadgetText(#String_je+pronom_num)=StringField(aller$,13+pronom_num,",")
      SetGadgetText( #String_res_je+pronom_num,"Bon")
      fl=1
    EndIf
    
    If GetGadgetText(#String_je+pronom_num)=StringField(aller$,18+pronom_num,",")
      SetGadgetText( #String_res_je+pronom_num,"Bon")
      fl=1
    EndIf
    If fl=0
      SetGadgetText( #String_res_je+pronom_num,"Faux")
    EndIf
    
    If fl=1 :fl=0:EndIf
  EndIf
  
  
EndProcedure
    
Procedure on_off(etat)
  DisableGadget(#String_je, etat)
  DisableGadget(#String_Tu,etat)
  DisableGadget(#String_il,etat)
  DisableGadget(#String_nous,etat)
  DisableGadget(#String_Vous,etat)
  DisableGadget(#String_ils,etat)
  DisableGadget(#String_res_je,etat)
  DisableGadget(#String_res_tu,etat)
  DisableGadget(#String_res_il,etat)
  DisableGadget(#String_res_nous,etat)
  DisableGadget(#String_res_vous,etat)
  DisableGadget(#String_res_ils,etat)
EndProcedure
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

petit coup de gueule !


je commence a en avoir marre des mecs qui débarquent sur le forum
pose une question , auquel on prends du temps et du soins pour y répondre
le plus vite possible

et que ces mecs , ne laisse meme pas un merci , ou quoique ce soit d'autre !

si ça continue , plus personne n'aidera , plus personne !


de toute façon je vais arrêter l'aide sur ce forum (retraite souvent évoquée), qui deviens de plus en plus un self service !!


il est pas exclus dans l'avenir, que j'utilise mon Forum
en mettant un acces completement privé , pour éliminer ces problemes !


Ras le Bol


ps : j'ai posté une soluce hier a 19 heures
j'ai pris sur mon temps pour le faire
si vous avez pas de temps pour remercier, ne posez pas de questions
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Je te comprends mon pote, ça c'est rageant.
Peut-être va-t-il te répondre d'ici quelques temps, espérons le.
~~~~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
Avatar de l’utilisateur
Le psychopathe
Messages : 764
Inscription : jeu. 03/mars/2005 19:23

Message par Le psychopathe »

C'est la société qui se barre en sucette ^^
Koganwel
Messages : 11
Inscription : jeu. 27/août/2009 15:13

Message par Koganwel »

D'ici là, Dobro, ça profite à d'autres tous ces codes instructifs qu'on devrait retrouver dans l'Aide plus souvent. Un exemple patent vaut mille discours.

Il y a tant à comprendre, tant à retenir. Même le basique Basic pouvait être complexe écrit par un doué, d'autant plus si le code n'était pas commenté. Que dire d'un langage aussi évolué que PureBasic, capable de flirter avec les API ?

Des répondeurs non remerciés pour leurs efforts et des questionneurs non répondus. Laquelle de ces éventualités est la plus frustrante ?
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

Peut-être n'a t'il pas eu le temps de revenir sur le forum, il t'a bien remercié dans les posts précédents :?
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Message par TazNormand »

+1 avec Flaith : laisses-lui le temps de te répondre, son dernier message date d'hier à 18h21, ta réponse à 20h09 !!!

Personnellement, mon Pc à la maison est toujours allumé (désolé pour les écolos) et du coup je suis conencté en permanence sur le forum, pourtant, je ne le consulte pas.

On me croit devant mon écran, mais je suis ailleurs :oops:

attends demain, tu réagis trop à chaud Dobro, en tout cas, moi je te dis MERCI pour toutes les aides que tu m'as déjà apportées, et celles que tu vas m'apporter plus tard ;-)
Image
Image
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

TazNormand a écrit :moi je te dis MERCI pour toutes les aides que tu m'as déjà apportées, et celles que tu vas m'apporter plus tard ;-)
heu ! j'ai pas du t'apporter grande aide a toi :lol:
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Message par TazNormand »

mais si détrompes toi, car même si tu ne m'as pas aidé directement, les conseils que tu as donné aux autres m'ont bien servi aussi !!!
Image
Image
Avatar de l’utilisateur
MetalOS
Messages : 1508
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Message par MetalOS »

Ben oui mon vieux Dobro nous pète pas une pile comme ça tu va nous claqué dans les pattes si ça continue. Ménage toi pour ta retraite. :lol:

En tous cas moi aussi je te remercie pour les fois ou tu m'a aidé et celle ou tes posts pour les autres mon aidé. Sincèrement merci Dobro. :wink:
charlyB
Messages : 5
Inscription : sam. 05/sept./2009 17:20

Dobro a écrit : Ras le Bol

Message par charlyB »

Salut Dobro,

J'aimerais pouvoir être plus souvent encore devant mon PC mais ... , absent de la maison, ni lundi soir ni mardi je n'ai pu l'allumer.

Que l'absence de réponse te gonfle terrible, je le comprends sans peine, mais tout le monde ne fait pas toujours ce qu'il veut quand il veut ! Plusieurs intervenants te suggèrent d'ailleurs que je vais finir par répondre.

Ce que je fais, en te remerciant de plus pour la rapidité de ta propre réponse ... que je n'ai d'ailleurs pas encore eu le temps d'exploiter.

Merci pour le code et les commentaires qui l'éclairent. Comme Koganwel, je pense qu'un exemple patent vaut mille discours, et qu'on devrait souvent les retrouver dans l'Aide !

Je vais essayer de TOUT comprendre de ce que tu m'envoie (c'est pas gagné d'avance !). J'étais très bon en GWBasic, mais je suis rouillé ... et il y a un tel fossé avec les Basics actuels !
Je te tiens au courant.

@ +
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

bon , vous voyez , il a fini par répondre

alors arreter de vous plaindre ... pfffff !

vous m'énervez , non mais , vous m'énervez hein ! :twisted:

:lol: :lol:




ps: je suis le roi de la mauvaise foi :)
Répondre