Ecrire dans un Input à condition

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Narcisse69
Niveau 1
Niveau 1
Messages : 7
Enregistré le : ven. 19 mai 2017 14:47
Status : Hors ligne

Ecrire dans un Input à condition

#1

Message par Narcisse69 »

Bonjour à tous,


Voici le but de mon programme :
- Lorsque mon input1 est vide dans ma GUI => l'input2 écrit "Vide".
- Lorsque j'écris dans l'input 1 (donc plus vide) => l'input2 écrit "Pas vide".

Voici le code :
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=C:\Users\RGFR1773\Desktop\AutoIt\Essai.kxf
$Form2 = GUICreate("Form2", 368, 309, 410, 183)
$Input1 = GUICtrlCreateInput("Input1", 112, 56, 145, 21)
;$Input2 = GUICtrlCreateInput("Input2", 112, 104, 145, 21)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
      Case $GUI_EVENT_CLOSE
         Exit

      Case $Form2
      Case $Form2
      Case $Form2
      Case $Form2
      Case $Input1
      Case $Input2

      Case GUICtrlRead($Input1) <> ""
         $Input2 = GUICtrlCreateInput("Pas vide", 112, 104, 145, 21)
      Case GUICtrlRead($Input1) = ""
         $Input2 = GUICtrlCreateInput("Vide", 112, 104, 145, 21)

   EndSwitch
WEnd
Et la tête du GUI :
Image

J'avais pensé utiliser :
If GUICtrlRead($Input1) <> "" Then
   $Input2 = GUICtrlCreateInput("Pas vide", 112, 104, 145, 21)
Else
   $Input2 = GUICtrlCreateInput("Vide", 112, 104, 145, 21)
EndIf
Au lieu de :
      Case GUICtrlRead($Input1) <> ""
         $Input2 = GUICtrlCreateInput("Pas vide", 112, 104, 145, 21)
      Case GUICtrlRead($Input1) = ""
         $Input2 = GUICtrlCreateInput("Vide", 112, 104, 145, 21)
Mais c'est pas mieux...


Le problème :
Forcément le problème est que les deux textes "Pas vide" et "Vide" se superposent et ça clignote... bref, ce n'est pas optimal. :(
J'ai lu les docs et plusieurs tuto, Google a été mon ami, mais jusqu'à un certains point...
Pouvez-vous m'apporter une aide salutaire ? :)
Avatar du membre
parazitenew
Niveau 7
Niveau 7
Messages : 310
Enregistré le : sam. 10 déc. 2011 15:08
Localisation : Algerie
Status : Hors ligne

Re: Ecrire dans un Input à condition  

#2

Message par parazitenew »

Bonjour:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>


$Form2 = GUICreate("Form2", 368, 309, 410, 183)
$Input1 = GUICtrlCreateInput("Input1", 112, 56, 145, 21)
$Input2 = GUICtrlCreateInput("Input2", 112, 104, 145, 21)
GUISetState(@SW_SHOW)

GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

While 1
        $msg = GUIGetMsg()
    Select
         Case $msg = $GUI_EVENT_CLOSE
                Exit
    EndSelect
WEnd

Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
  If BitAND($wParam, 0x0000FFFF) = $Input1 AND BitShift($wParam, 16) = $EN_UPDATE Then

      If GUICtrlRead($Input1) <> "" Then
         GUICtrlSetData($Input2, "Pas vide")
      Else
         GUICtrlSetData($Input2, "Vide")
      EndIf
  EndIf


   Return 'GUI_RUNDEFMSG'
EndFunc
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: Ecrire dans un Input à condition

#3

Message par orax »

Pourquoi créer un input à chaque fois ? GUICtrlCreateInput va créer un input. Un nouvel input est recréé au même endroit, c'est pour cette raison qu'il y a un clignotement.
Le code GUICtrlSetData($Input2, "blabla") va écrire le texte "blabla" dans $Input2.

Parazitenew a été plus rapide ! :mrgreen:
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Ecrire dans un Input à condition

#4

Message par walkson »

Si je peux me permettre un petit conseil, la fonction Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam) utilise la surveillance de Windows et ne doit pas être bloqué par des Msgbox ou des _Arraydisplay() par exemple sinon grosse BUG
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Narcisse69
Niveau 1
Niveau 1
Messages : 7
Enregistré le : ven. 19 mai 2017 14:47
Status : Hors ligne

Re: Ecrire dans un Input à condition

#5

Message par Narcisse69 »

Merci beaucoup !!! :D

Ça fonctionne comme sur des supers roulettes. \o/
Narcisse69
Niveau 1
Niveau 1
Messages : 7
Enregistré le : ven. 19 mai 2017 14:47
Status : Hors ligne

Re: Ecrire dans un Input à condition

#6

Message par Narcisse69 »

Juste une petite question.

Si je voulais de la même manière faire apparaitre / disparaitre un bouton.
C'est-à-dire :
- quand le label1 est vide => le bouton n'est pas visible
- quand le label1 n'est pas vide => le bouton est visible

Je devrais pouvoir écrire cela, non ?
(je cherche la solution en même temps)

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


$Form2 = GUICreate("Form2", 368, 309, 410, 183)
$Input1 = GUICtrlCreateInput("Input1", 112, 56, 145, 21)
$Button1 = GUICtrlCreateButton("Bonjour", 112, 124, 145, 21)
GUISetState(@SW_SHOW)

GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

While 1
        $msg = GUIGetMsg()
    Select
         Case $msg = $GUI_EVENT_CLOSE
                Exit
    EndSelect
WEnd

Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
  If BitAND($wParam, 0x0000FFFF) = $Input1 AND BitShift($wParam, 16) = $EN_UPDATE Then

                If GUICtrlRead($Input1) <> "" Then
                        _GUICtrlButton_Show($Button1, True)
                Else
                        _GUICtrlButton_Show($Button1, False)
            EndIf

  EndIf


   Return 'GUI_RUNDEFMSG'
EndFunc
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: Ecrire dans un Input à condition

#7

Message par TommyDDR »

GUICtrlSetState($Button1, $GUI_DISABLE)
GUICtrlSetState($Button1, $GUI_ENABLE)
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Narcisse69
Niveau 1
Niveau 1
Messages : 7
Enregistré le : ven. 19 mai 2017 14:47
Status : Hors ligne

Re: Ecrire dans un Input à condition

#8

Message par Narcisse69 »

C'est bon, j'ai trouvé. :)

Merci Tommy, j'avais trouvé ça :
                If GUICtrlRead($Input1) <> ""  Then
                        GUICtrlSetState($Button1,$GUI_SHOW)
                Else
                        GUICtrlSetState($Button1, $GUI_HIDE)
      EndIf
Répondre