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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#1

Message 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
Modifié en dernier par Boulanza le mer. 16 déc. 2020 07:43, modifié 1 fois.
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2085
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

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

#2

Message 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 ?
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#3

Message 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.
Modifié en dernier par Boulanza le lun. 14 déc. 2020 18:29, modifié 2 fois.
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2085
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

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

#4

Message 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.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#5

Message 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
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#6

Message 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.
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2085
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

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

#7

Message 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 ;)
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#8

Message 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.
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2085
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

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

#9

Message 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 2805 fois
include.zip
(5.11 Kio) Téléchargé 126 fois
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#10

Message par Boulanza »

Bonsoir,
C'est pas mal Monsieur TommyDDR.
Je vous remercie infiniment pour votre attention et pour vos suggestions.
Cordialement.
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#11

Message 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
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2085
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

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

#12

Message 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 ^^
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#13

Message 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.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#14

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#15

Message par Boulanza »

Bonjour mikell,
C'est parfait, rien à dire. Merci.
Cordialement.
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2085
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

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

#16

Message 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 ! ^^
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Répondre