Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Faire le contraire de l'api animateWindow ???

14 réponses
Avatar
LE TROLL
Bonjour,

A l'ouverture chat va, mais à la fermeture il n'est pas possible de
faire le contraire de l'ouverture, y aurait-il une manoeuvre particulière ou
une autre API ???

Le code :

Private Declare Function AnimateWindow Lib "user32" ( _
ByVal hWnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Long
' (&H + ) : > = 1, < = 2, V = 4, /\ = 8
' réduit = 10, cache = 1000, active = 2000, roule = 4000, fond = 8000

Sub Form_Load()
Dim r As Long
r = AnimateWindow(Me.hWnd, 2000, &H10)
End Sub

Sub Form_Terminate()
Dim r As Long
r = AnimateWindow(Me.hWnd, 2000, &H10)
End Sub

Merci, cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.

10 réponses

1 2
Avatar
Jacques93
LE TROLL a écrit :
Bonjour,

A l'ouverture chat va, mais à la fermeture il n'est pas possible de
faire le contraire de l'ouverture, y aurait-il une manoeuvre
particulière ou une autre API ???




Pas sur d'avoir tout compris. Peut être ceci :

Option Explicit
Private Const AW_HOR_POSITIVE = &H1
Private Const AW_HOR_NEGATIVE = &H2
Private Const AW_VER_POSITIVE = &H4
Private Const AW_VER_NEGATIVE = &H8
Private Const AW_CENTER = &H10
Private Const AW_HIDE = &H10000
Private Const AW_ACTIVATE = &H20000
Private Const AW_SLIDE = &H40000
Private Const AW_BLEND = &H80000
Private Const AW_DURATION_DEFAULT = 200

Private Declare Function AnimateWindow Lib "user32" ( _
ByVal hWnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Long

Sub Form_Load()
Dim r As Long
r = AnimateWindow(Me.hWnd, 2000, AW_CENTER)
End Sub


Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Dim r As Long
r = AnimateWindow(Me.hWnd, 2000, AW_CENTER Or AW_HIDE)
End Sub


Doc en anglais d'AnimateWindow :

<http://msdn.microsoft.com/en-us/library/ms632669(VS.85).aspx>

--

Cordialement,

Jacques.
Avatar
Jean-marc
Jacques93 wrote:
LE TROLL a écrit :



Hello Jacques,

Doc en anglais d'AnimateWindow :

<http://msdn.microsoft.com/en-us/library/ms632669(VS.85).aspx>



Et en complément ce petit exemple en VB qui reprend le tien:
http://binaryworld.net/Main/CodeDetail.aspx?CodeId655

Cordialement,

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
LE TROLL
Bonsoir jacques,

voici :

Private Declare Function AnimateWindow Lib "user32" ( _
ByVal hWnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Long
Private Const AW_HOR_POSITIVE = &H1
Private Const AW_HOR_NEGATIVE = &H2
Private Const AW_VER_POSITIVE = &H4
Private Const AW_VER_NEGATIVE = &H8
Private Const AW_CENTER = &H10
Private Const AW_HIDE = &H10000
Private Const AW_ACTIVATE = &H20000
Private Const AW_SLIDE = &H40000
Private Const AW_BLEND = &H80000
Private Const AW_DURATION_DEFAULT = 200
Dim r As Long

Sub Form_Load()
r = AnimateWindow(Me.hWnd, 2000, AW_CENTER)
End Sub

Sub Form_Terminate()
r = AnimateWindow(Me.hWnd, 2000, AW_CENTER Or AW_HIDE)
End Sub
-------------------

Mais ça ne marche pas, car si c'est bon dans le load, ce n'est pas bon
dans dans le terminate (l'évènement est le bon), mais pas la commande.

En effet, on part d'un point et on agrandit jusqu'à la taille voulue au
lancement, et bien quand je ferme je voudrais le contraire, on part de la
taille actuelle et in rétrécit jusqu'à ce que ce soit un point qu'on efface
in fine, le contraire de l'ouverture ???

Quand tu mets "OR" ça fait quoi, dans quelle condition la seconde
constante est choisie ?

Si tu as une autre idée ?

Cordialement ;o)
.


----- Original Message -----
From: "Jacques93"
Newsgroups: microsoft.public.fr.vb
Sent: Friday, September 18, 2009 6:12 PM
Subject: Re: Faire le contraire de l'api animateWindow ???


LE TROLL a écrit :
Bonjour,

A l'ouverture chat va, mais à la fermeture il n'est pas possible de
faire le contraire de l'ouverture, y aurait-il une manoeuvre particulière
ou une autre API ???




Pas sur d'avoir tout compris. Peut être ceci :

Option Explicit
Private Const AW_HOR_POSITIVE = &H1
Private Const AW_HOR_NEGATIVE = &H2
Private Const AW_VER_POSITIVE = &H4
Private Const AW_VER_NEGATIVE = &H8
Private Const AW_CENTER = &H10
Private Const AW_HIDE = &H10000
Private Const AW_ACTIVATE = &H20000
Private Const AW_SLIDE = &H40000
Private Const AW_BLEND = &H80000
Private Const AW_DURATION_DEFAULT = 200

Private Declare Function AnimateWindow Lib "user32" ( _
ByVal hWnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As
Long

Sub Form_Load()
Dim r As Long
r = AnimateWindow(Me.hWnd, 2000, AW_CENTER)
End Sub


Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Dim r As Long
r = AnimateWindow(Me.hWnd, 2000, AW_CENTER Or AW_HIDE)
End Sub


Doc en anglais d'AnimateWindow :

<http://msdn.microsoft.com/en-us/library/ms632669(VS.85).aspx>

--

Cordialement,

Jacques.




--
Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"Jacques93" a écrit dans le message de
news:
LE TROLL a écrit :
Bonjour,

A l'ouverture chat va, mais à la fermeture il n'est pas possible de
faire le contraire de l'ouverture, y aurait-il une manoeuvre particulière
ou une autre API ???




Pas sur d'avoir tout compris. Peut être ceci :

Option Explicit
Private Const AW_HOR_POSITIVE = &H1
Private Const AW_HOR_NEGATIVE = &H2
Private Const AW_VER_POSITIVE = &H4
Private Const AW_VER_NEGATIVE = &H8
Private Const AW_CENTER = &H10
Private Const AW_HIDE = &H10000
Private Const AW_ACTIVATE = &H20000
Private Const AW_SLIDE = &H40000
Private Const AW_BLEND = &H80000
Private Const AW_DURATION_DEFAULT = 200

Private Declare Function AnimateWindow Lib "user32" ( _
ByVal hWnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As
Long

Sub Form_Load()
Dim r As Long
r = AnimateWindow(Me.hWnd, 2000, AW_CENTER)
End Sub


Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Dim r As Long
r = AnimateWindow(Me.hWnd, 2000, AW_CENTER Or AW_HIDE)
End Sub


Doc en anglais d'AnimateWindow :

<http://msdn.microsoft.com/en-us/library/ms632669(VS.85).aspx>

--

Cordialement,

Jacques.


Avatar
LE TROLL
Bonsoir Jean-Marc,

Je les ai toutes essayées, il n'y a a priori aucun combinaison qui fait
le contraire de ce qu'elle a fait au démarrage, exemple, si le store descend
au démarrage, ben le store doit monter à la fermeture, bref, on mettrait END
que ce serait mieux !

Cet API semble uniquement faite pour animer l'ouverture d'une feuille,
et non sa fermeture...

Private Declare Function AnimateWindow Lib "user32" ( _
ByVal hWnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Long
Private Const AW_HOR_POSITIVE = &H1
Private Const AW_HOR_NEGATIVE = &H2
Private Const AW_VER_POSITIVE = &H4
Private Const AW_VER_NEGATIVE = &H8
Private Const AW_CENTER = &H10
Private Const AW_HIDE = &H10000
Private Const AW_ACTIVATE = &H20000
Private Const AW_SLIDE = &H40000
Private Const AW_BLEND = &H80000
Private Const AW_DURATION_DEFAULT = 200
Dim r As Long

Sub Form_Load()
r = AnimateWindow(Me.hWnd, 2000, AW_CENTER)
End Sub

Sub Form_Terminate()
'r = AnimateWindow(Me.hWnd, 2000, AW_CENTER Or AW_HIDE)
'
'r = AnimateWindow(Me.hWnd, 2000, AW_BLEND Or AW_HIDE)
'r = AnimateWindow(Me.hWnd, 2000, AW_HOR_POSITIVE Or AW_SLIDE Or AW_HIDE)
'r = AnimateWindow(Me.hWnd, 2000, AW_HOR_NEGATIVE Or AW_SLIDE Or AW_HIDE)
'r = AnimateWindow(Me.hWnd, 2000, AW_CENTER Or AW_HIDE)
'r = AnimateWindow(Me.hWnd, 2000, AW_VER_POSITIVE Or AW_SLIDE Or AW_HIDE)
'r = AnimateWindow(Me.hWnd, 2000, AW_VER_NEGATIVE Or AW_SLIDE Or AW_HIDE)
End Sub


--
Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"Jean-marc" a écrit dans le message de
news:4ab3bd4f$0$2864$
Jacques93 wrote:
LE TROLL a écrit :



Hello Jacques,

Doc en anglais d'AnimateWindow :

<http://msdn.microsoft.com/en-us/library/ms632669(VS.85).aspx>



Et en complément ce petit exemple en VB qui reprend le tien:
http://binaryworld.net/Main/CodeDetail.aspx?CodeId655

Cordialement,

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;






Avatar
Jacques93
LE TROLL a écrit :
Bonsoir jacques,

voici :

Private Declare Function AnimateWindow Lib "user32" ( _
ByVal hWnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Long
Private Const AW_HOR_POSITIVE = &H1
Private Const AW_HOR_NEGATIVE = &H2
Private Const AW_VER_POSITIVE = &H4
Private Const AW_VER_NEGATIVE = &H8
Private Const AW_CENTER = &H10
Private Const AW_HIDE = &H10000
Private Const AW_ACTIVATE = &H20000
Private Const AW_SLIDE = &H40000
Private Const AW_BLEND = &H80000
Private Const AW_DURATION_DEFAULT = 200
Dim r As Long

Sub Form_Load()
r = AnimateWindow(Me.hWnd, 2000, AW_CENTER)
End Sub

Sub Form_Terminate()
r = AnimateWindow(Me.hWnd, 2000, AW_CENTER Or AW_HIDE)
End Sub
-------------------

Mais ça ne marche pas, car si c'est bon dans le load, ce n'est pas bon
dans dans le terminate (l'évènement est le bon), mais pas la commande.




Pas d'accord, dans mon exemple, comme celui cité par Jean-Marc, ce n'est
pas sur cet événement qu'est appelée AnimateWindow, mais dans
QueryUnload ou Unload.

Si tu l'appelles dans Terminate, la fenêtre n'étant plus visible, il ne
se passera rien, d'ailleurs dans ce cas l'API renvoie zéro, ce qui
indique une erreur :

Return Value

If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. The function will fail
in the following situations:



--

Cordialement,

Jacques.
Avatar
Jacques93
Jean-marc a écrit :
Jacques93 wrote:
LE TROLL a écrit :



Hello Jacques,



Bonjour Jean-Marc,


Doc en anglais d'AnimateWindow :

<http://msdn.microsoft.com/en-us/library/ms632669(VS.85).aspx>



Et en complément ce petit exemple en VB qui reprend le tien:
http://binaryworld.net/Main/CodeDetail.aspx?CodeId655




Oui, c'est plus complet que mon petit bout de code. Mais avec LE TROLL
il faut faire court ;-)


--

Cordialement,

Jacques.
Avatar
Jacques93
LE TROLL a écrit :
[...]
Quand tu mets "OR" ça fait quoi, dans quelle condition la seconde
constante est choisie ?




Il n' a pas de choix. "OR" effectue un ou logique :

AW_CENTER = &h10
AW_HIDE = &h10000
AW_CENTER Or AW_HIDE = &h10010

Extrait de l'aide :

AW_HIDE
Hides the window. By default, the window is shown.

AW_CENTER
Makes the window appear to collapse inward if AW_HIDE is used or
expand outward if the AW_HIDE is not used. The various direction
flags have no effect.
--

Cordialement,

Jacques.
Avatar
LE TROLL
Merci Jacques (Jean-Marc aussi),

Ça marche, magnifique, mais ma difficulté venait, je viens de le voir,
du fait que ça s'exécute mal ou pas en interprétation, il faut compiler (PC
Vista 32)...

Le "OU" je ne comprends pas, je me souviens d'avoir appris un truc à 2
"ou" en tc3++, mais je n'ai jamais utilisé, alors je ne comprends pas le
mécanisme "ici" ?
Par exemple le ou classique, exclusif, qui exclut ceci ou cela : if x < 10
or x > 10 (seule le 10 passe, ça exclut le reste)...
Mais là, en fait ça veut dire : si 1 n'est pas ça alors fait 2 et si 2 n'est
pas ça alors fait 3 ? Ou ça veut dire, fait un, puis 2 puis 3 ? Ou encore :
fait 1 et 2 et 3 ?
Et bien le OU de l'API il ferait quoi, peux-tu me l'expliquer par d'autres
signes ou un case, ce doit être faisable ?

---
Voici ce qu'a priori j'en ai tiré avec son contraire (il faut aussi tester
WindowState) :

Option Explicit
Private Declare Function AnimateWindow Lib "user32" ( _
ByVal hWnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Long
Private Const AW_HOR_POSITIVE = &H1
Private Const AW_HOR_NEGATIVE = &H2
Private Const AW_VER_POSITIVE = &H4
Private Const AW_VER_NEGATIVE = &H8
Private Const AW_CENTER = &H10
Private Const AW_HIDE = &H10000
Private Const AW_ACTIVATE = &H20000
Private Const AW_SLIDE = &H40000
Private Const AW_BLEND = &H80000
Private Const AW_DURATION_DEFAULT = 2000
Dim r As Long
Dim cas As String

Sub Form_Load()
r = 4
Select Case r
Case 1: r = AnimateWindow(Me.hWnd, AW_DURATION_DEFAULT, AW_CENTER): cas
= "gros"
Case 2: r = AnimateWindow(Me.hWnd, AW_DURATION_DEFAULT,
AW_VER_POSITIVE): cas = "bas"
Case 3: r = AnimateWindow(Me.hWnd, AW_DURATION_DEFAULT,
AW_HOR_POSITIVE): cas = "droite"
Case 4: r = AnimateWindow(Me.hWnd, AW_DURATION_DEFAULT, AW_BLEND): cas =
"fondu"
End Select
End Sub

Sub Form_Unload(Cancel As Integer)
If WindowState <> 1 Then
If cas = "gros" Then r = AnimateWindow(Me.hWnd, AW_DURATION_DEFAULT,
AW_CENTER Or AW_HIDE)
If cas = "bas" Then r = AnimateWindow(Me.hWnd, AW_DURATION_DEFAULT,
AW_VER_NEGATIVE Or AW_SLIDE Or AW_HIDE)
If cas = "droite" Then r = AnimateWindow(Me.hWnd, AW_DURATION_DEFAULT,
AW_HOR_NEGATIVE Or AW_SLIDE Or AW_HIDE)
If cas = "fondu" Then r = AnimateWindow(Me.hWnd, AW_DURATION_DEFAULT,
AW_BLEND Or AW_HIDE)
End If
Reset
End
End Sub

--
Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"Jacques93" a écrit dans le message de
news:
Jean-marc a écrit :
Jacques93 wrote:
LE TROLL a écrit :



Hello Jacques,



Bonjour Jean-Marc,


Doc en anglais d'AnimateWindow :

<http://msdn.microsoft.com/en-us/library/ms632669(VS.85).aspx>



Et en complément ce petit exemple en VB qui reprend le tien:
http://binaryworld.net/Main/CodeDetail.aspx?CodeId655




Oui, c'est plus complet que mon petit bout de code. Mais avec LE TROLL il
faut faire court ;-)


--

Cordialement,

Jacques.


Avatar
Jacques93
LE TROLL a écrit :
Merci Jacques (Jean-Marc aussi),

Ça marche, magnifique, mais ma difficulté venait, je viens de le
voir, du fait que ça s'exécute mal ou pas en interprétation, il faut
compiler (PC Vista 32)...

Le "OU" je ne comprends pas, je me souviens d'avoir appris un truc à
2 "ou" en tc3++, mais je n'ai jamais utilisé, alors je ne comprends pas
le mécanisme "ici" ?



Un petit rappel de l'algèbre de Boole ?

<http://fr.wikipedia.org/wiki/Alg%C3%A8bre_de_Boole_(logique)>

Par exemple le ou classique, exclusif, qui exclut ceci ou cela : if x <
10 or x > 10 (seule le 10 passe, ça exclut le reste)...



Ben non, dans ce cas tout passe, sauf le 10 ...

Mais là, en fait ça veut dire : si 1 n'est pas ça alors fait 2 et si 2
n'est pas ça alors fait 3 ? Ou ça veut dire, fait un, puis 2 puis 3 ? Ou
encore : fait 1 et 2 et 3 ?
Et bien le OU de l'API il ferait quoi, peux-tu me l'expliquer par
d'autres signes ou un case, ce doit être faisable ?




Le OU fait partie de VB pas de l'API.

--

Cordialement,

Jacques.
Avatar
Jean-marc
LE TROLL wrote:
Merci Jacques (Jean-Marc aussi),

Le "OU" je ne comprends pas, je me souviens d'avoir appris un truc
à 2 "ou" en tc3++, mais je n'ai jamais utilisé, alors je ne comprends
pas le mécanisme "ici" ?



Tu as raison, c'est un peu déconcertant pour qui n'est pas familier de
la chose.
Il y a 2 sortes de OU : le OU logique, et l'opérateur bit-à-bit OU de
l'agèbre de boole, qu'on appelle aussi OU arithmétique.

Le problème de compréhension vient du fait que VB représente ces 2
opérateurs
(OU logique et OU arithmétique) de la même façon: Or.

[En C par exemple, le OU logique est noté "||" alors que le OU bit-à-bit est
noté "|".]

Par exemple le ou classique, exclusif, qui exclut ceci ou cela : if x
< 10 or x > 10 (seule le 10 passe, ça exclut le reste)...



Ce "ou" , c'est le OU Logique (ça ne s'appelle pas un ou exclusif: un ou
exclusif, c'est autre chose - voir plus loin)

Le OU logique, c'est facile: c'est un opérateur booléen qui obéit
à la table de vérité bien connue:

A Or B
+------+--------+-------+
| A | False | True |
|B | | |
+------+--------+-------+
| False| FALSE | TRUE |
+------+--------+-------+
| True | TURE | TRUE |
+------+--------+-------+

Donc quand on écrit en VB:

If A or B Then
=> EXECUTE CECI
End If

Le code après le If est exécuté si A est Vrai, ou Si B est Vrai.

NOTE: Ce n'est PAS un OU Exclusif : un OU Exclusif, encore appelé XOR est
légèrement différent. Sa table est :

A XOr B
+------+--------+-------+
| A | False | True |
|B | | |
+------+--------+-------+
| False| FALSE | TRUE |
+------+--------+-------+
| True | TURE | FALSE |
+------+--------+-------+

Tu vois la différence : Si A et B sont tous 2 VRAI, alors A XOR B est faux.

En VB il n'y a pas de XOR, mais on s'en sort quand même car:

A XOR B = (A And NOT(b)) OR (not(A) And B)
A


Mais là, en fait ça veut dire : si 1 n'est pas ça alors fait 2 et si
2 n'est pas ça alors fait 3 ? Ou ça veut dire, fait un, puis 2 puis 3
? Ou encore : fait 1 et 2 et 3 ?
Et bien le OU de l'API il ferait quoi, peux-tu me l'expliquer par
d'autres signes ou un case, ce doit être faisable ?



Oui, ici on emploie le Or en tant qu'opérateur bit-à bit. IL est très
courant en informatique d'utiliser un entier long (donc sur 32 bits) pour
stocker plein de petites valeurs booléennes.
Et l'opérateur Or sert à mettre à 1 les bits nécessaires. De même le And
bit-à-bit servira à fabriquer des masques de bits.

Le fonctionnement du Or est simple. Il agit avec les bits comme le Or
logique avec les booléens.
0 Or 0 = 0
0 or 1 = 1
1 or 0 = 0
1 or 1 = 1

Exemple pratique

const TOTO = 1
Const TITI = 2
Const TUTU = 4
Const TATA = 8

(tu noteras qu'on utilise uniquement des puissances de 2, pour des raisons
évidentes: ainsi, un seul bit à la fois est à 1 dans la représentation
binaire du nombre).

Dim v as Integer

v = TOTO Or TITI ' ca nous donne un entier avec le bit 0 et le bit 1 à 1
=> ca vaut 3
v = TITI Or TATA ' ca nous donne un entier avec le bit 1 et le bit 3 à 1
=> ca vaut 10 (&h0A)

C'est vraiement une pratique très courante d'utiliser cela.

On comprend mieux en représentant les nombres en hexa ou en binaire, auquel
cas ça devient évident.
C'est une petite gymnastique mentale qui vient avec le temps: après 30 ans
d'utilisation, tu additionnes, tu "OR" et tu "AND" bit-à-bit sur des nombres
de 32 bits sans efforts :-)

Bon Aprèm !

Cordialement,

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
1 2