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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

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

Message 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 !
Dernière modification par Micoute le ven. 28/nov./2014 11:15, modifié 1 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Entrer une valeur dans une fenêtre graphique

Message 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!
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Entrer une valeur dans une fenêtre graphique

Message 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  
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Entrer une valeur dans une fenêtre graphique

Message 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
...
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Entrer une valeur dans une fenêtre graphique

Message 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 ?
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Entrer une valeur dans une fenêtre graphique

Message 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.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Entrer une valeur dans une fenêtre graphique

Message par Ollivier »

Code : Tout sélectionner

KeyboardInput()
Voilà peut-être l'instruction dont a besoin Micoute.
(et bonjour Fig aussi!)
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Entrer une valeur dans une fenêtre graphique

Message 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
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

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

Message 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...
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

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

Message 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...
Répondre