Page 1 sur 1

[R] Script/fonction pour autoriser plus de 10 caractères dans input non moins.

Posté : lun. 14 déc. 2020 15:26
par Boulanza
Bonjour,
Cet exemple limite le nombre de caractère dans un input à 10.
Je cherche la fonction/script qui permet le contraire c'est à dire : Autoriser plus de 10 caractères dans input non moins.
Merci pour votre aide.
Cordialement.
Example()
Func Example()
    GUICreate("My GUI limit input 3 chars") ; will create a dialog box that when displayed is centered

    GUICtrlCreateInput("", 10, 20)
    $limit= GUICtrlSetLimit(-1, 10) ; to limit the entry to 3 chars
MsgBox(64,"",$limit)

    GUISetState(@SW_SHOW)

    ; Loop until the user exits.
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop

        EndSwitch
    WEnd
EndFunc   ;==>Example

Re: [..] Script/fonction pour autoriser plus de 10 caractères dans input non moins.

Posté : lun. 14 déc. 2020 17:06
par TommyDDR
Question : comment voulez vous limiter à "minimum 10" sachant que le champ est vide au début (donc moins de 10) ?
Que voulez vous visuellement comme indication ?
Pourquoi ne pas vérifier la taille du champ à la validation et afficher un message indiquant que 10 caractères minimum sont requis ?

Je prend un exemple : le champ contient 0123456789
L'utilisateur sélectionne tout et appuie sur "1" le champ contient donc maintenant 1 caractère -> comment voulez vous que le programme réagisse ?
1) le cas ne doit pas se produire : ça va être compliqué ou alors il faut ajouter des 0 devant à la limite mais le champ va être galère à remplir
2) le texte de l'input peut être rouge si moins de 10 caractère
3) vous aviez autre chose en tête ?

Re: [..] Script/fonction pour autoriser plus de 10 caractères dans input non moins.

Posté : lun. 14 déc. 2020 17:49
par Boulanza
Bonjour TommyDDR,
Merci pour votre réponse.
Ma demande est si simple : Y a t'il une fonction/commande comme GUICtrlSetLimit(-1, 10) qui autorise plus de 10 caractères dans input non moins. GUICtrlSetLimit(-1, 10) limite le nombre à 10 caractères dans $hInput = GUICtrlCreateInput("", 10, 10, 250, 20, $ES_NUMBER) pas plus.
TommyDDR a écrit : lun. 14 déc. 2020 17:06 2) le texte de l'input peut être rouge si moins de 10 caractère
C'est ça ce que je cherche Monsieur TommyDDR : le texte de l'input peut être rouge si moins de 10 caractère
Cordialement.

Re: [..] Script/fonction pour autoriser plus de 10 caractères dans input non moins.

Posté : lun. 14 déc. 2020 17:57
par TommyDDR
Oui, j'ai très bien compris, mais limiter à 10max est TRÈS facile, il suffit de supprimer tous les caractères après le 10ème lorsque l'utilisateur en ajoute

Pour la question : avoir au max 10 (je sais que ce n'est pas ce que vous voulez, je vous montre juste le genre de réponse que j'attends de vous)
"Lorsque 10 caractères sont déjà présents, si l'utilisateur entre un 11ème caractère, celui-ci est automatiquement supprimé avant qu'il soit affiché"

Essayez de répondre à ma question plus haut de la même façon, avec le comportement que vous attendez.

PS : Si vous n'arrivez pas à imaginer comment cela pourrait se traduire, ça va être compliqué de vous aider (et ne me redites pas "il existe pour limiter un nombre max, je veux un nombre minimum" :p)

Edit : ok, je viens de voir votre fin de post, donc mettre le texte en rouge si moins de 10 caractères, j'essaye de vous faire un exemple dans la soirée.

Re: [..] Script/fonction pour autoriser plus de 10 caractères dans input non moins.

Posté : lun. 14 déc. 2020 18:05
par Boulanza
TommyDDR a écrit : lun. 14 déc. 2020 17:57 "Lorsque 10 caractères sont déjà présents, si l'utilisateur entre un 11ème caractère, celui-ci est automatiquement supprimé avant qu'il soit affiché"
Je vous donne un exemple:
$hInput = GUICtrlCreateInput("123456789", 10, 10, 250, 20, $ES_NUMBER) Alerte rouge : pas bon
$hInput = GUICtrlCreateInput("123456789ABCD", 10, 10, 250, 20, $ES_NUMBER) C'est ce que je cherche >10

Re: [..] Script/fonction pour autoriser plus de 10 caractères dans input non moins.

Posté : lun. 14 déc. 2020 18:10
par Boulanza
Bonsoir,
En fin:
TommyDDR a écrit : lun. 14 déc. 2020 17:57 Edit : ok, je viens de voir votre fin de post, donc mettre le texte en rouge si moins de 10 caractères, j'essaye de vous faire un exemple dans la soirée.
C'est très clair dans le titre:
Script/fonction pour autoriser plus de 10 caractères dans input non moins.
Cordialement.

Re: [..] Script/fonction pour autoriser plus de 10 caractères dans input non moins.

Posté : lun. 14 déc. 2020 19:34
par TommyDDR
La demande était très claire oui, ce qui ne l'était pas c'est la façon de le faire.
Cet exemple limite le nombre de caractère dans un input à 10.
Je cherche la fonction/script qui permet le contraire c'est à dire : Autoriser plus de 10 caractères dans input non moins.
Comme l'exemple que vous avez fourni empêche "physiquement" d'écrire + de 10 caractère, et que vous vouliez la même chose pour avoir 10 caractère minimum, c'était compliqué de proposer une solution.

Mais si changer la couleur en rouge lorsqu'on a moins de 10 caractère vous convient, maintenant c'est clair ;)

Re: [..] Script/fonction pour autoriser plus de 10 caractères dans input non moins.

Posté : lun. 14 déc. 2020 19:40
par Boulanza
Bonsoir,
TommyDDR a écrit : lun. 14 déc. 2020 19:34 Mais si changer la couleur en rouge lorsqu'on a moins de 10 caractère vous convient, maintenant c'est clair ;)
- C'est une bonne chose pour alerter l'utilisateur d'insérer le nom complet dans l'input non son abrégé.
Cordialement.

Re: [..] Script/fonction pour autoriser plus de 10 caractères dans input non moins.

Posté : lun. 14 déc. 2020 19:50
par TommyDDR
Voilà comment je le ferai :
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include "./include/_GUICtrlSetOnEvent.au3"

Opt("GUIOnEventMode", 1)
Opt("MustDeclareVars", 1)

Global $gui
Global $input
Global $valider
Global $taille[2] = [300, 300]

$gui = GUICreate("", $taille[0], $taille[1])
GUISetOnEvent($GUI_EVENT_CLOSE, quit, $gui)
$input = GUICtrlCreateInput("", 5, 5, 290, 20)
_GUICtrlSetOnEvent($input, $EN_UPDATE, inputUpdated)
$valider = GUICtrlCreateButton("Valider", 5, 30, 290, 20)
GUICtrlSetOnEvent($valider, valider)
GUICtrlSetState($valider, $GUI_DEFBUTTON)
inputUpdated(0, 0, GUICtrlGetHandle($input))
GUISetState(@SW_SHOW, $gui)

While(True)
   Sleep(10)
WEnd

Func valider()
   If(checkSize($input, 10)) Then
      MsgBox(0, "", GUICtrlRead($input))
        Else
                MsgBox(64,"Notification", "Veuillez saisir le nom complet de votre établissement d'attache")
   EndIf
EndFunc

Func inputUpdated($hwnd, $msg, $lParam)
   If(GUICtrlGetHandle($input) = $lParam) Then
      If(checkSize($input, 10)) Then
         GUICtrlSetColor($input, 0x000000)
         GUICtrlSetState($valider, $GUI_ENABLE)
      Else
         GUICtrlSetColor($input, 0xFF3030)
         GUICtrlSetState($valider, $GUI_DISABLE)
      EndIf
   EndIf
EndFunc

Func checkSize($input, $size)
   Return StringLen(GUICtrlRead($input)) >= $size
EndFunc

Func quit()
   Exit
EndFunc
Pensez à télécharger les UDF en pièce jointe et dézipez le à coté de vos sources pour avoir cette arborescence :
Sans titre.png
Sans titre.png (1.4 Kio) Vu 2891 fois
include.zip
(5.11 Kio) Téléchargé 131 fois

Re: [..] Script/fonction pour autoriser plus de 10 caractères dans input non moins.

Posté : lun. 14 déc. 2020 20:02
par Boulanza
Bonsoir,
C'est pas mal Monsieur TommyDDR.
Je vous remercie infiniment pour votre attention et pour vos suggestions.
Cordialement.

Re: [..] Script/fonction pour autoriser plus de 10 caractères dans input non moins.

Posté : lun. 14 déc. 2020 22:47
par Boulanza
Bonsoir,
Voici un code que j'ai réalisé en se basant sur l'idée de Monsieur TommyDDR, mais en plus simple et sans UDF (#include "./include/_GUICtrlSetOnEvent.au3"). Il manque juste à intégrer dans le scripte le message suivant :
MsgBox(64,"Notification", "Veuillez saisir le nom complet de votre établissement d'attache")
Cordialement.
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>

$hGUI = GuiCreate("", 200, 90)
$input = GuiCtrlCreateInput("", 20, 40, 160, 20)
GUICtrlSetColor($input, 0xFF3030)
GuisetState()

While 1
 $txt = GUICtrlRead($input)
      If StringLen($txt) = 10 Then
      GUICtrlSetColor($input, 0x000000)
   ;MsgBox(64,"Notification", "Veuillez saisir le nom complet de votre établissement d'attache")  
EndIf
;==================
   Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
EndSwitch
WEnd

Re: [..] Script/fonction pour autoriser plus de 10 caractères dans input non moins.

Posté : mar. 15 déc. 2020 01:18
par TommyDDR
Attention, vous lisez la valeur de l'input en boucle, ce qui n'est pas très efficient, je me doute que votre programme n'a pas besoin de grosses perf, mais ce n'est pas une raison pour mal faire les choses, autant prendre des bonnes habitudes dès le début même pour les petits programmes ^^

La façon que je vous avais donné ne lançait le check que lorsque l'utilisateur change le contenu de l'input.

De plus, vous avez totalement explosé mon code :p, dans votre version, si vous entrez 10 caractères puis en supprimez, le texte reste noir.

Je vous avais mis en place la désactivation du bouton valider tant que les conditions n'étaient pas remplis et (si la désactivation ne vous convenait pas) la vérification lors de la validation. Je vous avais aussi mis en place le mode évènementiel de la gestion des GUI d'AutoIt qui permet d'associer directement une fonction à un évènement ce qui est beaucoup plus propre et maintenable.

Je vous conseille de relire mon code, comprendre les lignes (F1 est votre ami) et de plutôt essayer d'y intégrer votre script au mien (dites adieu aux Switch GUIGetMsg() !)

En espérant vous aider à avoir une belle programmation ^^

Re: [..] Script/fonction pour autoriser plus de 10 caractères dans input non moins.

Posté : mar. 15 déc. 2020 08:17
par Boulanza
Bonjour cher TommyDDR,
Je ne suis qu'un amateur... Votre conception de script est très professionnel, précise et concluante.
Vous avez complétement raison, en disant ce slogan: "...autant prendre des bonnes habitudes dès le début même pour les petits programmes"
Merci à vous et à tout les intervenants du forum AutoIt Français.
J'avoue que j'aurais aimé avoir une fonction (comme GUICtrlSet/LimitMin/LimitMax(-1, 10)) qui autorise plus de 10 caractères soit max et/ou min dans input .
Cordialement.

Re: [..] Script/fonction pour autoriser plus de 10 caractères dans input non moins.

Posté : mar. 15 déc. 2020 13:49
par mikell
Une autre possibilité... à adapter évidemment

#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>

$txt = "Veuillez saisir le nom complet de votre établissement d'attache"
$hGUI = GuiCreate("", 200, 90)
$label = GuiCtrlCreateLabel($txt, 10, 10, 180, 30)
$input = GuiCtrlCreateInput("", 20, 50, 160, 20)
GuisetState()

GUIRegisterMsg($WM_COMMAND, '_WM_COMMAND')

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
EndSwitch
WEnd

Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
 Local $id = BitAND($wParam, 0x0000FFFF)
 Local $code = BitShift($wParam, 16)
   If $id = $input AND $code = $EN_UPDATE Then
        $len = StringLen(GUICtrlRead($input))
        GUICtrlSetColor($input, ($len < 10) ? 0xFF3030 : 0x000000)
        GuiCtrlSetData($label, ($len < 10) ? $txt : "Merci")
    EndIf
    Return $GUI_RUNDEFMSG
EndFunc

Re: [..] Script/fonction pour autoriser plus de 10 caractères dans input non moins.

Posté : mar. 15 déc. 2020 17:40
par Boulanza
Bonjour mikell,
C'est parfait, rien à dire. Merci.
Cordialement.

Re: [R] Script/fonction pour autoriser plus de 10 caractères dans input non moins.

Posté : mer. 16 déc. 2020 15:03
par TommyDDR
Pourquoi je me casse le *** à faire des UDF ? :p
L'UDF utilise justement le WM_COMMAND mais permet une utilisation plus simplifiée avec un :
_GUICtrlSetOnEvent($input, $EN_UPDATE, inputUpdated)

au lieu de devoir implémenter une fonction WM_COMMAND et vérifier tous les paramètres ! ^^