strobinateur
Messages postés11Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention14 avril 2009 10 sept. 2008 à 13:51
bonjour et merci c'est ce que je cherchai, très bien écrit, je met 9 car on peut toujours améliorer bien que sa fait plaisir un code sans 36 options inutile.
ffbbii
Messages postés1Date d'inscriptiondimanche 19 novembre 2000StatutMembreDernière intervention19 janvier 2007 19 janv. 2007 à 09:44
Juste pour signaler que si l'on met un StepTime inférieur à 10, la fenetre d'alerte ne prend pas en compte le paramétre WaitBeforeDown.
Par exemple :
AlertMsgBox('Bonjour!','Vous êtes maintenant connecté!',ICON_USER,false,4000,1,ExempleOfCalledProc);
Ne respecte pas les 4 secondes d'affichage mais elle reste bien au delà de ce temps d'attente.
Je trouve ta source superbe et j'ai mis du temps à la trouver via le net. Merci pour ta contribution aux Delphistes ;)
JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 201014 23 nov. 2006 à 18:46
10/10
je le cherchais, je l'ai trouvé :p
merci nico !
lordrem
Messages postés1Date d'inscriptionmercredi 2 juin 2004StatutMembreDernière intervention20 août 2006 20 août 2006 à 07:03
Belle réussite ni69!
Je m'avais développé par le passé une fenêtre d'alerte semblable mais sans animation. J'ai testé ton composant et j'y ajouterais une simple ligne. Elle sert à s'assurer que ta page se réaffiche toujours par dessus toutes les autres applications même si ton application n'a pas le focus. Exemple, si ta fenêtre commence à monter et tu cliques sur une autre application ouverte, elle va disparaître. Tu n'as qu'a ajouter en première ligne de ton timer la ligne suivante :
SetWindowPos(Handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE );
Encore une fois bravo!
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 24 févr. 2006 à 22:17
Merci Cirec !
Dès que j'en ai le temps je modifie le code...
Salut Nicolas,
elle est chouette ta source
mais j'ai une petite remarque à faire :
tu tiens compte de la taille de la barre des tâches de windows c'est bien mais pas de sa position,
en effet si comme moi d'autres utilisateurs ne l'ont pas en bas de l'écran mais en haut, voir même à gauche, où à droite, l'alerte s'affichera toujours en bas de l'écran. Peut être qu'une prise en compte de la position de la barre des tâches serait un plus ?
@+
Cirec
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 24 févr. 2006 à 12:46
Merci à vous deux ;)
Matt 261
Messages postés1173Date d'inscriptionmercredi 2 novembre 2005StatutMembreDernière intervention10 septembre 20113 24 févr. 2006 à 11:45
Oui! Bravo Ni69... Et merci beaucoup pour ce (très)bon code...
@+
Matt
zen159
Messages postés8Date d'inscriptionvendredi 14 juin 2002StatutMembreDernière intervention10 août 2006 24 févr. 2006 à 05:11
RHello Ni69 !
hey, ton code est nuuul ! :-D, il est moche...
Non, je DECONNES...
Il est trop bien, super ! qu'est ce qu'on pourrais réver de mieux? Franchement !
hey, les gars, on peu l'applaudir là non?
Alé, super, encore merci NI69, ++
BobO
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 23 févr. 2006 à 23:49
Re-PS : Quand je parle de "l'apparence désastreuse du code", je veux bien sûr parler du code présent dans la section "source" de cette page :p
Heureusement, le code fourni dans le zip est (selon moi :p) bien organisé et commenté ;)
Re-Re-PS : BenxBox, cette mise à jour va résoudre ton problème de freeze :)
@+
Nico
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 23 févr. 2006 à 23:33
Voila, la mise à jour est faite, avec à la clé beaucoup de modifications !
@+
Nico
PS : désolé pour l'apparence désastreuse du code, mais je n'y peut rien :p Le colorateur syntaxique ne prend pas en charge le delphi ! ;)
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 23 févr. 2006 à 22:08
Merci zen159 :)
Je prépare actuellement une mise à jour que je vais déposer très prochainement...
Je suis en train d'implémenter tout un panel de fonctionnalités qui n'étaient pas présentes dans la version actuelle, donc... A tout à l'heure :p
@+
Nico
zen159
Messages postés8Date d'inscriptionvendredi 14 juin 2002StatutMembreDernière intervention10 août 2006 22 févr. 2006 à 09:00
Hello Ni69.
Franchement Chapeau (avec un grand C !)
Heureusement que j'ai lu tous les commentaires, sinon je t'aurais proposé le dernier code : celui d'avoir la fenêtre comme un composant à part, que l'on peut utiliser un peu partout.
En passant, GranVizir, t'es pas gentil hein!! qd même !
Si j'avais une suggestion à faire sur le code (et je penses que je vais le faire), ca serait de rajouter un paramètre spécifiant le type de message (exactement comme les MessageDlg). Ton composant deviendrait ainsi un MessageDlg personnalisé, avec un style MSN.
Encore bravo... (10/10)
++
BobO
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 16 nov. 2005 à 23:32
Merci HardcoreLeecher ;)
D'ailleurs, il faudra que je mette à jour en tenant compte de vos commentaires à tous... Mais pour l'instant je n'ai pas trop le temps... désolé...
@+
Nico
HardcoreLeecher
Messages postés1Date d'inscriptionvendredi 11 novembre 2005StatutMembreDernière intervention16 novembre 2005 16 nov. 2005 à 23:10
Salut,
tres bien réussis le code,
super le code est d'une facilité d'implantation dans mes units
je donne un 10/10
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 200622 9 avril 2005 à 12:01
Mets un Button1 sur un Form1, crée un Form2 (pour le message) de la dimension que tu veux, déclare "uses Unit2;" dans Form1 (ça va sans dire, mais...), fais un copier-coller de mon code, tu verras que ça fonctionne nickel.
Attention. J'ai posté le code ici parce qu'il apporte un plus au code de ni69, mais ce n'est pas forcément le lieu pour débattre de ton problème.
Si tu as des difficultés, reviens donc à ta question sur le forum, sinon on va encombrer cette page sans rien apporter de plus...
A + ?
BenXbox
Messages postés210Date d'inscriptionmercredi 5 juin 2002StatutMembreDernière intervention14 août 2007 27 févr. 2005 à 17:50
Je viens d'essayer et j'ai toujours le même problème :
procedure ShowAlertForm;
var
Rect : TRect;
I, Tps : Integer;
begin
I := 0;
Tps := 0;
with Form2 do
begin
DoubleBuffered := True;
Hauteur := ClientHeight;
FormStyle := fsStayOnTop;
Left := Screen.Width-Form2.ClientWidth;
SystemParametersInfo(SPI_GETWORKAREA, 0, @Rect, 0);
Top := Screen.Height - (Screen.Height - Rect.Bottom)-1;
ClientHeight := 1;
Visible := True;
ShowWindow(Application.Handle, SW_Hide);
SndPlaySound(PChar(IncludeTrailingPathDelimiter(ExtractFilePath(Application.Exename)) + 'Nouveau.wav'),SND_ASYNC);
for I := 0 to Hauteur do
begin
ClientHeight := ClientHeight + 1;
Top := Top - 1;
Refresh;
Form1.Refresh;
Application.ProcessMessages;
Sleep(6);
end;
for Tps := 0 to 10 do
begin
Refresh;
Form1.Refresh;
Application.ProcessMessages;
Sleep(500);
end;
for I := 0 to Hauteur do
begin
ClientHeight := ClientHeight - 1;
Top := Top + 1;
Refresh;
Form1.Refresh;
Application.ProcessMessages;
Sleep(6);
end;
Close;
end;
end;
Merci d'avance.
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 27 févr. 2005 à 16:34
Je crois que j'ai compris le problème de BenXbox
Pour utiliser le source de ni69 à partir d'un autre form, il faut modifier la manière de s'en servir :
Le Timer devient inutile, le code sera placé dans une procedure placée sur le Form principal.
On peut garder l'évènement OnCreate avec l'instruction "DoubleBuffered := true;" dans le Form2 ou alors introduire cette instruction dans notre procedure.
Attention à réinitialiser correctement la variable hauteur à la valeur initiale de ClientHeight.
Donc, en supposant que l'on appelle que l'on appelle Form2 (le message d'alerte) à partir de Form1 en cliquant sur Button1 :
procedure ShowAlertForm;
var
Rect: TRect;
i, tps, hauteur: integer;
begin
i := 0;
tps := 0;
with Form2 do
begin
DoubleBuffered := true;
Show;
FormStyle := fsStayOnTop;
hauteur := 89; // client height := 89
Left := Screen.Width-ClientWidth;
SystemParametersInfo(SPI_GETWORKAREA, 0, @Rect, 0);
Top := Screen.Height - (Screen.Height - Rect.Bottom)-1;
ClientHeight := 1;
ShowWindow(Application.Handle, SW_Hide);
for i := 0 to hauteur do
begin
Top := Top - 1;
ClientHeight := ClientHeight + 1;
Refresh;
Application.ProcessMessages;
Sleep(10);
end;
Beep();
for tps := 0 to 10 do
begin
sleep(100);
Application.ProcessMessages;
end;
for i := 0 to hauteur do
begin
Top := Top + 1;
ClientHeight := ClientHeight - 1;
Refresh;
Application.ProcessMessages;
Sleep(10);
end;
Close;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowAlertForm;
end;
Bonne prog'
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 26 févr. 2005 à 13:55
Merci Florenth, je modifie ça et je met à jour ;)
BenXBox : je vois pas trop comment résoudre ton problème, vu que les solutions que je t'ai données en PV ne marchent pas... Désolé :(
BenXbox
Messages postés210Date d'inscriptionmercredi 5 juin 2002StatutMembreDernière intervention14 août 2007 25 févr. 2005 à 13:57
Moi j'ai un problème, je l'utilise comme FORM2 et ma FORM1 la lance, des que la FORM1 lance la FORM2, la FORM 1 freeze.
Ainsi, on agrandit avant de monter et on rétrecit avant de descendre.
Bravo quand même !! 10/10.
Florent
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 19 févr. 2005 à 11:04
Merci DelphiProg :)
En effet, Form1.[...] est inutile...
Désolé je vais modifier ça...
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 19 févr. 2005 à 10:52
"Vous avez gagné le premier prix du concours de beauté, recevez 1000 F".
Euh...zut, je me suis trompé de jeu.
Non, sérieusement, comment peut-on dire qu'un code source est beau ou ne l'est pas ?
Pour moi, cette réflexion n'a aucun sens.
Le but, fort bien décrit, était de réaliser une fenêtre "à la MSN". Le contrat est donc parfaitement rempli.
Le reste est hors considération.
Et pour cela, Ni69 mérite une mention "très bien".
Ni69 : pourquoi rappeler systématiquemet la référence à Form1 dans ton code ? Comme celle-ci est implicite tant que tu es dans la portée de la classe, tu peux t'en dispenser et alléger ton code.
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 200622 18 févr. 2005 à 20:45
Je me range du côté de l'avis de MAURICIO à propos de «une source qui n' a pas d' intérêt pour toi peut en avoir pour les autres». Pour le reste aussi je suis d'accord, mais on risque de me dire que c'est prétentieux... Alors je ne le dis pas, même si c'est dit.
8=))
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 18 févr. 2005 à 11:20
Dsl si je t' ai vexé grandvizir mais se ne sont pas les autheurs des autres loupes qui se plaignent que c' est moche. C' est sûr en tout cas que la form en clSilver c' est pas terrible.
PS: aller grandvizir, soit + indulgeant: tout le monde n' est pas aussi bon que toi, une source qui n' a pas d' intérêt pour toi peut en avoir pour les autres. Tout le monde sur ce site reconnait ta valeur, c' est indegniable.
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 17 févr. 2005 à 21:56
Et merci aussi Mauricio ! :P
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 17 févr. 2005 à 21:55
Merci Japee :)
--------------------------------------------
Je vais mettre à jour cette source :
BenXBox a détecté une erreur à laquelle je n'avais pas fait attention (merci à lui pour sa vigilance ;) ) :
Quand dans un prog, on utilise ce bout de code, on peut faire apparaitre la form complêtement une fois mais pas plus...
Pourquoi ? Parce-que tout simplement, n'ayant pas prévu que l'on puisse répéter la procedure "d'apparition" (étant donné que quand j'ai testé mon prog, à la fin, il se terminait (Close) ), j'ai sauvegardé la hauteur réelle de la form (var hauteur) en local, au début de la procédure, ce qui fait que si on appelle encore une fois l'apparition de la form à partir d'une autre form (par Form1.Timer1.Enabled := true), la hauteur récupérée est celle de la form APRES la première redescente, c'est à dire 1... Donc quand la boucle de montée se lance, eh ben, il y a un blem car la form atteint la hauteur 1 et redescend..... donc on ne peut pas la voir du tout ! :(
@+
Nico
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 17 févr. 2005 à 19:59
Je ne dirai qu'un mot : Bravo !
(m...., ça fait 7 mots, lol...)
Sérieusement, l'objectif est atteint, et de manière efficace.
Que demander de plus ?
A ranger dans la catégorie "Petits codes utiles que l'on met de côté, ça peut toujours servir".
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 200622 17 févr. 2005 à 19:00
Va donc dire cela sur les 3 autres loupes de DelphiFr et après on pourra rigoler... 8))
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 17 févr. 2005 à 14:55
Franchement, c po bo. Non, je plaisante. Vous commencez à me connaitre maintenant :)
Ça marche et c bien le principal. Dsl de te contredire grandvizir mais c vrai. D' ailleurs, ce n' est pas le cas de tes sources :( oui, je parle de ta loupe qui de plus n' est pas bo non plus alors ...
8/10
BenXbox
Messages postés210Date d'inscriptionmercredi 5 juin 2002StatutMembreDernière intervention14 août 2007 17 févr. 2005 à 12:35
A exacte, merci encore :)
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 17 févr. 2005 à 10:16
jmp77 : merci :)
BenXBox : pour accélérer la montée, il te suffit de diminuer la durée du Sleep dans la boucle for de montée :
for i := 0 to hauteur do
begin
Form1.Top := Form1.Top - 1;
Form1.ClientHeight := Form1.ClientHeight + 1;
Refresh;
Application.ProcessMessages;
Sleep(10); // Baisse la valeur du sleep pour que la montée soit plus rapide
end;
Voilà @+
Nico
jmp77
Messages postés1119Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention 4 octobre 20067 17 févr. 2005 à 09:31
100% daccord avec Ni69 il a très bien décrit son code source en précisant bien que c'était "un peu comme dans MSN".
On se fiche completement que ca fenetre soit belle ou non ce n'est pas une source qui porte sur la beauté des fenetres.
Son code avait comme pretention de montrer comment faire apparaitre puis disparaitre une fenetre à la msn et sans masquer la barre des taches.
Il a parfaitement remplit son cahier des charges.
Encore bravo a toi pour cette source Ni69.
Bonne continuation,
JMP77.
BenXbox
Messages postés210Date d'inscriptionmercredi 5 juin 2002StatutMembreDernière intervention14 août 2007 17 févr. 2005 à 00:10
On peut accélère la vitesse de monter par contre ?
BenXbox
Messages postés210Date d'inscriptionmercredi 5 juin 2002StatutMembreDernière intervention14 août 2007 16 févr. 2005 à 23:12
C'est un trés bon code, simple et efficace.
Note finale 10/10.
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 16 févr. 2005 à 21:44
GrandVizir >>
1. Je n'ai pas fait une appli belle à regarder mais fonctionnelle. Une source est bien lorsqu'elle marche, pas quand est jolie. Je ne me suis pas mis en tête de réaliser une copie conforme de l'original de MSN. Si j'avais voulu, j'aurais mis une capture d'écran d'une alerte msn dans le canvas de la form, mais où réside l'intérêt ???????????? c'est très intéressant de faire des captures d'écran, mais bon, ce n'est pas cela qu'on demande ici.
2. Pour la vitesse de descente tu peux très bien la gérer tout seul en modifiant la valeur du Sleep(). Je ne peux pas influer sur les aléas des différentes versions de Delphi.
3. Je ne connaissais pas RaidChat. Je ne suis pas censé connaître toutes les sources de ce site.... D'ailleurs, qui les connaît toutes ?
4. Le cahier des tâches est rempli : il s'agissait de ne pas laisser la form au dessus de la barre des tâches lors de l'apparition et de la disparition.
5. Je ne trouve pas le code particulièrement court : il fonctionne. C'est tout ce qu'on lui demande.
5. Merci pour le 6/10
6. Faut pas croire, mais je ne suis pas du tout vexé ;)
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 200622 16 févr. 2005 à 21:22
Je préfère autant l'original de MSN, et je crains fort que ce code n'apporte pas grand chose de plus que RaidChat et l'autre sur lequel tu te dis t'être inspiré. En plus, ta fenêtre (pas très belle par ailleurs) est bien pressée de se cacher. D7 lâche le thread bien vite contrairement à D5. Le code serait-il trop court ? A en croire l'échappé, c'est effectivement le cas. Je suis désolé, mais le bilan est bien maigre. Sans vouloir te vexer...
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 16 févr. 2005 à 14:53
merci JMP :)
jmp77
Messages postés1119Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention 4 octobre 20067 16 févr. 2005 à 14:44
Sympa comme code je pense que je vais le réutiliser pour une de mes applis dans le futur.
10 sept. 2008 à 13:51
19 janv. 2007 à 09:44
Par exemple :
AlertMsgBox('Bonjour!','Vous êtes maintenant connecté!',ICON_USER,false,4000,1,ExempleOfCalledProc);
Ne respecte pas les 4 secondes d'affichage mais elle reste bien au delà de ce temps d'attente.
Je trouve ta source superbe et j'ai mis du temps à la trouver via le net. Merci pour ta contribution aux Delphistes ;)
23 nov. 2006 à 18:46
je le cherchais, je l'ai trouvé :p
merci nico !
20 août 2006 à 07:03
Je m'avais développé par le passé une fenêtre d'alerte semblable mais sans animation. J'ai testé ton composant et j'y ajouterais une simple ligne. Elle sert à s'assurer que ta page se réaffiche toujours par dessus toutes les autres applications même si ton application n'a pas le focus. Exemple, si ta fenêtre commence à monter et tu cliques sur une autre application ouverte, elle va disparaître. Tu n'as qu'a ajouter en première ligne de ton timer la ligne suivante :
SetWindowPos(Handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE );
Encore une fois bravo!
24 févr. 2006 à 22:17
Dès que j'en ai le temps je modifie le code...
@+
Nico
24 févr. 2006 à 21:58
de la barre des tâches :
procedure TForm1.Button1Click(Sender: TObject);
Var Placement : TWindowPlacement;
hBarredTache : THandle;
begin
hBarreDTache := FindWindow('Shell_TrayWnd', nil);
GetWindowPlacement(hBarreDTache, @Placement);
With Placement.rcNormalPosition do
Label1.Caption := Format('%d, %d, %d, %d', [Left, Top, Right, Bottom]);
end;
@+
Cirec
24 févr. 2006 à 18:06
Je vais essayer de voir ce que je vais pouvoir faire de ce côté-là...
@+
Nico
24 févr. 2006 à 15:44
elle est chouette ta source
mais j'ai une petite remarque à faire :
tu tiens compte de la taille de la barre des tâches de windows c'est bien mais pas de sa position,
en effet si comme moi d'autres utilisateurs ne l'ont pas en bas de l'écran mais en haut, voir même à gauche, où à droite, l'alerte s'affichera toujours en bas de l'écran. Peut être qu'une prise en compte de la position de la barre des tâches serait un plus ?
@+
Cirec
24 févr. 2006 à 12:46
24 févr. 2006 à 11:45
@+
Matt
24 févr. 2006 à 05:11
hey, ton code est nuuul ! :-D, il est moche...
Non, je DECONNES...
Il est trop bien, super ! qu'est ce qu'on pourrais réver de mieux? Franchement !
hey, les gars, on peu l'applaudir là non?
Alé, super, encore merci NI69, ++
BobO
23 févr. 2006 à 23:49
Heureusement, le code fourni dans le zip est (selon moi :p) bien organisé et commenté ;)
Re-Re-PS : BenxBox, cette mise à jour va résoudre ton problème de freeze :)
@+
Nico
23 févr. 2006 à 23:33
@+
Nico
PS : désolé pour l'apparence désastreuse du code, mais je n'y peut rien :p Le colorateur syntaxique ne prend pas en charge le delphi ! ;)
23 févr. 2006 à 22:08
Je prépare actuellement une mise à jour que je vais déposer très prochainement...
Je suis en train d'implémenter tout un panel de fonctionnalités qui n'étaient pas présentes dans la version actuelle, donc... A tout à l'heure :p
@+
Nico
22 févr. 2006 à 09:00
Franchement Chapeau (avec un grand C !)
Heureusement que j'ai lu tous les commentaires, sinon je t'aurais proposé le dernier code : celui d'avoir la fenêtre comme un composant à part, que l'on peut utiliser un peu partout.
En passant, GranVizir, t'es pas gentil hein!! qd même !
Si j'avais une suggestion à faire sur le code (et je penses que je vais le faire), ca serait de rajouter un paramètre spécifiant le type de message (exactement comme les MessageDlg). Ton composant deviendrait ainsi un MessageDlg personnalisé, avec un style MSN.
Encore bravo... (10/10)
++
BobO
16 nov. 2005 à 23:32
D'ailleurs, il faudra que je mette à jour en tenant compte de vos commentaires à tous... Mais pour l'instant je n'ai pas trop le temps... désolé...
@+
Nico
16 nov. 2005 à 23:10
tres bien réussis le code,
super le code est d'une facilité d'implantation dans mes units
je donne un 10/10
9 avril 2005 à 12:01
http://altert.family.free.fr/fils/prgms/exes/xfr/ni69_msn.zip
2 mars 2005 à 17:54
27 févr. 2005 à 18:09
Je me cite :
"Attention à réinitialiser correctement la variable hauteur à la valeur initiale de ClientHeight."
Donc :
Hauteur :89; // 89 ClientHeight d'origine : correct
Hauteur := ClientHeight; // pas correct
Mets un Button1 sur un Form1, crée un Form2 (pour le message) de la dimension que tu veux, déclare "uses Unit2;" dans Form1 (ça va sans dire, mais...), fais un copier-coller de mon code, tu verras que ça fonctionne nickel.
Attention. J'ai posté le code ici parce qu'il apporte un plus au code de ni69, mais ce n'est pas forcément le lieu pour débattre de ton problème.
Si tu as des difficultés, reviens donc à ta question sur le forum, sinon on va encombrer cette page sans rien apporter de plus...
A + ?
27 févr. 2005 à 17:50
procedure ShowAlertForm;
var
Rect : TRect;
I, Tps : Integer;
begin
I := 0;
Tps := 0;
with Form2 do
begin
DoubleBuffered := True;
Hauteur := ClientHeight;
FormStyle := fsStayOnTop;
Left := Screen.Width-Form2.ClientWidth;
SystemParametersInfo(SPI_GETWORKAREA, 0, @Rect, 0);
Top := Screen.Height - (Screen.Height - Rect.Bottom)-1;
ClientHeight := 1;
Visible := True;
ShowWindow(Application.Handle, SW_Hide);
SndPlaySound(PChar(IncludeTrailingPathDelimiter(ExtractFilePath(Application.Exename)) + 'Nouveau.wav'),SND_ASYNC);
for I := 0 to Hauteur do
begin
ClientHeight := ClientHeight + 1;
Top := Top - 1;
Refresh;
Form1.Refresh;
Application.ProcessMessages;
Sleep(6);
end;
for Tps := 0 to 10 do
begin
Refresh;
Form1.Refresh;
Application.ProcessMessages;
Sleep(500);
end;
for I := 0 to Hauteur do
begin
ClientHeight := ClientHeight - 1;
Top := Top + 1;
Refresh;
Form1.Refresh;
Application.ProcessMessages;
Sleep(6);
end;
Close;
end;
end;
Merci d'avance.
27 févr. 2005 à 16:34
Pour utiliser le source de ni69 à partir d'un autre form, il faut modifier la manière de s'en servir :
Le Timer devient inutile, le code sera placé dans une procedure placée sur le Form principal.
On peut garder l'évènement OnCreate avec l'instruction "DoubleBuffered := true;" dans le Form2 ou alors introduire cette instruction dans notre procedure.
Attention à réinitialiser correctement la variable hauteur à la valeur initiale de ClientHeight.
Donc, en supposant que l'on appelle que l'on appelle Form2 (le message d'alerte) à partir de Form1 en cliquant sur Button1 :
procedure ShowAlertForm;
var
Rect: TRect;
i, tps, hauteur: integer;
begin
i := 0;
tps := 0;
with Form2 do
begin
DoubleBuffered := true;
Show;
FormStyle := fsStayOnTop;
hauteur := 89; // client height := 89
Left := Screen.Width-ClientWidth;
SystemParametersInfo(SPI_GETWORKAREA, 0, @Rect, 0);
Top := Screen.Height - (Screen.Height - Rect.Bottom)-1;
ClientHeight := 1;
ShowWindow(Application.Handle, SW_Hide);
for i := 0 to hauteur do
begin
Top := Top - 1;
ClientHeight := ClientHeight + 1;
Refresh;
Application.ProcessMessages;
Sleep(10);
end;
Beep();
for tps := 0 to 10 do
begin
sleep(100);
Application.ProcessMessages;
end;
for i := 0 to hauteur do
begin
Top := Top + 1;
ClientHeight := ClientHeight - 1;
Refresh;
Application.ProcessMessages;
Sleep(10);
end;
Close;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowAlertForm;
end;
Bonne prog'
26 févr. 2005 à 13:55
BenXBox : je vois pas trop comment résoudre ton problème, vu que les solutions que je t'ai données en PV ne marchent pas... Désolé :(
25 févr. 2005 à 13:57
25 févr. 2005 à 13:01
Bravo ni69.
Juste un petit hic : lors du mouvement, si on regarde de plus près, on appercoit que cela n'est pas homogène.
Pour palier à ce problème, comme tu as mis " -1 " pour Form1.Top (ligne 62), il suffit d'inverser les lignes
Form1.ClientHeight := Form1.ClientHeight + 1;
Form1.Top := Form1.Top - 1;
et les lignes
Form1.ClientHeight := Form1.ClientHeight - 1;
Form1.Top := Form1.Top + 1;
Ainsi, on agrandit avant de monter et on rétrecit avant de descendre.
Bravo quand même !! 10/10.
Florent
19 févr. 2005 à 11:04
En effet, Form1.[...] est inutile...
Désolé je vais modifier ça...
19 févr. 2005 à 10:52
Euh...zut, je me suis trompé de jeu.
Non, sérieusement, comment peut-on dire qu'un code source est beau ou ne l'est pas ?
Pour moi, cette réflexion n'a aucun sens.
Le but, fort bien décrit, était de réaliser une fenêtre "à la MSN". Le contrat est donc parfaitement rempli.
Le reste est hors considération.
Et pour cela, Ni69 mérite une mention "très bien".
Ni69 : pourquoi rappeler systématiquemet la référence à Form1 dans ton code ? Comme celle-ci est implicite tant que tu es dans la portée de la classe, tu peux t'en dispenser et alléger ton code.
18 févr. 2005 à 20:45
8=))
18 févr. 2005 à 11:20
PS: aller grandvizir, soit + indulgeant: tout le monde n' est pas aussi bon que toi, une source qui n' a pas d' intérêt pour toi peut en avoir pour les autres. Tout le monde sur ce site reconnait ta valeur, c' est indegniable.
17 févr. 2005 à 21:56
17 févr. 2005 à 21:55
--------------------------------------------
Je vais mettre à jour cette source :
BenXBox a détecté une erreur à laquelle je n'avais pas fait attention (merci à lui pour sa vigilance ;) ) :
Quand dans un prog, on utilise ce bout de code, on peut faire apparaitre la form complêtement une fois mais pas plus...
Pourquoi ? Parce-que tout simplement, n'ayant pas prévu que l'on puisse répéter la procedure "d'apparition" (étant donné que quand j'ai testé mon prog, à la fin, il se terminait (Close) ), j'ai sauvegardé la hauteur réelle de la form (var hauteur) en local, au début de la procédure, ce qui fait que si on appelle encore une fois l'apparition de la form à partir d'une autre form (par Form1.Timer1.Enabled := true), la hauteur récupérée est celle de la form APRES la première redescente, c'est à dire 1... Donc quand la boucle de montée se lance, eh ben, il y a un blem car la form atteint la hauteur 1 et redescend..... donc on ne peut pas la voir du tout ! :(
@+
Nico
17 févr. 2005 à 19:59
(m...., ça fait 7 mots, lol...)
Sérieusement, l'objectif est atteint, et de manière efficace.
Que demander de plus ?
A ranger dans la catégorie "Petits codes utiles que l'on met de côté, ça peut toujours servir".
17 févr. 2005 à 19:00
17 févr. 2005 à 14:55
Ça marche et c bien le principal. Dsl de te contredire grandvizir mais c vrai. D' ailleurs, ce n' est pas le cas de tes sources :( oui, je parle de ta loupe qui de plus n' est pas bo non plus alors ...
8/10
17 févr. 2005 à 12:35
17 févr. 2005 à 10:16
BenXBox : pour accélérer la montée, il te suffit de diminuer la durée du Sleep dans la boucle for de montée :
for i := 0 to hauteur do
begin
Form1.Top := Form1.Top - 1;
Form1.ClientHeight := Form1.ClientHeight + 1;
Refresh;
Application.ProcessMessages;
Sleep(10); // Baisse la valeur du sleep pour que la montée soit plus rapide
end;
Voilà @+
Nico
17 févr. 2005 à 09:31
On se fiche completement que ca fenetre soit belle ou non ce n'est pas une source qui porte sur la beauté des fenetres.
Son code avait comme pretention de montrer comment faire apparaitre puis disparaitre une fenetre à la msn et sans masquer la barre des taches.
Il a parfaitement remplit son cahier des charges.
Encore bravo a toi pour cette source Ni69.
Bonne continuation,
JMP77.
17 févr. 2005 à 00:10
16 févr. 2005 à 23:12
Note finale 10/10.
16 févr. 2005 à 21:44
1. Je n'ai pas fait une appli belle à regarder mais fonctionnelle. Une source est bien lorsqu'elle marche, pas quand est jolie. Je ne me suis pas mis en tête de réaliser une copie conforme de l'original de MSN. Si j'avais voulu, j'aurais mis une capture d'écran d'une alerte msn dans le canvas de la form, mais où réside l'intérêt ???????????? c'est très intéressant de faire des captures d'écran, mais bon, ce n'est pas cela qu'on demande ici.
2. Pour la vitesse de descente tu peux très bien la gérer tout seul en modifiant la valeur du Sleep(). Je ne peux pas influer sur les aléas des différentes versions de Delphi.
3. Je ne connaissais pas RaidChat. Je ne suis pas censé connaître toutes les sources de ce site.... D'ailleurs, qui les connaît toutes ?
4. Le cahier des tâches est rempli : il s'agissait de ne pas laisser la form au dessus de la barre des tâches lors de l'apparition et de la disparition.
5. Je ne trouve pas le code particulièrement court : il fonctionne. C'est tout ce qu'on lui demande.
5. Merci pour le 6/10
6. Faut pas croire, mais je ne suis pas du tout vexé ;)
16 févr. 2005 à 21:22
16 févr. 2005 à 14:53
16 févr. 2005 à 14:44
Merci à toi.
JMP.
Note finale 10/10.