Page 1 sur 1

[R] Script utile : Ajouter GUICtrlCreateInput à la demande/au besoin

Posté : jeu. 17 déc. 2020 09:56
par Boulanza
Bonjour,
Voici un code (Multiple input boxes) qui a besoin de modification pour ajouter GUICtrlCreateInput à la demande/au besoin afin de ne pas encombrer une page Gui.
- Ajouter une nouvelle GUICtrlCreateInput se fera par bouton "Ajouter Input" avec $Input[50]. Ce script à pour objet par exemple d'ajouter un nouveau article, rubrique, etc.
Merci pour votre aide.
Cordialement.
#include <GUIConstants.au3>
Global $Input[13], $y = 5
$Gui = GUICreate("Mutiple input boxes in 1 window", 170, 340)
$Button1 = GUICtrlCreateButton("Ajouter Input", 50, 310, 75, 25, 0)
For $d = 1 To 12
    $Input[$d] = GUICtrlCreateInput("Input " & $d, 5, $y, 160, 20)
    $y += 25
Next
GUISetState(@SW_SHOW, $Gui)

While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            Exit
   Case $Button1
;Nouveau $Input[$d]
 EndSelect
WEnd

Re: [..] Script utile : Ajouter GUICtrlCreateInput à la demande/au besoin

Posté : jeu. 17 déc. 2020 14:09
par Boulanza
Bonjour,
J'ai réalisé le code joint (comme exemple indicatif), mais mon problème c'est avec la fonction: GUICtrlSetData($hInput1, ""), elle supprime le contenu texte dans input uniquement la première fois. Je ne serais vous expliquez la problématique, c'est pour cela je vous prie de faire vous même le test. Je compte sur votre aide. Merci...
Cordialement.
#include-once
#include <GUIConstantsEx.au3>
Global $hInput1, $A1
Func Application01()
$A1 = GUICtrlRead($hInput1)
EndFunc
$hGUI = GUICreate("Test", 500, 500)
; $hInput1 = GUICtrlCreateInput("", 10, 10, 480, 20)-2
$hLabel = GUICtrlCreateLabel("", 10, 50, 480, 20)
$Button1 = GUICtrlCreateButton("Ajouter Input", 50, 310, 75, 25, 0)
GUISetState()
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
      Case $Button1
      AjouterInput()
EndSwitch
WEnd

Func AjouterInput()
Application01()
If $A1 <> "" Then IniWrite(@ScriptDir & "\Config.ini", "Parametres", "$hInput1", $A1)
Sleep(100)
MsgBox(64,"test1",$A1)
 GUICtrlSetData($hInput1, "")
Sleep(100)
 $hInput1 = GUICtrlCreateInput("", 10, 10, 480, 20)
EndFunc

Re: [..] Script utile : Ajouter GUICtrlCreateInput à la demande/au besoin

Posté : jeu. 17 déc. 2020 16:38
par TommyDDR
Je n'ai pas trop compris pourquoi à chaque appui sur le bouton, on ajoute un input ET on supprime ce qu'il y avait dans les autres champs.
Je tente quand même :
#include-once
#include <GUIConstantsEx.au3>

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

Global $hGUI, $input[0], $label, $button

$hGUI = GUICreate("Test", 500, 500)
GUISetOnEvent($GUI_EVENT_CLOSE, quit, $hGUI)
$label = GUICtrlCreateLabel("", 10, 50, 480, 20)
$button = GUICtrlCreateButton("Ajouter Input", 50, 310, 75, 25, 0)
GUICtrlSetOnEvent($button, AjouterInput)
GUISetState()

While 1
   Sleep(10)
WEnd

Func AjouterInput()
   Local $textes = ""
   For $i = 0 To UBound($input, 1) - 1
      Local $read = GUICtrlRead($input[$i])
      GUICtrlSetData($input[$i], "")
      If($read <> "") Then IniWrite(@ScriptDir & "\Config.ini", "Parametres", "app" & $i, $read)
   Next
   Local $size = UBound($input, 1) + 1
   ReDim $input[$size]
   $input[$size-1] = GUICtrlCreateInput("", 10, 10 + 30 * ($size-1), 480, 20)
EndFunc

Func quit()
   Exit
EndFunc
PS : c'est quand même plus claire en évènementiel !

Re: [..] Script utile : Ajouter GUICtrlCreateInput à la demande/au besoin

Posté : jeu. 17 déc. 2020 16:50
par Boulanza
Bonjour Monsieur TommyDDR,
C'est exactement le résultat que cherche. Merci...
Si c'est possible et afin de ne pas créer plusieurs GUICtrlCreateInput dans la même fenêtre l'une après l'autre, on garde juste une seule GUICtrlCreateInput l'autre (app0) est remplacée par cette dernière = app1 puis app2, etc
Cordialement.

Re: [..] Script utile : Ajouter GUICtrlCreateInput à la demande/au besoin

Posté : jeu. 17 déc. 2020 16:51
par sylvanie
Bonjour
J'ai un peu l'impression que le but est de créer un champ via le bouton et gérer sa suppression si il est vide. Mais ça, c'est ma compréhension
#include <GUIConstants.au3>
Global   $CONF_FILE=@ScriptDir&"\config.ini"
Global $MAX_INDEX=20,$CURRENT_INDEX=0
Global $Input[$MAX_INDEX], $y = 5,$step=25
Global $WIN_HEIGHT=$MAX_INDEX*$step+75

$Gui = GUICreate("Mutiple input boxes in 1 window", 170, $WIN_HEIGHT)
$Button1 = GUICtrlCreateButton("Ajouter Input", 50, $WIN_HEIGHT-40, 75, 25, 0)
Init_ctrl()

GUISetState(@SW_SHOW, $Gui)

While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            MyExit()
      Case $msg = $Button1
         create_input($CURRENT_INDEX)
   EndSelect
WEnd

Func Init_ctrl()
   $SUCCESS=0
   If FileExists($CONF_FILE) Then
      $ARRAY_CTRL=IniReadSection($CONF_FILE,"Parametres")
      If Not @error Then
         For $INDICE=1 To $ARRAY_CTRL[0][0]
            add_input($CURRENT_INDEX,$ARRAY_CTRL[$INDICE][1])
            ;ConsoleWrite("DBG:"&$CURRENT_INDEX&@CRLF)
         Next
      EndIf
      $SUCCESS=1
   EndIf

   If $SUCCESS=0 Then $Input[0] = GUICtrlCreateInput("Input " & 0, $y, $y, 160, 20)

EndFunc

Func create_input(ByRef $INDEX)
   local $Input_lbl="Input "&$INDEX
   add_input($INDEX,$Input_lbl)
EndFunc

Func add_input(ByRef $INDEX,$FIELD="")
   $Input[$INDEX]=GUICtrlCreateInput($FIELD, $y, $y+$step*$INDEX, 160, 20)
   $INDEX+=1
   If $INDEX>=$MAX_INDEX Then GUICtrlSetState($Button1,$GUI_DISABLE)
EndFunc


Func MyExit()
   FileDelete($CONF_FILE)
   For $INDICE=0 To $CURRENT_INDEX-1
      Local $STRING=GUICtrlRead($Input[$INDICE])
      If $STRING<>"" Then  IniWrite($CONF_FILE,"Parametres",$INDICE,$STRING)
   Next
   Exit(0)
EndFunc

Re: [..] Script utile : Ajouter GUICtrlCreateInput à la demande/au besoin

Posté : jeu. 17 déc. 2020 16:53
par sylvanie
Désolé, je n'avais pas vu la dernière réponse, on oublie ...

Re: [..] Script utile : Ajouter GUICtrlCreateInput à la demande/au besoin

Posté : jeu. 17 déc. 2020 17:06
par Boulanza
Bonjour sylvanie.
Merci pour votre réponse qui marche aussi bien, sauf un petit problème d'enregistrement du texte dans ini : 0=Input 0.
Cordialement.

Re: [..] Script utile : Ajouter GUICtrlCreateInput à la demande/au besoin

Posté : jeu. 17 déc. 2020 17:18
par sylvanie
Ce n'est pas un réel problème.
Dans ce que j'ai proposé, la clé n'a aucune importance, seule la valeur et sa position compte. Mais je conçois que ce n'était pas ce à quoi vous vous attendiez. C'est une approche différente.
Du moment que vous trouverez votre bonheur dans l'ensemble des propositions, c'est l'essentiel 😉

Re: [..] Script utile : Ajouter GUICtrlCreateInput à la demande/au besoin

Posté : jeu. 17 déc. 2020 17:25
par Boulanza
Non sylvanie, votre travail est excellant, il réponds exactement à mes besoins.
Le Messages : 629 c'est juste pour améliorer au mieux afin ne pas encombrer la fenêtre par 50 gui.
Cordialement

Re: [..] Script utile : Ajouter GUICtrlCreateInput à la demande/au besoin

Posté : jeu. 17 déc. 2020 17:47
par Boulanza
Bonjour,
Pouvez-vous me communiquer la fonction qui peut supprimer et/ou remplacer un(e)? GUICtrlCreateInput par un(e)? autre ? Merci
Cordialement.

Re: [..] Script utile : Ajouter GUICtrlCreateInput à la demande/au besoin

Posté : jeu. 17 déc. 2020 18:21
par walkson
Bonjour,
Rhôôô GUICtrlDelete ( controlID )
J'espère que pour le 700 ième message, vous offrez le champagne à ceux qui vous ont répondu :mrgreen:

Re: [..] Script utile : Ajouter GUICtrlCreateInput à la demande/au besoin

Posté : jeu. 17 déc. 2020 18:23
par TommyDDR
Vous ne voulez qu'un seul input ?
Pourquoi avoir mis le GUICtrlCreateInput dans la fonction de validation du bouton ?

Et pourquoi supprimer un input pour le recréer, quand vous pouvez simplement le vider ?
#include-once
#include <GUIConstantsEx.au3>

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

Global $hGUI, $input, $label, $button

$hGUI = GUICreate("Test", 500, 500)
GUISetOnEvent($GUI_EVENT_CLOSE, quit, $hGUI)
$input = GUICtrlCreateInput("", 10, 10, 480, 20)
$label = GUICtrlCreateLabel("", 10, 50, 480, 20)
$button = GUICtrlCreateButton("Ajouter Input", 50, 310, 75, 25, 0)
GUICtrlSetOnEvent($button, AjouterInput)
GUISetState()

While 1
   Sleep(10)
WEnd

Func AjouterInput()
   Local Static $count = 0
   Local $read = GUICtrlRead($input)
   GUICtrlSetData($input, "")
   If($read <> "") Then
      $count += 1
      IniWrite(@ScriptDir & "\Config.ini", "Parametres", "app" & $count, $read)
   EndIf
EndFunc

Func quit()
   Exit
EndFunc

Re: [..] Script utile : Ajouter GUICtrlCreateInput à la demande/au besoin

Posté : jeu. 17 déc. 2020 18:49
par Boulanza
walkson a écrit : jeu. 17 déc. 2020 18:21 Bonjour,
Rhôôô GUICtrlDelete ( controlID )
J'espère que pour le 700 ième message, vous offrez le champagne à ceux qui vous ont répondu :mrgreen:
Je vous assure à vous tous de vous offrir le champagne, le couscous, les divers type de tagines Marocain bio à 100%, le thé à la menthe avec les gâteaux Marocain et :P :P :P . Je serais très heureux de vous accourir dans mon pays le Maroc. Merci à vous tous pour votre collaboration. Je ne sais pas si vous avez remarqué que mes questions sont des compléments de savoir faire utiles pour tous les utilisateurs de AutoIt. J'ai toujours partagé les codes objet de mes demande.
Cordialement.

Re: [..] Script utile : Ajouter GUICtrlCreateInput à la demande/au besoin

Posté : jeu. 17 déc. 2020 19:18
par Boulanza
Bonsoir Monsieur TommyDDR,
C'est parfait c'est excellent, un travail propre et simple. Encore une fois merci TommyDDR et je vous souhaite beaucoup de bonheur pour les années à venir.
Cordialement.

Re: [..] Script utile : Ajouter GUICtrlCreateInput à la demande/au besoin

Posté : jeu. 17 déc. 2020 19:27
par Boulanza
TommyDDR: Vous ne voulez qu'un seul input ?
Pourquoi avoir mis le GUICtrlCreateInput dans la fonction de validation du bouton ?
Et pourquoi supprimer un input pour le recréer, quand vous pouvez simplement le vider ?
Rep: C'est ce que je demande ni rien ni plus: Tout est bien expliqué dans le titre et dans ma demande. Mon problème est que j'ai eu un souci pour vider l'input.

Re: [R] Script utile : Ajouter GUICtrlCreateInput à la demande/au besoin

Posté : ven. 18 déc. 2020 11:03
par Boulanza
Bonjour tout le monde,
Grace aux solutions ci-dessus de Messieurs de Sylvanie et de TommyDDR :bisou: , j'ai en fin sortie le script adapté à mes besoins.
Cordialement.
#include-once
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>

Global $i, $hGUI, $InputFiliere01, $InputAbregeFiliere01, $Filiere01, $button, $Filiere01
Global $count, $Filiere011, $Filiere012, $widthCell, $AbregeFiliere01
;========================================================================================
Opt("GUIOnEventMode", 1)
Opt("MustDeclareVars", 1)
$hGUI = GUICreate("Formulaire01", 540, 426, 292, 252)
GUISetOnEvent($GUI_EVENT_CLOSE, quit, $hGUI)
GUICtrlSetFont(-1, 11, 900, 0, "MS Sans Serif")
;===============================================================
$InputFiliere01 = GUICtrlCreateInput("", 30, 220, 350, 20)
GUICtrlSetLimit(-1, 0) ; to limit the entry to 3 chars 0 à l'infini
$Filiere011 = GUICtrlSetTip(-1, " Veuillez saisir la filière qui correspond à vos domaines d'intervention.Par exemple : « DUT en Génie Thermique et Energétique (GTE) »")
$widthCell = 150 ; first cell 70 width
;======================================= Suite
Local $label1 = GUICtrlCreateLabel("Veuillez saisir la filière qui correspond à vos domaines d'intervention.", 50, 150, 300, 40, $SS_CENTER)
GUICtrlSetFont(-1, 12, 100, 0, "Arial")
Ajouterlabel01() ; Emplacement 1
;====================================================================
$InputAbregeFiliere01 = GUICtrlCreateInput("", 400, 220, 100, 20)
$Filiere012 = GUICtrlSetTip(-1, " Veuillez saisir l'abrégé de la filière qui correspond à vos domaines d'intervention.Par exemple : « GTE »")
$widthCell = 150 ; first cell 70 width
;===============================================================
$button = GUICtrlCreateButton("Ajouter filière", 210, 275, 120, 30)
GUICtrlSetOnEvent($button, AjouterInputFiliere01)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
;===============================================================
GUISetState()
While 1
   Sleep(10)
WEnd
;===============================================================
Func AjouterInputFiliere01()
     Local Static $count = 0
      $count += 1
;======================================== Suite
Local $read = GUICtrlRead($InputFiliere01)
GUICtrlSetData($InputFiliere01, "")
IniWrite(@ScriptDir & "\Config.ini", "Parametres", "$Filiere" & $count, $read)
;======================================== Suite
Local $read = GUICtrlRead($InputAbregeFiliere01)
GUICtrlSetData($InputAbregeFiliere01, "")
IniWrite(@ScriptDir & "\Config.ini", "Parametres", "$AbregeFiliere" & $count, $read)
;==============================================================
Ajouterlabel01()  ; Emplacement 2
EndFunc
;===============================================================
Func Ajouterlabel01()
Local Static $count = 0
      Local $read = GUICtrlRead($Filiere01)
   GUICtrlSetData($Filiere01, "")
       $count += 1
$Filiere01 = GUICtrlCreateLabel("Veuillez saisir l'intitulé de la filière N°"& $count&" :", 30, 200, 220, 20)
$AbregeFiliere01 = GUICtrlCreateLabel("Saisissez l'abrégé de ladite filière N°"& $count&" :", 400, 190, 100, 40, $SS_CENTER)
EndFunc
;===============================================================
Func quit()
   Exit
EndFunc

Re: [R] Script utile : Ajouter GUICtrlCreateInput à la demande/au besoin

Posté : sam. 19 déc. 2020 14:11
par Boulanza
Plus complet : Avec la vérification des champs de saisie avant exécution (IniWrite).
#include-once
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
;=========================================================================================
Global $i, $hGUI, $InputFiliere01, $InputAbregeFiliere01, $Filiere01, $button, $Filiere01
Global $count, $Filiere011, $Filiere012, $widthCell, $AbregeFiliere01, $NumberLine
Global $C1, $_C1, $C2, $_C2, $Quitter
;========================================================================================
Func Application_01()
$_C1 = GUICtrlRead($InputFiliere01)
$C1 = StringUpper($_C1) ; Fonction pour mettre automatiquement input  minuscules en majuscules .
$_C2 = GUICtrlRead($InputAbregeFiliere01)
$C2 = StringUpper($_C2) ; Fonction pour mettre automatiquement input  minuscules en majuscules .
EndFunc
;========================================================================================
Formulaire()
Func Formulaire()
 $hGUI = GUICreate("Formulaire01", 540, 426, 292, 252)
GUICtrlSetFont(-1, 11, 900, 0, "MS Sans Serif")
;===============================================================
$InputFiliere01 = GUICtrlCreateInput("", 30, 220, 350, 20)
GUICtrlSetLimit(-1, 0) ; to limit the entry to 3 chars 0 à l'infini
$Filiere011 = GUICtrlSetTip(-1, " Veuillez saisir la filière qui correspond à vos domaines d'intervention.Par exemple : « DUT en Génie Thermique et Energétique (GTE) »")
$widthCell = 150 ; first cell 70 width
;======================================= Suite
Local $label1 = GUICtrlCreateLabel("Veuillez saisir la filière qui correspond à vos domaines d'intervention.", 50, 150, 300, 40, $SS_CENTER)
GUICtrlSetFont(-1, 12, 100, 0, "Arial")
Ajouterlabel01() ; Emplacement 1
;====================================================================
$InputAbregeFiliere01 = GUICtrlCreateInput("", 400, 220, 100, 20)
$Filiere012 = GUICtrlSetTip(-1, " Veuillez saisir l'abrégé de la filière qui correspond à vos domaines d'intervention.Par exemple : « GTE »")
$widthCell = 150 ; first cell 70 width
;===============================================================
$button = GUICtrlCreateButton("Ajouter filière", 210, 275, 120, 30)
GUICtrlSetOnEvent($button, AjouterInputFiliere01)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
;===============================================================
$Quitter = GUICtrlCreateButton("Quiter", 210, 320, 120, 30)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
;===============================================================
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
;==============================
GUISetState()
While 1
   Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
   Case $button
      InfoChampsInputsFiliere()
      ;AjouterInputFiliere01()
ContinueLoop   ;==> Indispensable à cette place pour revenir à 0 lors de champ vide de GUI.
   Case $Quitter
Exit
   EndSwitch
WEnd
EndFunc
;===============================================================
Func AjouterInputFiliere01()
     Local Static $count = 0
      $count += 1
;======================================== Suite
Local $read = GUICtrlRead($InputFiliere01)
GUICtrlSetData($InputFiliere01, "")
IniWrite(@ScriptDir & "\Config.ini", "Parametres", "$Filiere" & $count, $read)
;======================================== Suite
Local $read = GUICtrlRead($InputAbregeFiliere01)
GUICtrlSetData($InputAbregeFiliere01, "")
IniWrite(@ScriptDir & "\Config.ini", "Parametres", "$AbregeFiliere" & $count, $read)
;==============================================================
Ajouterlabel01()  ; Emplacement 2
EndFunc
;===============================================================
Func Ajouterlabel01()
Local Static $count = 0
      Local $read = GUICtrlRead($Filiere01)
   GUICtrlSetData($Filiere01, "")
       $count += 1
$Filiere01 = GUICtrlCreateLabel("Veuillez saisir l'intitulé de la filière N°"& $count&" :", 30, 200, 220, 20)
$AbregeFiliere01 = GUICtrlCreateLabel("Saisissez l'abrégé de ladite filière N°"& $count&" :", 400, 190, 100, 40, $SS_CENTER)
EndFunc
;===============================================================
Func InfoChampsInputsFiliere()
Application_01()
;~ ;*** Info champs inputs
If $C1 = "" Then
Msgbox($MB_SYSTEMMODAL, "Attention", "Vous n'avez pas saisie l'intitulé qui correspond à la matière que vous enseignez!",5)
ElseIf $C2 = "" Then
Msgbox($MB_SYSTEMMODAL, "Attention", "Vous n'avez pas saisie l'abréviation de l'intitulé qui correspond à la matière que vous enseignez!",5)

Else
AjouterInputFiliere01()
EndIf
EndFunc