Page 1 sur 1

Ecrire dans un Input à condition

Posté : ven. 19 mai 2017 15:15
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 ? :)

Re: Ecrire dans un Input à condition  

Posté : ven. 19 mai 2017 16:37
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

Re: Ecrire dans un Input à condition

Posté : ven. 19 mai 2017 16:44
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:

Re: Ecrire dans un Input à condition

Posté : ven. 19 mai 2017 18:55
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

Re: Ecrire dans un Input à condition

Posté : lun. 22 mai 2017 10:38
par Narcisse69
Merci beaucoup !!! :D

Ça fonctionne comme sur des supers roulettes. \o/

Re: Ecrire dans un Input à condition

Posté : lun. 22 mai 2017 11:18
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

Re: Ecrire dans un Input à condition

Posté : lun. 22 mai 2017 11:49
par TommyDDR
GUICtrlSetState($Button1, $GUI_DISABLE)
GUICtrlSetState($Button1, $GUI_ENABLE)

Re: Ecrire dans un Input à condition

Posté : lun. 22 mai 2017 11:49
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