Page 1 sur 2

[..] Comment exploiter une interface

Posté : jeu. 23 juin 2011 23:49
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

Re: [..] Comment exploiter une interface

Posté : jeu. 23 juin 2011 23:52
par Tlem
Je vous conseil vivement la lecture de ceci avant de continuer plus avant.
Lisez et revenez nous voir dans quelques jours. ;)

Re: [..] Comment exploiter une interface

Posté : ven. 24 juin 2011 11:58
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 ^^

Re: [..] Comment exploiter une interface

Posté : ven. 24 juin 2011 16:04
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.

Re: [..] Comment exploiter une interface

Posté : ven. 24 juin 2011 21:11
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

Re: [..] Comment exploiter une interface

Posté : ven. 24 juin 2011 22:37
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.

Re: [..] Comment exploiter une interface

Posté : ven. 24 juin 2011 23:46
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:

Re: [..] Comment exploiter une interface

Posté : sam. 25 juin 2011 09:01
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

Re: [..] Comment exploiter une interface

Posté : sam. 25 juin 2011 10:09
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

Re: [..] Comment exploiter une interface

Posté : sam. 25 juin 2011 11:01
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

Re: [..] Comment exploiter une interface

Posté : sam. 25 juin 2011 11:33
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

Re: [..] Comment exploiter une interface

Posté : sam. 25 juin 2011 13:30
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 ^^").

Re: [..] Comment exploiter une interface

Posté : sam. 25 juin 2011 14:32
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.

Re: [..] Comment exploiter une interface

Posté : sam. 25 juin 2011 15:44
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:

Re: [..] Comment exploiter une interface

Posté : sam. 25 juin 2011 16:39
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 ^^

Re: [..] Comment exploiter une interface

Posté : sam. 25 juin 2011 19:17
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

Re: [..] Comment exploiter une interface

Posté : sam. 25 juin 2011 20:08
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 ^^

Re: [..] Comment exploiter une interface

Posté : dim. 26 juin 2011 08:32
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

Re: [..] Comment exploiter une interface

Posté : dim. 26 juin 2011 13:26
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

Re: [..] Comment exploiter une interface

Posté : dim. 26 juin 2011 14:27
par mikell
Bah t'es pas loin...
► Afficher le texte