Page 1 sur 1

[Résolu] Entrer une valeur dans une fenêtre graphique

Publié : jeu. 27/nov./2014 18:27
par Micoute
Bonsoir à tous,

je m'explique peut-être mal, mais j'aimerais faire entrer une valeur, par exemple dans un StringGadget ou autre dans une fenêtre graphique.

Est-ce que cela est possible ?

Je ne vous remercierai jamais assez pour la réponse !

Re: Entrer une valeur dans une fenêtre graphique

Publié : jeu. 27/nov./2014 18:42
par Ollivier
J'ai parfaitement compris ce que tu veux Micoute. Par contre, j'ai pas exactement tout compris ce que tu veux...
Un graphique linéaire? En camembert? En 3D? Fractal?
N'hésite pas à offrir la toute petite précision qui fera que... Ben la clé, il faudra pas nager pour aller la chercher!

Re: Entrer une valeur dans une fenêtre graphique

Publié : jeu. 27/nov./2014 19:21
par Micoute
Bonsoir Ollivier, en fait je cherche juste à entrer une valeur qui pourra être reprise pour faire des calculs.

une petite partie du code, les parties commentées sont celles où je bloque :

Code : Tout sélectionner

Global x2.f, y2.f, a.f = 17592186044416
Global.i XX = 10, YY = 0, Valeur


DrawText(XX, YY, "Racine carrée par la méthode de Babylone")
YY + TextHeight(" ")
YY + TextHeight(" ")

;DrawText(XX, YY, "Entrer la valeur de a: " + a)
;XX + TextWidth("Entrer la valeur de a: ")
;Valeur = StringGadget(#PB_Any, XX, YY, 40, 25, "")
;a = ValF(GetGadgetText(Valeur))
;XX = 10
;YY + TextHeight(" ")

x2 = 1
y2 = a

While (Abs(y2-x2) > 1e-8)
  x2 = (x2+y2)/2
    y2 = a/x2
  If (x2<y2)
    DrawText(XX, YY, StrF(x2) + " < racine < " + StrF(y2))
    yy + TextHeight(" ")
  Else
    DrawText(XX, YY, StrF(y2) + " <= racine <= "+ StrF(x2))
    yy + TextHeight(" ")
  EndIf
Wend  

Re: Entrer une valeur dans une fenêtre graphique

Publié : jeu. 27/nov./2014 19:39
par Ollivier
Je ne comprends pas où est le problème. Peut-être une absence actuelle de surveillance de l'évolution de la valeur?

Code : Tout sélectionner

...
AncienneValeur = Valeur
Valeur = ValF(GetGadgetText(...))
If Valeur <> AncienneValeur
; exécution de l'algo
EndIf
...

Re: Entrer une valeur dans une fenêtre graphique

Publié : jeu. 27/nov./2014 20:06
par falsam
Micoute a écrit :j'aimerais faire entrer une valeur, par exemple dans un StringGadget
ça j'ai compris
Micoute a écrit : dans une fenêtre graphique.
Quel est ta définition de la fenêtre graphique ? Par quoi elle est représentée ?

Re: Entrer une valeur dans une fenêtre graphique

Publié : jeu. 27/nov./2014 20:36
par Fig
Je ne suis pas sûr d'avoir compris, mais je crois qu'il veut une GUI pour rentrer un nombre alors qu'il est dans un plein écran graphique.

Re: Entrer une valeur dans une fenêtre graphique

Publié : ven. 28/nov./2014 0:40
par Ollivier

Code : Tout sélectionner

KeyboardInput()
Voilà peut-être l'instruction dont a besoin Micoute.
(et bonjour Fig aussi!)

Re: Entrer une valeur dans une fenêtre graphique

Publié : ven. 28/nov./2014 11:15
par Micoute
Bonjour à tous et merci pour vos réponses.

J'ai bidouillé un truc et ça ne marche pas trop mal

Code : Tout sélectionner

;racine par la méthode de babylone
;- Initialisations
InitSprite()
InitKeyboard()
InitMouse()

Enumeration
  ;Fenetres
  #Fenetre_principale
  ;Actions
  #Sortie
  #Aucune
  ;Autres
EndEnumeration

Global Police =FontID(LoadFont(#PB_Any, "Brush Script MT", 20, #PB_Font_Italic))


Global x2.f, y2.f, a.f = 17592186044416
Global.i XX = 10, YY = 0, Valeur
Global Texte$, resultat$

ExamineDesktops() : Global Largeur_Ecran = DesktopWidth(0)+5, Hauteur_Ecran = DesktopHeight(0)+10, Profondeur = DesktopDepth(0)
Global x, y, Titre.s = "", h_Fenetre
;Largeur_Ecran-5 : Hauteur_Ecran-10


Declare A_la_ligne()
Declare A_la_suite(Texte.s)

;
; ouvrir une fenêtre maximisée de la même taille que le bureau et sans bordure
;
h_Fenetre = OpenWindow(#Fenetre_principale, 0, 0, Largeur_Ecran, Hauteur_Ecran, Titre, #PB_Window_BorderLess)
;
; ouvrir un écran de la même taille que la fenêtre
;
OpenWindowedScreen(h_Fenetre, 0, 0, Largeur_Ecran, Hauteur_Ecran, 0, 0, 0, #PB_Screen_SmartSynchronization)
ClearScreen($FF7272)

ShowCursor_(1)

;-Entrée de la valeur de a
Repeat
  FlipBuffers()
  ExamineKeyboard()
  
  ; Efface le dernier caractère si la touche 'Back' est appuyée
  ;
  If KeyboardReleased(#PB_Key_Back)
    Texte$ = Left(Texte$, Len(Texte$)-1)
  Else
    resultat$=KeyboardInkey()
    If FindString("1234567890.", resultat$) ; Ajouter vos propres caractères valides ici
      Texte$ + resultat$
    EndIf ; Ajouter le nouveau texte à l'actuel (le cas échéant)
  EndIf
  
  ; Affiche le résultat
  ;
  If StartDrawing(ScreenOutput())
    DrawingMode(#PB_2DDrawing_Transparent)
    FrontColor(RGB(128, 255, 0))
    DrawText(20, 20, "Entrez la valeur de a:")
    DrawText(170, 20, Texte$)
    StopDrawing()
  EndIf
Until KeyboardPushed(#PB_Key_Return)



ClearScreen($FF7272)
StartDrawing(ScreenOutput())
;- début de l'affichage
x=0 : y = 0 : BackColor(Point(0, 0))
DrawingFont(Police)
DrawingMode(#PB_2DDrawing_AlphaChannel)

a = ValF(Texte$)

DrawText(X, Y, "Racine carrée par la méthode de Babylone")
Y + TextHeight(" ")
DrawText(X, Y, "Racine de " + StrF(a))
Y + TextHeight(" ")
Y + TextHeight(" ")


x2 = 1
y2 = a

While (Abs(y2-x2) > 1e-8)
  x2 = (x2+y2)/2
  y2 = a/x2
  If (x2<y2)
    DrawText(X, Y, StrF(x2) + " < racine < " + StrF(y2))
    y + TextHeight(" ")
  ElseIf x2 = y2
    DrawText(X, Y, "racine = " + StrF(y2))
    y + TextHeight(" ")    
  Else
    DrawText(X, Y, StrF(y2) + " <= racine <= "+ StrF(x2))
    y + TextHeight(" ")
  EndIf
Wend  

StopDrawing()

;- gestion des événements en boucle sans fin
Global action.i = #Aucune
Repeat
  Global Evenement = WindowEvent()
  Select Evenement
    Case #PB_Event_CloseWindow
      action = #Sortie
    Case 0
      ;
      ; il n'y a pas d'événement, donc faisons nos trucs graphiques
      ExamineKeyboard()
      If KeyboardPushed(#PB_Key_Escape)
        action = #Sortie
      EndIf
      ExamineMouse()
      If MouseButton(#PB_MouseButton_Left) <> 0
        action = #Sortie
      EndIf
      If MouseButton(#PB_MouseButton_Middle) <> 0
        action = #Sortie
      EndIf
      If MouseButton(#PB_MouseButton_Right) <> 0
        action = #Sortie
      EndIf
      ;
      ; et montrons les choses sur l'écran
      ;
      FlipBuffers()
  EndSelect
Until action = #Sortie
;- fermeture de l'écran & de la fenêtre en douceur
CloseScreen()
CloseWindow(#Fenetre_principale)
;}

Procedure A_la_ligne()
  y + TextHeight(" ")
  ProcedureReturn y
EndProcedure

Procedure A_la_suite(Texte.s)
  X + TextWidth(Texte)
  ProcedureReturn X
EndProcedure  
Echap pour sortir

Re: [Résolu] Entrer une valeur dans une fenêtre graphique

Publié : sam. 29/nov./2014 21:35
par Fig
Bonjour Ollivier. :D
Bonjour à tous. :P

Je crois que depuis peu, on peut ouvrir un écran 3d avec ogre, afficher ses sprites (2d) etc... et accéder à une gui élémentaire avec la librairie windows3()...
Bon je n'ai jamais essayé. Personnellement j'utilise un sprite qui représente la fenêtre et je gère tout moi-même; saisis, clics sur les boutons etc...

Re: [Résolu] Entrer une valeur dans une fenêtre graphique

Publié : dim. 30/nov./2014 0:37
par Ollivier
@Fig

Idem. Mais l'écran graphique natif a trop de contraintes: essaie de tirer le listing des fonctions du compilateur en mode Stand-by. Mais avant, sauvegarde tous tes documents en cours sur l'ordinateur, parce que l'effet est "pointu"...

Là, on ne peut plus se plaindre: canvas et OpenGL en natif, Fred a mis le paquet pour que ça marche...

[Edit] Je viens de tester et ça crash pas. J'ai dû looper un épisode...