ANIMER FENETRE

Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 - 15 avril 2007 à 13:53
cs_matrix1 Messages postés 169 Date d'inscription dimanche 16 février 2003 Statut Membre Dernière intervention 15 avril 2008 - 6 juin 2007 à 12:56
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/42277-animer-fenetre

cs_matrix1 Messages postés 169 Date d'inscription dimanche 16 février 2003 Statut Membre Dernière intervention 15 avril 2008
6 juin 2007 à 12:56
ne soyez pas si dure les gas, t'es encore un newbie en delphi, c normale, fais des recherche et améliore vos compétences, un tu fera quel que chose d'intéressant et tu vas les impressionner mais il faut d'abord aimer ce que tu fais ;), tien! essay de faire des(draw)s sure ton propre form ou just des boucles
//**************************
if Mypanel.Left=380 then
while (Mypanel.Left<735) do
begin
Mypanel.Left:=Mypanel.Left+5 ;
end else
if Mypanel.Left>=735 then
while (Mypanel.Left>380) do
begin
Mypanel.Left:=Mypanel.Left-5 ;
end;
//******************là t'es pas oubligé de refresh ;)***********
tu fera des mervielles il faux just de l'imagination et du travail. bon courage
et je m'excuse pur mon français, i'm not francophone
riri15 Messages postés 6 Date d'inscription dimanche 29 janvier 2006 Statut Membre Dernière intervention 28 avril 2007
25 avril 2007 à 14:16
Je remercie RANDRIANO pour l'amélioration qu'il a fait sur mon code!
Tu as tout mon accord!
Japee, ne soyez pas sévère! Je crois qu'il a tout pigé now!
randriano Messages postés 54 Date d'inscription vendredi 13 avril 2007 Statut Membre Dernière intervention 26 juillet 2011
24 avril 2007 à 19:58
Bonjour!

Excusez moi! Japee! Bon, je vais enlever ce truc de ce code mais je voulais seulement partager ces codes à tout le monde mais j'ai tort!

Je vais enlever le code developer13 et zoomer désolé!!!!!
randriano Messages postés 54 Date d'inscription vendredi 13 avril 2007 Statut Membre Dernière intervention 26 juillet 2011
23 avril 2007 à 18:38
Bon, merci de vos conseils!
Je promets une modification bientôt, je dois d'abord m'arranger avec mon emploi du temps!

Je fais faire meilleur que DevelOpeR13!!
J'espère
randriano Messages postés 54 Date d'inscription vendredi 13 avril 2007 Statut Membre Dernière intervention 26 juillet 2011
16 avril 2007 à 12:46
Pour les Refresh, je crois que j'ai posté le mauvais zip qui inclut ça.
Je vais tenir compte des remarques que vous apportez pour la mise à jour.
Merci!
En effet, c'est bizarre qu'il faille rafraichir chaque bouton.
Mais tant qu'a faire, autant en faire une fonction prête à l'emploi :

procedure BlendForm(Form: TCustomForm; Delay: Integer);
const
CBlendFlag: array[Boolean] of Cardinal = (AW_BLEND, AW_BLEND or AW_HIDE);
var
I: Integer;
begin
AnimateWindow(Form.Handle, Delay, CBlendFlag[Form.Visible]);
for I := 0 to Form.ControlCount - 1 do
if Form.Controls[I] is TWinControl then
Form.Controls[I].Invalidate;
Form.Visible := not Form.Visible;
end;

Vous aurez remarqué que le choix d'apparition dépend de la visibilité de la fiche.
Et avec tout ça, plus de problème de flags ni de comptage du nombre de boutons.

NB: il est à noter que ce problème ne concerne QUE les TWinControl, les TLabel, eux, ne sont pas concernés.

NB-2: avec tout ça, il devient possible de faire :

BlendForm(Self, 800);
BlendForm(Self, 800);

pour faire disparaitre puis réapparaitre la fiche !

++
Flo
Debiars Messages postés 285 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 11 février 2018
15 avril 2007 à 16:20
ALSO OK.

On peut également simplifier comme ceci :

Pour tous les boutons :
- On renseigne la propriété Tag avec le numéro du bouton
- On met "Button1Click" dans l'évenement OnClick.

On ne garde que la procédure Button1Click, comme ceci :

procedure TForm1.Button1Click(Sender: TObject);
var i, tag : byte;
begin
form1.Hide;
tag := (Sender as TButton).Tag;
case tag of
1 : AnimateWindow(Handle,2000,AW_CENTER);
2 : AnimateWindow(Handle,2000,AW_BLEND);
3 : begin
AnimateWindow(Handle,2000,AW_CENTER);
AnimateWindow(Handle,4000,AW_BLEND);
end;
4 : AnimateWindow(Handle,2000,AW_VER_POSITIVE);
5 : AnimateWindow(Handle,2000,AW_VER_NEGATIVE);
6 : AnimateWindow(Handle,2000,AW_HOR_POSITIVE);
7 : AnimateWindow(Handle,2000,AW_HOR_NEGATIVE);
end;
form1.Show;
for i := 1 to 7 do Bouton(i).Refresh;
end;

function TForm1.Bouton(no : byte) : TButton;
begin
Result := FindComponent('button'+ IntToStr(no)) as TButton;
end;
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 2
15 avril 2007 à 15:46
C'est pas bête d'utiliser une petite boucle for, mais le petit truc final qui serait de compter le nombre total de boutons ce qui permettrais de ne pas modifier la fonction et pour autant pouvoir rajouter des boutons sans remodifier la fonction par derrière !
Debiars Messages postés 285 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 11 février 2018
15 avril 2007 à 15:41
Also know as : Pour accéder à une série de composants identiques, je procède comme ceci :

Une petite fonction :

function TForm1.Bouton(no : byte) : TButton;
begin
Result := FindComponent('Button'+ IntToStr(no)) as TButton;
end;

qui permet de faire (dans le cas présent) :

for i := 1 to 7 do Bouton(i).Refresh;

au lieu de :

button1.Refresh;
button2.Refresh;
button3.Refresh;
button4.Refresh;
button5.Refresh;
button6.Refresh;
button7.Refresh;
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 2
15 avril 2007 à 13:53
Très sympa pour faire quelques petits effet dans nos programmes de temps en temps ca fait pas de mal !
Bon par contre pour ma part le bouton "LES DEUX" ne fonctionne pas correctement, il me fait uniquement la première animation demandé dans la source, autrement dit une apparition centrale (AnimateWindow(Handle,2000,AW_CENTER);).

Et le bouton "BLEND" est très intéressant mais pour une raison que je ne vois pas, les boutons pour faire les apparitions verticales et horizontale ne s'affiche plus.
Je suis obligé de glisser le curseur pour les faire apparaitre à nouveau.
J'ai était de tous les rafraichir :

procedure TForm1.Button2Click(Sender: TObject);
begin
form1.Hide;
AnimateWindow(Handle,2000,AW_BLEND);
form1.Show;
button1.Refresh;
button2.Refresh;
button3.Refresh;
button4.Refresh;
button5.Refresh;
button6.Refresh;
button7.Refresh;
end;

Ce que je trouve un peu long, donc il doit y avoir un autre moyen pour cela je pense.

En tout cas moi je garde de côté :)

@+
Rejoignez-nous