Page 1 sur 2

MessageRequester et InputRequester

Publié : sam. 08/mai/2004 10:27
par Good07
Bonjour à tous.

En utilisant MessageRequester il est possible d'utilser le code chr(10) pour faire des retours à la ligne. Par exemple:

MessageRequester("Essai","premiere ligne"+chr(10)+"deuxième ligne"....etc)

Par contre cette technique ne semble pas fonctionner avec InputRequester

nom=InputRequester("essai","Premiere ligne"+chr(10)+"Deuxième ligne"....etc)

Donne un commentaire sur une seule ligne séparée par des | :(

de plus si le commentaire est trop long il ne s'affiche pas en entier :(

Existe t'il une solution pour avoir un commentaire sur plusieures lignes dans InputRequester ?

Mercie de votre réponse.

Publié : sam. 08/mai/2004 10:35
par Chris
A part si tu le crée toi même, je ne vois pas. :?

Chris :)

Publié : sam. 08/mai/2004 10:38
par Patrick88
et en combinant chr(13)+chr(10) ?

patrick

Publié : sam. 08/mai/2004 10:40
par Chris
Tu auras autant de barres verticales que de chr().

Chris :)

Publié : sam. 08/mai/2004 11:42
par Flype
il faut le faire soi meme avec un textgadget

ce qui donnerai un truc genre TextRequester( Titre.s, Message.s )

y a t il un courageux ds la salle ?

d'ailleurs, une userlib qui regrouperai un max de nouveau type de requester serait cool, non ?

je pense à ce "TextRequester()",
au GetColor() de regis,
un autre du genre LogonRequester(),
un autre qui permet de choisir un element dans un listview ( ListRequester() )
un IPRequester() qui demanderait une IP ( ou son dns ) ainsi qu'un port etc...

Publié : sam. 08/mai/2004 13:56
par Le Soldat Inconnu
tient en parlant de GetColor, je l'ai améliré dans le sens ou si vous sélectionné une couleur du code (Pour PBGetColor que l'on intègre dans l'éditeur)

Par exemple :

Code : Tout sélectionner

16548165
ou

Code : Tout sélectionner

RGB(154,25,187)
ou

Code : Tout sélectionner

$F4CC84
il affichera cette couleur au départ ;)

Publié : sam. 08/mai/2004 13:58
par Flype
je sais regis et c cool
j'expliquais que peut etre UNE userlib qui regrouperait un max de requester serait pas mal.

c juste une reflexion personnelle :P

Publié : sam. 08/mai/2004 14:00
par Le Soldat Inconnu
mince, j'ai modifé mon post pendant que tu écrivais ... , ça ne se suit plus trop notre histoire :mrgreen:

Publié : dim. 09/mai/2004 15:50
par Good07
Bon je vois qu'il n'y a pas de solution et c'est bien ce que je pensais. Comme dit Chris je vais devoir le fabriquer moi-même. :(

Merci pour toutes vos réponse :D

André

Publié : dim. 09/mai/2004 16:57
par Chris
J'avais posté un code dans la rubrique "Applications". Je l'aui un peu modifié pour que tu puisses entrer plusieurs lignes.

La boite s'aggrandit au fur et à mesure que tu ajoutes des lignes.

Par contre, je ne sais pas si il ne faut pas la 3.90 au minimum pour compiler.

Code : Tout sélectionner

Enumeration 
  #WinInput 
EndEnumeration 

Enumeration 
  #Btn_No 
  #Btn_Ok 
  #StrInput 
  #TextInput 
EndEnumeration 

;- Types de caractères dans le champ de saisie 
#PB_InputEx_Numeric   = 1 ; Saisie de chiffres uniquement 
#PB_InputEx_Password  = 2 ; Etoiles à la place des caractères 
#PB_InputEx_LowerCase = 4 ; Tout en minuscules 
#PB_InputEx_UpperCase = 8 ; Tout en majuscules 

;- Types de boutons possibles. 
#PB_InputEx_Ok        = 16 ; Bouton Valider 
#PB_InputEx_Cancel    = 32 ; Bouton Annuler 

;- Procedure 
Procedure.s InputRequester_Ex(Titre.s, MsgClient.s, MsgDefaut.s, Type.l)
  
  Resultat = CountString(MsgClient, Chr(10))
  hText = 15 * (Resultat+1)
  
  hWinForeGround = GetForegroundWindow_() 
  
  If Type & #PB_InputEx_Numeric   : Type1 = #PB_String_Numeric    : EndIf 
  If Type & #PB_InputEx_Password  : Type2 = #PB_String_Password   : EndIf 
  
  If Type & #PB_InputEx_UpperCase And Type & #PB_InputEx_LowerCase 
    MessageRequester("Erreur","Le texte ne peut être à la fois majuscule et minuscule") 
    Type3 = #Null 
  ElseIf Type & #PB_InputEx_LowerCase : Type3 = #PB_String_LowerCase 
  ElseIf Type & #PB_InputEx_UpperCase : Type3 = #PB_String_UpperCase 
  EndIf 
  
  TypeString = Type1|Type2|Type3 
  
  If Type & #PB_InputEx_Ok      : BtnOk = 1 : Else : BtnOk = 0 : EndIf 
  If Type & #PB_InputEx_Cancel  : BtnNo = 1 : Else : BtnNo = 0 : EndIf 
  
  If BtnOk = 0 And BtnNo = 1 
    MessageRequester("Erreur","Vous ne pouvez pas avoir un bouton "+Chr(34)+"Annuler"+Chr(34)+" si vous n'avez pas le bouton "+Chr(34)+"Ok"+Chr(34)) 
    BtnOk = 1 
  ElseIf BtnOk = 0 And BtnNo = 0 
    MessageRequester("Erreur","Vous devez avoir au moins le bouton "+Chr(34)+"Valider"+Chr(34)) 
    BtnOk = 1 
  EndIf 
  
  If OpenWindow(#WinInput, 0,0,300,90+(hText-20),#PB_Window_TitleBar|#PB_Window_ScreenCentered,Titre) 
    If CreateGadgetList(WindowID(#WinInput)) 
      TextGadget(#TextInput, 10, 10, 280, hText, MsgClient) 
      StringGadget(#StrInput, 10,10 +hText,280,25, MsgDefaut, TypeString) 
      If BtnOk  And BtnNo 
        ButtonGadget(#Btn_Ok, (WindowWidth()/2)-105, 10 + hText+30,100,25,"Valider") 
        ButtonGadget(#Btn_No, (WindowWidth()/2)+5, 10 + hText+30,100,25,"Annuler") 
      Else 
        ButtonGadget(#Btn_Ok, (WindowWidth()/2)-50, 10 + hText+55,100,25,"Valider") 
      EndIf 
    EndIf 
    
    EnableWindow_(hWinForeGround, #False) 
    
    Repeat 
      Select WaitWindowEvent() 
        Case #PB_Event_Gadget 
          Select EventGadgetID() 
            Case #StrInput 
              If GetGadgetText(#StrInput)<> "" And EventType() = #PB_EventType_Focus 
                SendMessage_(GadgetID(#StrInput),#EM_SETSEL,0,-1) 
              EndIf 
              
            Case #Btn_Ok 
              EnableWindow_(hWinForeGround, #True) 
              ProcedureReturn(GetGadgetText(#StrInput)) 
              
            Case #Btn_No 
              EnableWindow_(hWinForeGround, #True) 
              ProcedureReturn "" 
          EndSelect 
      EndSelect 
    ForEver 
    CloseWindow(#WinInput) 
  EndIf 
EndProcedure 
    
;Test
Ret$ = InputRequester_Ex("Boite de saisie", "Saisissez votre nom"+Chr(10)+"en entier"+Chr(10)+"sinon, ca ne vas"+Chr(10)+"pas aller."+Chr(10)+Chr(10)+"Avez vous compris ?", "", #PB_InputEx_Ok|#PB_InputEx_Cancel) 
MessageRequester("Resultat",Ret$)
Si tu veux que le texte soit centré, mets #PB_Text_Center dans le TextGadget()

Chris :)

Publié : dim. 09/mai/2004 20:25
par Good07
Merci Chris :D

Je viens d'avoir ton code et je l'ai testé super :!:

Ca marche du tonnerre. Exactement ce que je voulais. Il va falloir dire à Fred d'incorporer ton code directement dans PureBasic.
J'ai la version 3.90 et je n'ai pas eu de problème.

Merci et bonne soirée

André très content :lol:

Publié : ven. 14/mai/2004 9:35
par Good07
Bonjour Chris. :D

Désolé de te déranger encore, mais j'ai un petit problème avec InputRequester_Ex.
Je t'envoi un petit programme de test, qui ne correspond à rien mais qui te montre se qui ne marche pas.
Si j'utilise ImageGadget la fenetre reste vide après l'appel de InputRequester_Ex. :cry:

Je dois faire une fausse manip quelque part mais je ne vois pas où... :?:

Merci par avance de tes conseils :idea:

André


Code : Tout sélectionner


Enumeration 
  #window_0
  #WinInput 
EndEnumeration 

Enumeration 
  #Btn_No 
  #Btn_Ok 
  #StrInput 
  #TextInput
  #image_0
EndEnumeration 

;- Types de caractères dans le champ de saisie 
#PB_InputEx_Numeric   = 1 ; Saisie de chiffres uniquement 
#PB_InputEx_Password  = 2 ; Etoiles à la place des caractères 
#PB_InputEx_LowerCase = 4 ; Tout en minuscules 
#PB_InputEx_UpperCase = 8 ; Tout en majuscules 

;- Types de boutons possibles. 
#PB_InputEx_Ok        = 16 ; Bouton Valider 
#PB_InputEx_Cancel    = 32 ; Bouton Annuler 


;- Procedure 
Procedure.s InputRequester_Ex(Titre.s, MsgClient.s, MsgDefaut.s, Type.l) 
  
  Resultat = CountString(MsgClient, Chr(10)) 
  hText = 15 * (Resultat+1) 
  
  hWinForeGround = GetForegroundWindow_() 
  
  If Type & #PB_InputEx_Numeric   : Type1 = #PB_String_Numeric    : EndIf 
  If Type & #PB_InputEx_Password  : Type2 = #PB_String_Password   : EndIf 
  
  If Type & #PB_InputEx_UpperCase And Type & #PB_InputEx_LowerCase 
    MessageRequester("Erreur","Le texte ne peut être à la fois majuscule et minuscule") 
    Type3 = #Null 
  ElseIf Type & #PB_InputEx_LowerCase : Type3 = #PB_String_LowerCase 
  ElseIf Type & #PB_InputEx_UpperCase : Type3 = #PB_String_UpperCase 
  EndIf 
  
  TypeString = Type1|Type2|Type3 
  
  If Type & #PB_InputEx_Ok      : BtnOk = 1 : Else : BtnOk = 0 : EndIf 
  If Type & #PB_InputEx_Cancel  : BtnNo = 1 : Else : BtnNo = 0 : EndIf 
  
  If BtnOk = 0 And BtnNo = 1 
    MessageRequester("Erreur","Vous ne pouvez pas avoir un bouton "+Chr(34)+"Annuler"+Chr(34)+" si vous n'avez pas le bouton "+Chr(34)+"Ok"+Chr(34)) 
    BtnOk = 1 
  ElseIf BtnOk = 0 And BtnNo = 0 
    MessageRequester("Erreur","Vous devez avoir au moins le bouton "+Chr(34)+"Valider"+Chr(34)) 
    BtnOk = 1 
  EndIf 
  
  If OpenWindow(#WinInput, 0,0,300,90+(hText-20),#PB_Window_TitleBar|#PB_Window_ScreenCentered,Titre) 
    If CreateGadgetList(WindowID(#WinInput)) 
      TextGadget(#TextInput, 10, 10, 280, hText, MsgClient) 
      StringGadget(#StrInput, 10,10 +hText,280,25, MsgDefaut, TypeString) 
      If BtnOk  And BtnNo 
        ButtonGadget(#Btn_Ok, (WindowWidth()/2)-105, 10 + hText+30,100,25,"Valider") 
        ButtonGadget(#Btn_No, (WindowWidth()/2)+5, 10 + hText+30,100,25,"Annuler") 
      Else 
        ButtonGadget(#Btn_Ok, (WindowWidth()/2)-50, 10 + hText+30,100,25,"Valider") 
      EndIf 
    EndIf 
    
    EnableWindow_(hWinForeGround, #False) 
    
    Repeat 
      Select WaitWindowEvent() 
        Case #PB_Event_Gadget 
          Select EventGadgetID() 
            Case #StrInput 
              If GetGadgetText(#StrInput)<> "" And EventType() = #PB_EventType_Focus 
                SendMessage_(GadgetID(#StrInput),#EM_SETSEL,0,-1) 
              EndIf 
          
            Case #Btn_Ok 
              EnableWindow_(hWinForeGround, #True) 
              ProcedureReturn(GetGadgetText(#StrInput)) 
              
            Case #Btn_No 
              EnableWindow_(hWinForeGround, #True) 
              ProcedureReturn "" 
          EndSelect 
      EndSelect 
    ForEver 
    CloseWindow(#WinInput) 
  EndIf 
EndProcedure 
    
Procedure creation_Boule(ni,cr,cv,cb)
CreateImage(ni,32,32)
  StartDrawing(ImageOutput()) 
    DrawingMode(0)
    If cb=255
    While n<256 
    Circle(16-posx.f, 16-posy.f, 16-lr.f,RGB(cr+n,cv+n,cb))     
    posx.f=posx+0.2
    posy.f=posy+0.2
    lr.f=lr+0.5
    n=n+8
    Wend
    EndIf
    If cv=255
    While n<256 
    Circle(16-posx.f, 16-posy.f, 16-lr.f,RGB(cr+n,cv,cb+n))     
    posx.f=posx+0.2
    posy.f=posy+0.2
    lr.f=lr+0.5
    n=n+8
    Wend
    EndIf
    If cr=255
    While n<256 
    Circle(16-posx.f, 16-posy.f, 16-lr.f,RGB(cr,cv+n,cb+n))     
    posx.f=posx+0.2
    posy.f=posy+0.2
    lr.f=lr+0.5
    n=n+8
    Wend
    EndIf
  StopDrawing() 
EndProcedure 

Procedure dessin()
CreateImage(4,96,32)
StartDrawing(ImageOutput())
DrawImage(UseImage(1),0,0)
DrawImage(UseImage(2),32,0)
DrawImage(UseImage(3),64,0)
StopDrawing()
EndProcedure

; Création de la fenêtre et de la GadgetList 
If OpenWindow(#window_0, 0, 0, 480, 300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget, "Test") = 0 Or CreateGadgetList(WindowID()) = 0 
  End 
EndIf 


; On dessine les boules 
creation_boule(1,0,0,255) 
creation_boule(2,255,0,0)
creation_boule(3,0,255,0)

; On affiche l'image 
dessin()
ImageGadget(#image_0,0,0,96,32,UseImage(4)) 
Delay(5000)

;Test 
Ret$ = InputRequester_Ex("GoodCascade V1.0", "La partie est terminé."+Chr(10)+"La grille est vide. Bonus de 500 points."+Chr(10)+"Votre score 4050 - Classé!"+Chr(10)+" ", "", #PB_InputEx_Ok) 

; On ferme la fenetre d'InputRequester_Ex
CloseWindow(#WinInput)

;On redessine les boules 
dessin()
ImageGadget(#image_0,0,0,96,32,UseImage(4)) 

; Nota : Si je ne ferme pas la fenetre d'InputRequester_Ex l'image s'affiche mais dans la fenetre d'InputRequester_Ex

Repeat 
  Event = WaitWindowEvent() 
  
Until Event = #PB_EventCloseWindow 


Publié : ven. 14/mai/2004 13:31
par Le Soldat Inconnu
corrigé :

j'ai mis des commentaires pour expliquer ce que j'ai changé

Code : Tout sélectionner

Enumeration
  #window_0
  #WinInput
EndEnumeration

Enumeration
  #Btn_No
  #Btn_Ok
  #StrInput
  #TextInput
  #image_0
EndEnumeration

;- Types de caractères dans le champ de saisie
#PB_InputEx_Numeric = 1 ; Saisie de chiffres uniquement
#PB_InputEx_Password = 2 ; Etoiles à la place des caractères
#PB_InputEx_LowerCase = 4 ; Tout en minuscules
#PB_InputEx_UpperCase = 8 ; Tout en majuscules

;- Types de boutons possibles.
#PB_InputEx_Ok = 16 ; Bouton Valider
#PB_InputEx_Cancel = 32 ; Bouton Annuler


;- Procedure
Procedure.s InputRequester_Ex(WindowID, Titre.s, MsgClient.s, MsgDefaut.s, Type.l)
  Protected Quitter.l, Texte.s
  
  Resultat = CountString(MsgClient, Chr(10))
  hText = 15 * (Resultat + 1)
  
  If Type & #PB_InputEx_Numeric : Type1 = #PB_String_Numeric : EndIf
  If Type & #PB_InputEx_Password : Type2 = #PB_String_Password : EndIf
  
  If Type & #PB_InputEx_UpperCase And Type & #PB_InputEx_LowerCase
    MessageRequester("Erreur", "Le texte ne peut être à la fois majuscule et minuscule")
    Type3 = #Null
  ElseIf Type & #PB_InputEx_LowerCase : Type3 = #PB_String_LowerCase
  ElseIf Type & #PB_InputEx_UpperCase : Type3 = #PB_String_UpperCase
  EndIf
  
  TypeString = Type1 | Type2 | Type3
  
  If Type & #PB_InputEx_Ok : BtnOk = 1 : Else : BtnOk = 0 : EndIf
  If Type & #PB_InputEx_Cancel : BtnNo = 1 : Else : BtnNo = 0 : EndIf
  
  If BtnOk = 0 And BtnNo = 1
    MessageRequester("Erreur", "Vous ne pouvez pas avoir un bouton " + Chr(34) + "Annuler" + Chr(34) + " si vous n'avez pas le bouton " + Chr(34) + "Ok" + Chr(34))
    BtnOk = 1
  ElseIf BtnOk = 0 And BtnNo = 0
    MessageRequester("Erreur", "Vous devez avoir au moins le bouton " + Chr(34) + "Valider" + Chr(34))
    BtnOk = 1
  EndIf
  
  If OpenWindow(#WinInput, 0, 0, 300, 90 + (hText - 20), #PB_Window_TitleBar | #PB_Window_ScreenCentered, Titre)
    If CreateGadgetList(WindowID(#WinInput))
      TextGadget(#TextInput, 10, 10, 280, hText, MsgClient)
      StringGadget(#StrInput, 10, 10 + hText, 280, 25, MsgDefaut, TypeString)
      If BtnOk And BtnNo
        ButtonGadget(#Btn_Ok, (WindowWidth() / 2) - 105, 10 + hText + 30, 100, 25, "Valider")
        ButtonGadget(#Btn_No, (WindowWidth() / 2) + 5, 10 + hText + 30, 100, 25, "Annuler")
      Else
        ButtonGadget(#Btn_Ok, (WindowWidth() / 2) - 50, 10 + hText + 30, 100, 25, "Valider")
      EndIf
    EndIf
    
    EnableWindow_(WindowID(WindowID), #False)
    
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_Gadget
          Select EventGadgetID()
            Case #StrInput
              If GetGadgetText(#StrInput) <> "" And EventType() = #PB_EventType_Focus
                SendMessage_(GadgetID(#StrInput), #EM_SETSEL, 0, -1)
              EndIf
              
            Case #Btn_Ok
              Texte = GetGadgetText(#StrInput)
              Quitter = 1
              ; tu quittais la procedure avant de fermer la fenêtre
              
            Case #Btn_No
              Texte = ""
              Quitter = 1
              
          EndSelect
      EndSelect
    Until Quitter = 1
    
    EnableWindow_(WindowID(WindowID), #True)
    CloseWindow(#WinInput)
    ; ne pas oublier de rendre la fenêtre de dpart comme fenêtre par défaut pour le reste du programme
    UseWindow(WindowID)
    UseGadgetList(WindowID())
    ProcedureReturn Texte
    
  EndIf
EndProcedure

Procedure creation_Boule(ni, cr, cv, cb)
  CreateImage(ni, 32, 32)
  StartDrawing(ImageOutput())
    DrawingMode(0)
    If cb = 255
      While n < 256
        Circle(16 - posx.f, 16 - posy.f, 16 - lr.f, RGB(cr + n, cv + n, cb))
        posx.f = posx + 0.2
        posy.f = posy + 0.2
        lr.f = lr + 0.5
        n = n + 8
      Wend
    EndIf
    If cv = 255
      While n < 256
        Circle(16 - posx.f, 16 - posy.f, 16 - lr.f, RGB(cr + n, cv, cb + n))
        posx.f = posx + 0.2
        posy.f = posy + 0.2
        lr.f = lr + 0.5
        n = n + 8
      Wend
    EndIf
    If cr = 255
      While n < 256
        Circle(16 - posx.f, 16 - posy.f, 16 - lr.f, RGB(cr, cv + n, cb + n))
        posx.f = posx + 0.2
        posy.f = posy + 0.2
        lr.f = lr + 0.5
        n = n + 8
      Wend
    EndIf
  StopDrawing()
EndProcedure

Procedure dessin()
  CreateImage(4, 96, 32)
  StartDrawing(ImageOutput())
    DrawImage(UseImage(1), 0, 0)
    DrawImage(UseImage(2), 32, 0)
    DrawImage(UseImage(3), 64, 0)
  StopDrawing()
EndProcedure

; Création de la fenêtre et de la GadgetList
If OpenWindow(#window_0, 0, 0, 480, 300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget, "Test") = 0 Or CreateGadgetList(WindowID()) = 0
  End
EndIf


; On dessine les boules
creation_Boule(1, 0, 0, 255)
creation_Boule(2, 255, 0, 0)
creation_Boule(3, 0, 255, 0)

; On affiche l'image
dessin()
ImageGadget(#image_0, 0, 0, 96, 32, UseImage(4))
UpdateWindow_(WindowID())
Delay(5000)

; Test
Ret$ = InputRequester_Ex(#window_0, "GoodCascade V1.0", "La partie est terminé." + Chr(10) + "La grille est vide. Bonus de 500 points." + Chr(10) + "Votre score 4050 - Classé!" + Chr(10) + " ", "", #PB_InputEx_Ok)

; On redessine les boules
; dessin()
; ImageGadget(#image_0, 0, 0, 96, 32, UseImage(4))
; grosse erreur, tu recére un gagdet alors qu'il existe déjà
; pour charger une nouvelle image dans l'imagegadget, il faut faire comme suit :
dessin()
SetGadgetState(#image_0, UseImage(4))



Repeat
  Event = WaitWindowEvent()
  
Until Event = #PB_EventCloseWindow

Publié : ven. 14/mai/2004 14:27
par Chris
@ Good07

Salut :)

Je ne vois pas trop ou est le problème, tout a moins en ce qui concerne l' ImageGadget().

L'appel de la procedure de l'InputRequesterEx() n'a rien à voir avec ça.
Qu'est ce que tu veux faire du résultat ? Dans quoi veux tu l'afficher ?

Parce que dans le bout de code que tu donnes, le retour de la procedure n'est utilisé nulle part.

Au niveau de l'affichage des images, il suffit de commenter le second appel de la procedure "Dessin()", et de ImageGadget() pour que les images restent affichées, (Voir à cet endroit...) et pour que la boite d'input se ferme. De toute façon, les deux fenêtres sont indépendantes l'une de l'autre.

Code : Tout sélectionner

;On redessine les boules 
; dessin() 
; ImageGadget(#image_0,0,0,96,32,UseImage(4)) 

; Nota : Si je ne ferme pas la fenetre d'InputRequester_Ex l'image s'affiche mais dans la fenetre d'InputRequester_Ex 
Ensuite, tu fais ce que tu veux de la valeur retournée, (Affichage dans une boite de dialogue, stockage dans une variable, etc....).

PS, il me semble que j'ai mis une version modifiée de ce code, la semaine dernière, dans la rubrique applications.
Il y a le paramètre d'alignement du texte en plus, et la valeur de certaines constantes a été modifiée pour ne pas entre en conflit avec les valeurs des constantes d'alignement utilisées d'origine par PureBasic.
Tu devrais utiliser cette nouvelle version

@Régis

Tu serais sympa de ne pas modifier des codes dont tu n'est pas l'auteur, (la procédure InputRequesterEx), sans être sur que le problème vient de ce code. Merci... ! :?

PS: Ceci dit, tu n'avais pas tout a fait tort quand même, il y avait un bug dans le retour de procédure :oops:

Chris :)

Publié : ven. 14/mai/2004 15:53
par Chris
Voilà ton bout de code, avec la dernère version de la procédure, et la correction d'un bug.

Code : Tout sélectionner

;*******************************************************************************
;- J'ai mis la dernière version de la procédure qui intègre le centrage du texte
;- dans la boite, et la correction d'un bug au niveau du retour de la procédure.
;*******************************************************************************
;
Enumeration 
  #window_0 
  #WinInput 
EndEnumeration 

Enumeration 
  #Btn_Cancel 
  #Btn_Valid 
  #StrInput 
  #TextInput 
  #image_0  
EndEnumeration 

;- Types de caractères dans le champ de saisie 
#PB_InputEx_Numeric   = 1 ; Saisie de chiffres uniquement 
#PB_InputEx_Password  = 2 ; Etoiles à la place des caractères 
#PB_InputEx_LowerCase = 4 ; Tout en minuscules 
#PB_InputEx_UpperCase = 8 ; Tout en majuscules 

;- Types de boutons possibles. 
;- Types de boutons
#PB_Button_Valid    = 320    ; Bouton Valider
#PB_Button_Cancel   = 1280   ; Bouton Annuler

Global Retour.s

;- Procedure 
Procedure.s InputRequester_Ex(Titre.s, MsgClient.s, MsgDefaut.s, Type.l, TextAlignment.l) 
  Resultat = CountString(MsgClient, Chr(10)) 
  hText = 15 * (Resultat+1) 
  
  hWinForeGround = GetForegroundWindow_() 
  
  If Type & #PB_String_Numeric   : Type1 = #PB_String_Numeric    : EndIf 
  If Type & #PB_String_Password  : Type2 = #PB_String_Password   : EndIf 
  
  If Type & #PB_String_UpperCase And Type & #PB_String_LowerCase 
    MessageRequester("Erreur","Le texte ne peut être à la fois majuscule et minuscule") 
    Type3 = #Null 
  ElseIf Type & #PB_String_LowerCase : Type3 = #PB_String_LowerCase 
  ElseIf Type & #PB_String_UpperCase : Type3 = #PB_String_UpperCase
  EndIf 
  
  TypeString = Type1|Type2|Type3 
  
  If Type & #PB_Button_Valid      : BtnOk = 1 : Else : BtnOk = 0 : EndIf 
  If Type & #PB_Button_Cancel  : BtnNo = 1 : Else : BtnNo = 0 : EndIf 
  
  If BtnOk = 0 And BtnNo = 1 
    MessageRequester("Erreur","Vous ne pouvez pas avoir un bouton "+Chr(34)+"Annuler"+Chr(34)+" si vous n'avez pas le bouton "+Chr(34)+"Ok"+Chr(34)) 
    BtnOk = 1 
  ElseIf BtnOk = 0 And BtnNo = 0 
    MessageRequester("Erreur","Vous devez avoir au moins le bouton "+Chr(34)+"Valider"+Chr(34)) 
    BtnOk = 1 
  EndIf 
  
  If TextAlignment& #PB_Text_Center And TextAlignment & #PB_Text_Right 
    TextAlignment = #Null
  EndIf
  
  If OpenWindow(#WinInput, 0,0,300,90+(hText-20),#PB_Window_TitleBar|#PB_Window_ScreenCentered,Titre) 
    If CreateGadgetList(WindowID(#WinInput)) 
      TextGadget(#TextInput, 10, 10, 280, hText, MsgClient, TextAlignment) 
      StringGadget(#StrInput, 10,10 +hText,280,25, MsgDefaut, TypeString) 
      If BtnOk  And BtnNo 
        ButtonGadget(#Btn_Valid, (WindowWidth()/2)-105, 10 + hText+30,100,25,"Valider") 
        ButtonGadget(#Btn_Cancel, (WindowWidth()/2)+5, 10 + hText+30,100,25,"Annuler") 
      Else 
        ButtonGadget(#Btn_Valid, (WindowWidth()/2)-50, 10 + hText+55,100,25,"Valider") 
      EndIf 
    EndIf 
    
    EnableWindow_(hWinForeGround, #False) 
    
    Repeat 
      Select WaitWindowEvent() 
        Case #PB_Event_Gadget 
          Select EventGadgetID() 
            Case #StrInput 
              If GetGadgetText(#StrInput)<> "" And EventType() = #PB_EventType_Focus 
                SendMessage_(GadgetID(#StrInput),#EM_SETSEL,0,-1) 
              EndIf 
              
            Case #Btn_Valid
              Retour = GetGadgetText(#StrInput)
              EnableWindow_(hWinForeGround, #True)
              CloseWindow(#WinInput)
              ProcedureReturn Retour
              
            Case #Btn_Cancel 
              EnableWindow_(hWinForeGround, #True)
              CloseWindow(#WinInput)
              ProcedureReturn ""
              
          EndSelect 
      EndSelect 
      
    ForEver 
  EndIf 
EndProcedure 
    
Procedure creation_Boule(ni,cr,cv,cb) 
  CreateImage(ni,32,32) 
  StartDrawing(ImageOutput()) 
  DrawingMode(0) 
  If cb=255 
    While n<256 
      Circle(16-posx.f, 16-posy.f, 16-lr.f,RGB(cr+n,cv+n,cb))      
      posx.f=posx+0.2 
      posy.f=posy+0.2 
      lr.f=lr+0.5 
      n=n+8 
    Wend 
  EndIf 
  If cv=255 
    While n<256 
      Circle(16-posx.f, 16-posy.f, 16-lr.f,RGB(cr+n,cv,cb+n))      
      posx.f=posx+0.2 
      posy.f=posy+0.2 
      lr.f=lr+0.5 
      n=n+8 
    Wend 
  EndIf 
  If cr=255 
    While n<256 
      Circle(16-posx.f, 16-posy.f, 16-lr.f,RGB(cr,cv+n,cb+n))      
      posx.f=posx+0.2 
      posy.f=posy+0.2 
      lr.f=lr+0.5 
      n=n+8 
    Wend 
  EndIf 
  StopDrawing() 
EndProcedure 

Procedure dessin() 
  CreateImage(4,96,32) 
  StartDrawing(ImageOutput()) 
  DrawImage(UseImage(1),0,0) 
  DrawImage(UseImage(2),32,0) 
  DrawImage(UseImage(3),64,0) 
  StopDrawing() 
EndProcedure 

; Création de la fenêtre et de la GadgetList 
If OpenWindow(#window_0, 0, 0, 480, 300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget, "Test") = 0 Or CreateGadgetList(WindowID()) = 0 
  End 
EndIf 


; On dessine les boules 
creation_Boule(1,0,0,255) 
creation_Boule(2,255,0,0) 
creation_Boule(3,0,255,0) 

; On affiche l'image 
dessin() 
ImageGadget(#image_0,0,0,96,32,UseImage(4)) 
;Delay(5000) ; J'ai retiré ça parce que j'ai pas la patience d'attendre

;Test 
Ret$ = InputRequester_Ex("GoodCascade V1.0", "La partie est terminé."+Chr(10)+"La grille est vide. Bonus de 500 points."+Chr(10)+"Votre score 4050 - Classé!"+Chr(10)+" ", "", #PB_Button_Valid,#PB_Text_Center) 
SetWindowTitle(#window_0,"Test - "+Ret$) ; J'ai ajouté ça, juste pour voir le résultat

;-**************************************************
;- Plus besoin de fermer la fenêtre de l'extérieur
; On ferme la fenetre d'InputRequester_Ex 
;CloseWindow(#WinInput) 

;- Inutile de recréer les images
;On redessine les boules 
; dessin() 
; ImageGadget(#image_0,0,0,96,32,UseImage(4)) 

; Nota : Si je ne ferme pas la fenetre d'InputRequester_Ex l'image s'affiche mais dans la fenetre d'InputRequester_Ex 
;-
;-**************************************************
Repeat 
  Event = WaitWindowEvent() 
  
Until Event = #PB_EventCloseWindow 
Chris :)