[R] Effet de switch entre 2 GUI (effet visuel de type Aéro)

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
lerin57
Niveau 4
Niveau 4
Messages : 97
Enregistré le : mer. 30 sept. 2009 12:50
Status : Hors ligne

[R] Effet de switch entre 2 GUI (effet visuel de type Aéro)

#1

Message par lerin57 »

Bonjour à Tous (et à toutes).

Je tente de recréer un effet de transition entre deux fenêtres gui.

voici un début de code :
► Afficher le texte
Il n'y a qu'un seul petit probleme : l'effet n'est évidement pas synchro, à savoir que la première fenêtre se déplace, puis la seconde.

Ce que je désire obtenir, c'est un déplacement des deux Gui en même temps.

J'ai observé des exemples sur ce forum de déplacement de deux fenetres, mais seulement en définissant un controle de coordonnée sur une "fenetre maitresse".

J'ai cru comprendre qu'autoit ne gérait pas forcement ce type de fonction multitache, j'aimerais simplement savoir si il existe une astuce pour arriver au résultat espéré, à savoir que les fenetres s'entrecroisent en même temps.

en vous souhaitant à tous de joyeuses fêtes.
Modifié en dernier par lerin57 le mer. 05 janv. 2011 11:23, modifié 1 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: [..]Creer un effet de switch gui (effet visuel de type aero)

#2

Message par Tlem »

Cela n'a rien à voir avec le multi-tâche.
C'est à vous de créer la fonction qui gèrera le déplacement des GUIs (comme vous l'avez fait dans _switch_gui, mais en prenant compte les deux GUI. ;)).

Ensuite, votre script me parait bien compliqué pour faire ce que vous avez à faire. Vous utilisez 2 boucles que vous appelez alternativement, mais comme vous utilisez GUIGetMsg en mode avancé, une seule boucle suffira.

Dans votre fonction _switch_gui, vous devez récupérer les coordonnées des fenêtres $Gui_origine et $Gui_view.
Là dans votre code, vous récupérez position et taille, mais que de la fenêtre $Gui_origine. :shock:

C'est ensuite que vous devez 'calculer' la suite de mouvements et de transitions que vous voulez effectuer sur les deux fenêtres alternativement. L'utilisation d'une boucle pour reproduire l'effet plusieurs fois serait judicieux. ;)

Une fois l'effet terminé, vous devez ressortir (comme vous le faites déjà), avec la fenêtre $Gui_origine masquée et $Gui_view affichée.

A partir de là, dans votre boucle, il suffit de vérifier sur quel bouton vous cliquez. Si c'est $Transition_Gui_01, c'est donc que la GUI 1 était visible. Si c'est $Transition_Gui_02, c'estque c'est la GUI 2 et donc, il vous suffit d'appeler _switch_gui avec les paramètres en conséquence. ;)
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é".
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..]Creer un effet de switch gui (effet visuel de type aero)

#3

Message par Tlem »

J'ai eu quelques minutes pour regarder votre code.

Supprimez les fonctions _intro et _app_2 et utilisez cette boucle.
En ce qui concerne le déplacement des fenêtres, je pense comprendre ce que vous vouliez faire. Vous vouliez sans doute utiliser le WinMove pour déplacer la GUI 1 et GUI 2 simultanément !
Et là, effectivement les choses deviennent plus compliqué.
Cela est possible, mais il vous faudra utiliser des astuces plus ou moins complexes pour arriver à vos fins. Peut être cela n'en vaut-il pas la peine pour si peut ...
► Afficher le texte
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é".
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [..]Creer un effet de switch gui (effet visuel de type aero)

#4

Message par matwachich »

Je l'ai fait spécialement pour toi!
Lien
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Effet de switch entre 2 GUI (effet visuel de type Aéro)

#5

Message par Tlem »

Bien joué.
Pour voir l'effet au ralentit, j'ai modifié le Sleep(1) par Sleep(200). :wink:
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é".
lerin57
Niveau 4
Niveau 4
Messages : 97
Enregistré le : mer. 30 sept. 2009 12:50
Status : Hors ligne

Re: [..] Effet de switch entre 2 GUI (effet visuel de type Aéro)

#6

Message par lerin57 »

Bonjour, et meilleurs voeux pour cette année.

En suivant les indication de Tlem, j'avais déja commencé à imaginer une fonction similaire à celui que propose matwachich.

Je me doutait bien qu'il fallait jouer d'astuce plutôt que partir trop loin dans un code trop complexe

Comme tu m'a devancé, je vais tester de suite (encore merci !!!)

Je reviens vite pour donner la conclusion.

petite note : il est vraix que ma façon d'aborder autoit est un peu désordonnée, c'est pour cela que j'ai un peu negligé les capacité de la fonction guigetmsg.

Je viens de me rendre compte que j'ai un paquets de codes à modifier du coup :P :P :P
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [..] Effet de switch entre 2 GUI (effet visuel de type Aéro)

#7

Message par matwachich »

C'est en forgeant qu'on devient forgeron!
On a tous codé 'avec les pieds' il fut un temps!
C'est une question d'expérience, de persévérance, et surtout, de patience (et de googlage aussi!!!)
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
lerin57
Niveau 4
Niveau 4
Messages : 97
Enregistré le : mer. 30 sept. 2009 12:50
Status : Hors ligne

Re: [..] Effet de switch entre 2 GUI (effet visuel de type Aéro)

#8

Message par lerin57 »

Bien,

J'ai testé le code et il répond parfaitement à mes attente.

Je suis connu pour etre enquiquinant à ce sujet, mais je ne suis pas très doué lorsque l'on aborde les question mathématiques.

J'ai compris le pricnipe de la boucle et l'integration du calcul, mais mes notion concernant les sinusoides sont vagues (non, non, ... je vais dire qu'elle sont plutot nulle :oops: ).

Tu a bien indiqué que cela était barbant de préciser le but du calcul (et je le comprend sans probleme), mais s'il t'es encore possible d'expliquer le principe d'application de la fonction sin, je t'en serait très reconnaissant.

Si ce la est trop demandé (après tout, il faut aussi savoir soliciter google), et je mettrait le sujet en clos.

Merci encore pour tes efforts
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [..] Effet de switch entre 2 GUI (effet visuel de type Aéro)

#9

Message par matwachich »

Bah écoute mon ami, si gentiment demandé, j'peux pas refuser!!!

Reprenons la boucle principale

Code : Tout sélectionner

For $i = 0 To 360 Step 10
        $sin = Sin(_Radian($i))     ; La clef! un fonction sinusoïdale

        WinMove($gui1, "", $visiblePos[0] + ($sin * $amplitudeX), $visiblePos[1] + ($sin * $amplitudeY)) ; J'ai la flème
        WinMove($gui2, "", $visiblePos[0] - ($sin * $amplitudeX), $visiblePos[1] - ($sin * $amplitudeY)) ; d'expliquer!

        WinSetTrans($gui1, "", 255 - ($i / $angl2trans))    ; Un petit jeu de transparence!
        WinSetTrans($gui2, "", $i / $angl2trans)            ; fade-in et fade-out

        Sleep(1)
    Next
- $i évolue de 0 à 360, c'est l'angle d'un cercle si on peut dire.
- On convertie $i en radians, car la fonction Sin n'accepte que des radians (et pas les degrés)
- Donc, et c'est là qui faut avoir fait des maths, et avoir en tête le cercle des valeurs Sinus/Cosinus
On sait que le Sinus varie de -1 à 1 en passant par 0, et c'est ça que j'exploite!
- Si on regarde les WinMove, je fait $sin * $amplitude: donc, quand sinus = 0, y'aura aucun mouvement, et quand sinus = 1 ou -1, le mouvement de la fenêtre sera = à l'amplitude demandé.
- Quand sinus est positive, une fenêtre se déplace d'un coté, tandis que l'autre se déplace vers l'autre, et vice vers ça (regarde les deux WinMove, la seul différence est le signe + dans l'un, et le - dans l'autre)
- Enfin, évidement, j'additionne $sin * $amplitude à $visiblePos, pour que le mouvement se fasse par rapport à la position initiale de la fenêtre visible.

Au fait, je suis moi même pas conquis par mes explication, mais je n'ai pas fait de maths depuis 4ans (le bac), il ne me reste que le cercle dont je t'ai donné le lien au dessus, si tu comprend ce cercle, c'est bon!
PS: Sur le cercle, Sinus correspond à l'axe Y, si on regarde bien, on voit que pour un angle:
- 0 deg ou de 180 deg (ou aussi 360 qui nous ramène à 0), Sinus = 0
- 90 deg, sinus = 1
- 270 deg, sinus = -1
Donc on déduit les valeurs par les quelles passe $sin par rapport à $i qui évolue de 0 à 360

Je ne sais pas j'ai était claire!
Sinon, voici des liens, mais c'est pointu!
http://fr.wikipedia.org/wiki/Fonction_t ... 3%A9trique
http://fr.wikipedia.org/wiki/Signal_sinuso%C3%AFdal
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
lerin57
Niveau 4
Niveau 4
Messages : 97
Enregistré le : mer. 30 sept. 2009 12:50
Status : Hors ligne

Re: [..] Effet de switch entre 2 GUI (effet visuel de type Aéro)

#10

Message par lerin57 »

C'est bien plus que je n'en demandais.

Avec cette explication, le code me semble un peu clair.

Mes notion de trigonométrie sont un peu vagues (cela remonte à plus de dix ans dans mon cas :roll: ),

mais je me rappelle de quelques principes de bases.

Je vais me baser sur tes explication pour adapter ton code et l'ajouter dans mes bases de connaissances.

Encore un grand merci pour ton aide

Merci aussi à Tlem pour m'avoir rattrapé sur la fonction guigetmsg(). 8)
Répondre