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.
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 $guiGlobal $inputGlobal $validerGlobal $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)WEndFunc valider
() If(checkSize
($input, 10)) Then MsgBox(0, "", GUICtrlRead($input)) Else MsgBox(64,"Notification", "Veuillez saisir le nom complet de votre établissement d'attache") EndIfEndFuncFunc 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 EndIfEndFuncFunc checkSize
($input, $size) Return StringLen(GUICtrlRead($input)) >= $sizeEndFuncFunc quit
() ExitEndFunc
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 (1.4 Kio) Vu 2891 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 ExitEndSwitchWEnd
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 ExitEndSwitchWEndFunc _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_RUNDEFMSGEndFunc
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 ! ^^