[..] Comment exploiter une interface

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
MisterASUS
Niveau 2
Niveau 2
Messages : 21
Enregistré le : jeu. 23 juin 2011 16:57
Status : Hors ligne

[..] Comment exploiter une interface

#1

Message par MisterASUS »

Bonjour,

Étant un gros néophyte en la matière, je voudrais vous demander un très grand service qui risque de prendre du temps pour les plus courageux ^^

voila j'ai créer une petite interface très très simple pour le jeu "dame de pique" sur mon ordinateur :

qui donne ceci
► Afficher le texte
Et je voudrais faire fonctionner les différent boutons...
Si quelqu'un pouvais me faire un tutoriel que nous pourrions mettre en post-it car ce que je vais demander risque de faire le tour de toutes les questions que nous pourrions nous poser en temps que débutant...
Alors je vais faire ca comme une petit liste de course pour que ce sois claire et précis ^^

1 - faire que le boutons "ok" lance le jeu et qu'il lance les applications suivantes
2 - récupérer les noms des joueurs pour les remettre après dans les options du jeu.
3 - récupéré les données de la checkbox pour les apliquées.
4 - que le boutons close ferme l'interface

si vous pouvez appliquez ca sous forme d'explication avec des " ;ceci fait celà " dans le script ca m'aiderais beaucoup
Je vous remercie déjà pour la patience et le temps qu'il vous faudra dépenser pour m'aider...
Je vous souhaite une bonne continuation pour la suite

Cordialement,
MisterASUS
Modifié en dernier par MisterASUS le ven. 24 juin 2011 11:34, modifié 2 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Comment exploiter une interface

#2

Message par Tlem »

Je vous conseil vivement la lecture de ceci avant de continuer plus avant.
Lisez et revenez nous voir dans quelques jours. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
MisterASUS
Niveau 2
Niveau 2
Messages : 21
Enregistré le : jeu. 23 juin 2011 16:57
Status : Hors ligne

Re: [..] Comment exploiter une interface

#3

Message par MisterASUS »

Merci je me met au boulot dès demain ^^

Edit: voilà j'arrête pour ce matin j'ai je suis debout depuis 6h ^^

Bon voilà de ce que j'ai appris ce matin, mais il me reste quelques petit problèmes, voici mon tout premier automatisme pour le programme "dame de pique" mais il ne fonctionne malheureusement pas apparemment :/ (en plus pour le fermer je suis obliger de fermer le processus à la barbare parce que la croix fonctionne plus :( )
Je vous demanderais de pas être trop sévères sur mon premier essai =)
si vous pouviez m'aiguiller sur ce qui a pas été et ce que je devrais faire pour améliorer ca serais sympa
► Afficher le texte
Bonne lecture ^^
Avatar du membre
Docteur
Niveau 2
Niveau 2
Messages : 15
Enregistré le : jeu. 23 juin 2011 10:55
Status : Hors ligne

Re: [..] Comment exploiter une interface

#4

Message par Docteur »

Bonjour,

Il existe plusieurs manières de définir des évènements, dont les deux qui ressortent du lot, sont :
- Utiliser le GUIGetMsg()
- Utiliser les GUISetOnEvent() / GUICtrlSetOnEvent() / GUIRegisterMsg()

La première méthode est à proscrire, pour plusieurs raisons :
- La lisibilité du code est fortement diminuée, puisque les éléments sémantiquement proches sont dispersés dans le code. Une des best practices, dans tous les langages de programmation, est de regrouper les éléments de même nature et/ou de sens proche.
- Le GUIGetMsg() renvoie un flot d'informations inutiles, toutes traitées. Chaque message est donc traité dans le switch, ralentissant le script proportionnellement au contenu de ce switch.
- Il vaut mieux éviter de réinventer la roue quand une fonctionnalité est nativement supportée par le langage.

Ainsi, il faut préférer une syntaxe plus lisible et native :

Code : Tout sélectionner

; Activation du mode "event"
Opt("GUIOnEventMode", 1)


; ...

; Création du contrôle
$button = GUICtrlCreateButton("my button", 0, 0)
; Ajout d'un écouteur sur l'évènement "clic"
GUICtrlSetOnEvent( $button, "myHandle" )



; ...

; Fonction interceptant l'évènement "clic" du contrôle $button
Func myHandle()
    
    ; Code associé
    ; ...
    
EndFunc
Tu trouveras les précisions nécessaires du côté de l'aide sur les fonctions nommées plus tôt.


Je tiens aussi à donner un avis personnel sur Koda, et, dans l'ensemble, les générateurs de code :
Il est préférable de placer le code généré dans des fichiers séparés. Ceci pour une raison :
- de lisibilité (le code généré est souvent bien difficile à lire, n'est pas dans un ordre logique)
- de maintenabilité (le code généré demande souvent d'être regénéré à différentes phases du projet)
- de sécurité (le code généré peut écraser le code écrit manuellement)


Cordialement,

Le docteur.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Comment exploiter une interface

#5

Message par mikell »

@Docteur
C'est très intéressant et instructif, mais dans un nouveau sujet
En effet je ne vois rien là-dedans qui réponde aux questions posées par MisterASUS dans son topic

@MisterASUS
- revois la syntaxe : @SW_ENABLE c'est pour une GUI, $GUI_ENABLE pour un controle
- pour une checkbox, GUICtrlRead te dira si elle est $GUI_UNCHECKED ou $GUI_CHECKED
- surveille la logique et les objectifs de tes instructions Case
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Docteur
Niveau 2
Niveau 2
Messages : 15
Enregistré le : jeu. 23 juin 2011 10:55
Status : Hors ligne

Re: [..] Comment exploiter une interface

#6

Message par Docteur »

Pour te répondre, mikell, il me semble que mon réponse est tout à fait légitime, et ipso facto, ton intervention ne l'est pas. D'une part, les best practices sont toujours bonnes à rappeler, quelles que soient les circonstances. D'autre part, le problème de MisterASUS était, entre autres, de faire "fonctionner" les boutons de son interface générée sous Koda ; je cite
Et je voudrais faire fonctionner les différent boutons...
Ma réponse modère l'utilisation des GuiGetMsg(), que MisterASUS a utilisé dans le script qu'il nous a montré, et lui propose une alternative plus élégante. Il est normal d'avoir différents avis et une discussion avancée sur chacune des entrées et sorties de ce forum, afin de faire progresser et la personne qui demande de l'aide et ceux qui, par la suite, liront cette discussion.


Cordialement,

Le docteur.
MisterASUS
Niveau 2
Niveau 2
Messages : 21
Enregistré le : jeu. 23 juin 2011 16:57
Status : Hors ligne

Re: [..] Comment exploiter une interface

#7

Message par MisterASUS »

Merci pour vos réponses je m'y remet mais je laisse le post ouvert pour pas flooder le forum avec pleins de topic :roll:

bonne continuation :wink:
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Comment exploiter une interface

#8

Message par pierrotm777 »

Pour la case cochée ou non, vous pouvez tester cela !

Code : Tout sélectionner

...

        Case $Plein ; => la je sais pas comment faire pour relever si c'est checker ou pas.
            If _IsChecked($Plein) Then
                Msgbox(0,"Info","Case cochée !",2)
            Else
                Msgbox(0,"Info","Case non cochée !",2)
            EndIf

...
;placez cette fonction à la fin de votre script !
Func _IsChecked($control)
    Return BitAND(GUICtrlRead($control), $GUI_CHECKED) = $GUI_CHECKED
EndFunc   ;==>_IsChecked
MisterASUS
Niveau 2
Niveau 2
Messages : 21
Enregistré le : jeu. 23 juin 2011 16:57
Status : Hors ligne

Re: [..] Comment exploiter une interface

#9

Message par MisterASUS »

ce qui me manque c'est une connaissance des thermes de bases, j'en ai appris pas mal sur le site du zéro mais il m'en manque beaucoup :/
par exemple dans mon script j'ai indiquer avec des ;mes commentaire et mes soucis :
► Afficher le texte
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Comment exploiter une interface

#10

Message par pierrotm777 »

Votre fonction _IsChecked, doit être placée aprés le Wend (jamais dans une boucle while ... wend)

Je vous propose ceci:
► Afficher le texte
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Comment exploiter une interface

#11

Message par mikell »

Très clair ton script pierrottm

Code : Tout sélectionner

    ; Ici j'ai voulu lui dire que si la case est cochée, effectuer le click en plus mais si elle ne l'est pas je sais pas quoi lui dire alors j'ai mis une MsgBox... un peux lamentable vous avouerez :/

if GUICtrlRead ($Plein) = $GUI_CHECKED then
    MouseClick ( "Left" , 1503, 194 , 1 , 50  )
Else    ; ben tu mets ce que tu veux, les options les plus courantes sont :
    ; MsgBox(0,"MisterASUS", "Bon jeu !")  ; tu ouvres une msgbox
    ; _MaFonction()   : tu lances une autre fonction de ton choix
    ; Exit  ; tu quittes le programme
    ; ExitLoop  ; tu sors de la boucle While et tu peux continuer sur le script si tu as mis quelque chose après le Wend
    ;    ; si tu mets rien, il ne se passe rien et ta GUI reste en l'état
Endif
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
MisterASUS
Niveau 2
Niveau 2
Messages : 21
Enregistré le : jeu. 23 juin 2011 16:57
Status : Hors ligne

Re: [..] Comment exploiter une interface

#12

Message par MisterASUS »

merci beaucoup pour vos réponses je vais analyser ce que vous m'avez dit et les rajoutent dans mon carnet... (je teins un petit journal ou je vulgarise un peux les thermes mais c'est plus claire pour moi ^^").
MisterASUS
Niveau 2
Niveau 2
Messages : 21
Enregistré le : jeu. 23 juin 2011 16:57
Status : Hors ligne

Re: [..] Comment exploiter une interface

#13

Message par MisterASUS »

Bon là ca commence à émerger mais il reste toujours quelques défauts.
les champs se remplissent la case est cochée, mais le jeu ne se lance pas :/

j'ai essayer de simplifier ce que je voulais faire et ca fait fonctionner la GUI et je n'ai plus les messages du genre ^ERROR: GUICtrlSetState ( $Inputb )
► Afficher le texte
Désolé pour le double post.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Comment exploiter une interface

#14

Message par mikell »

MisterASUS a écrit :les champs se remplissent la case est cochée, mais le jeu ne se lance pas :/
Bon alors :
1- vérifie qu'il n'y a pas d'erreur dans l'adresse
2- mets des points-virgule à toutes les lignes en-dessous du WinWaitActive jusqu'au "Exit"
si le jeu se lance, réessaie en enlevant les points-virgule un par un, comme ça tu trouveras la ligne d'instructions qui merdoie
Et puis revois le script de pierrotm pour corriger les erreurs dans MouseClick et Send :wink:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
MisterASUS
Niveau 2
Niveau 2
Messages : 21
Enregistré le : jeu. 23 juin 2011 16:57
Status : Hors ligne

Re: [..] Comment exploiter une interface

#15

Message par MisterASUS »

un grand merci pour l'astuce mikell, je viens de comprendre où étais le soucis :D
parcontre...
il est où le problème dans cette ligne???
► Afficher le texte
au début je mes suis dit je vais trop vite... je met alors
sleep (1000) devant

puis je me dit, il a pas le temps de faire son action que l'étape suivante est là... je met alors
Sleep (3000) après

mais le message d'erreur est toujours le même... j'ai même essayer de réécrire la ligne mais il me donne toujours ca
► Afficher le texte
Edit: c'est bon j'ai trouver ^^

Edit: deux bon j'ai régler le plusieurs petites choses qui faisaient des soucis mais il me reste toujours le problème de la checkbox.
J'ai essayer par plusieurs facon de régler le problème mais ca ne vas pas, je vous montre ce qui me semblais logique mais qui ne l'est apparement pas pour le script ^^
► Afficher le texte
après j'essayerais de retirer les MsgBox du script parce que ca deviens agacent la confirmation à chaque fois que j'entre un nom ^^
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Comment exploiter une interface

#16

Message par mikell »

Tu as une fonction _IsChecked, non ? alors essaye ça :

Code : Tout sélectionner

If _IsChecked($Plein) Then 
     WinSetState("Dame de Pique", "", @SW_MAXIMIZE)
EndIf
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
MisterASUS
Niveau 2
Niveau 2
Messages : 21
Enregistré le : jeu. 23 juin 2011 16:57
Status : Hors ligne

Re: [..] Comment exploiter une interface

#17

Message par MisterASUS »

\o/ merci mikell ca fonctionne :)

bon au travail ^^ je dois trouver une solution pour ajouter un bouton de sauvegarde des donnée maintenant je planche la dessus et en cas de soucis je vous retrouve ici ^^
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Comment exploiter une interface

#18

Message par pierrotm777 »

Pour info, utilise les balise code et spoiler pour ce que tu post, car pour l'instant tu perd les tab et le lecture de ton script devient plus difficile :D
MisterASUS
Niveau 2
Niveau 2
Messages : 21
Enregistré le : jeu. 23 juin 2011 16:57
Status : Hors ligne

Re: [..] Comment exploiter une interface

#19

Message par MisterASUS »

(OK merci du conseil pierrotm777)

Bon bha je suis un peux bloquer de nouveau... j'ai chercher sur le site du zéro et dans google mais je ne trouve pas comment sauvegarder les champs de ma GUI...
Je voudrais pouvoir (après avoir encoder les trois noms) clicker sur un bouton pour qu'à la prochaine fois que j'ouvre ma Gui les noms sois remis et plus avoir les Input 1, 2 et 3...
J'ai quand même trouver quelques choses je crois mais pas sure...
► Afficher le texte
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Comment exploiter une interface

#20

Message par mikell »

Bah t'es pas loin...
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Répondre