LA DANSE DES AVATARS

Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 - 12 déc. 2007 à 22:56
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 10 mai 2012 à 10:30
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/45038-la-danse-des-avatars

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
10 mai 2012 à 10:30
@JEAN_JEAN
J'aimerai bien me faire un site internet

Si c'est site d'info, ce n'est pas très compliqué.
En revanche, si c'est du e-commerce.
Bonjour les dégâts..le travail est énorme !
j'en sais quelque chose.

@+
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
9 mai 2012 à 16:34
salut Cantador,

Excuse pour ma réponse tardive, Ma liveBox ma laché. Oui, je travaille pour moi alors je suis obligé de me contenter de d7 perso. J'aurai bien acheté XE mais en version démo je n'ai jamais réussi à installer l'aide en ligne. De plus l'accueil pour les amateurs n'est pas cool chez CodeGear, ils ne m'ont pas aider à installer le XE. Alors acheter les yeux fermés pour 800€! J'aimerai bien me faire un site internet car j'ai des projets dans mes cartons...

Bon je vais voir pour Jedi...
Merci à toi
Yo les avatars
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
4 mai 2012 à 15:29
ah oui, c'était marrant ce code et puis il y a eu cet emballement collectif
spontané et toujours gratifiant pour tout le monde.
c'était il y a 4 ans déjà..
comme le temps passe !

Pour le Jedi sur D7, hélas, il faut installer les deux packages :
celui de JCL d'abord
puis le JVCL ensuite

qui ont été enfin débuggés..
D7 encore solide mais ça vieillit..
enfin tout dépend des besoins.

@+ JEAN_JEAN
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
4 mai 2012 à 11:53
Salut cantador et avatars de tous poils!

Je viens de découvrir ton code en m'informant sur le multi-Threading!
j'ai hâte de voir sur quelle fusée tu m'a ballonné! mdr

Je connaissais ta toute première version, mais avec le travail de production collective, les informations deviennent pertinentes...
Je peux décortiquer ton code sans la Jcl mais le visuel aide à comprendre ce que fait le code. j'ai donc téléchargé la jcl avec les liens que tu donnes (au fait, c'est quoi? une biblio de composants?) mais je je trouve pas le package à installé? Je suis sur D7 perso, j'ai donc regardé dans le répertoire "package" et dans D7 mais je ne vois pas quel package, il faut installé...
J'espère qu'il ne faut pas tout installer?
Bien à toi
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
17 déc. 2007 à 14:22
@cirec:
Ben tu vois que mes commentaires n'étaient pas surfaits !
un peu que je veux la voir ta solution..
(pulsar3000@wanadoo.fr)
et si elle me convient je fais la modif illico..
Tu sais ce n'est plus mon programme..
Il appartient désormais à tous ceux qui ont participé à ce
projet de multi-threading + affichage des bulles.
Utilisateur anonyme
17 déc. 2007 à 13:33
eh ... s'avez quoi ...

J''ai trouvé !
Si si..
Ça y est !
j''ai trouvé !
Mince alors..
J''ai encore trouvé !!

MDR

Plus sérieusement j'ai effectivement trouvé pourquoi tes thread ne pouvaient être arrêtés.

Le thread est fait pout être utiliser pour une action répétitive en tache de fond. Toi tu l'utilise pour démarrer une procédure qui rentre dans une boucle (et c'est ça qui empêche l'arrêt du thread) et une fois la boucle fini le thread est arrêté et libéré. En fait on peut lancer ta procédure depuis un OnClick (j'ai fais le teste) et ça fonctionne ... pour un exemple de MultiThread c'est pas très top.

Si tu la veux, j'ai refait ton application, en MultiThread, elle fonctionne très bien même avec plusieurs séries d'avatars (selon le PC) et le Hint s'affiche correctement et n'arrête que l'avatar concerné.

J'ai essayé de garder le maximum de ton code ... mais bon j'ai quand même dû y faire quelques coupes. ;)
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
16 déc. 2007 à 12:44
@caribensila :
merci pour le zip..
c'est une découpe en rond que je vois et un mvt à vitesse constante.
Je m'attendais à un traitement siouc de bulles..
Mais il n'y a aucun message qui apparaît.
A moins que..
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 déc. 2007 à 23:32
Maigre consolation..

Tiens dépité, je vais le refaire avec un seul avatar et
une seule bulle !
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
15 déc. 2007 à 23:24
Bein, t'es jamais content...

Si ça s'affiche à un moment donné, c'est déjà ça!

mdrrrrrrrrr
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 déc. 2007 à 23:21
Sûr qd les avatars ont tous attéris sur le sol et que l'arrêt est complet (donc plus de thread) les bulles s'affichent
nickel chrome.
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
15 déc. 2007 à 23:17
Ah ouais...
J'ai pas essayé avec threads.
ça doit pas arranger l'affaire.
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 déc. 2007 à 23:16
no problemo : pulsar3000@wanadoo.fr
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 déc. 2007 à 23:13
et bien sûr les Hint natifs des images non plus !
ça aurait été trop simple..
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
15 déc. 2007 à 23:11
'FAUT JAMAIS ABANDONNER, 'TAIN DE CON !

Finalement, je m'en suis sorti. lolll

Si ça t'intéresse, je t'envoie le test par email Cantador, car j'ai peur de pourrir cet espace avec des trucs pas finis.
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 déc. 2007 à 23:11
Oui efectivement j'ai installé ton unité et intégré le code.
Mais les résultats au niveau des bulles sont décevants pour l'instant.
il semble que les theads bloquent l'apparition des bulles..


Même en utilisant un truc simple comme ci-dessous :

çà ne fonctionne pas npn plus..

Voilà pourquoi je me suis tourné vers le TjvBallonHint..

Il me reste néamoins à régler :
- accélération de l'ouverture
- et les morceaux de bullles qui restent de temps en temps



procedure DoHint(AControl: TControl); // autre solution
var
pt: TPoint;
begin
pt := AControl.ClientToScreen(Point(1, 1));
SetCursorPos(pt.x, pt.y);
Application.ActivateHint(pt);
end;

procedure TFAvatar.AffichageBulle;
var
X, Y: integer;
// Bulle: TJvBalloonHint;
begin
Randomize;
X := RandomRange(0, 10); {sélection aléatoire de l'image}
Y := RandomRange(0, 3); {sélection aléatoire du texte}

Image[X].Hint := InfoBulle[X, Y]; // autre solution
DoHint(Image[X]);
PAvatar.Repaint;

{ Bulle := TJvBalloonHint.Create(PAvatar); {création du JvBallonHint}
Bulle.Options := Bulle.Options - [boShowCloseBtn]; {suppression du bouton de fermeture de la bulle}
if Image[X].Parent <> nil then {L'image a t-elle un parent ?}
Bulle.ActivateHint(Image[X], InfoBulle[X, Y], InfoEntete[X, Y], 0); {Affichage de la bulle}
Application.ProcessMessages; {pour forcer l'affichage du texte}
sleep(1500); {petite pause pour permettre la lecture}
Bulle.free; {libèration la bulle}
if not ((FinThread1 true) and (FinThread2 true) and {test de la fin des 10 threads}
(FinThread3 true) and (FinThread4 true)
and (FinThread5 true) and (FinThread6 true)
and (FinThread7 true) and (FinThread8 true)) then
PAvatar.Repaint; }
end;

Bref, faut encore y laisser de la sueur !
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
15 déc. 2007 à 22:49
Bon!
J'y suis arrivé, mais c'est trop lent pour ce genre d'application.
J'abandonne cette voie.
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
15 déc. 2007 à 21:49
@cantador
...A l'origine, je voulais n'utiliser que des Hints pour les avatars et les textes afin d'en remplir l'écran...

Mais j'ai bcp de mal à les animer, ces foutus Hints.

'Me suis mis la barre un peu haut sur ce coup... lol
Si t'y arrives, ça m'intéresse.
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 déc. 2007 à 18:38
@caribensila :
Merci, j'étais juste en train de répondre à cirec et je me disais
"pourquoi caribensila il me la file pas sa HintPerso..".
et toc !

je regarde tout çà..
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 déc. 2007 à 18:35
@cirec:
C'est bien vu avec le FreeAndNil(Bitmap[i] car çà règle le souci de la violation d'accès
mais en revanche cette procédure déclenche des Sursauts intempestifs dans le mouvement des avatars..
C'est la raison pour laquelle j'attends encore un peu avant
de faire une modif.
@bientôt
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
15 déc. 2007 à 18:34
... ça peut être rigolo de remplir l'écran d'avatars, non?

mdrrrr
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
15 déc. 2007 à 18:21
Voici une petite unité pour créer des Hints ronds:


unit RoundHintUnit;

interface

Uses
Windows, Controls, Classes, Graphics, SysUtils;

Type TRoundHint = Class( THintWindow )
Private
fBmp : TBitmap;
procedure SetBmp(Image: TBitmap);
Procedure Paint; override;
Public
Constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property Image: TBitmap read fBmp write SetBmp;
end;

implementation

{Un hint est une fenêtre Windows, et pour donner une forme particulière à une
fenêtre, on utilise les Régions Windows.}

Constructor TRoundHint.Create(AOwner: TComponent);
begin
Inherited Create(AOwner);
fBmp := TBitmap.Create;
try
fBmp.Height := 100;
fBmp.Width := 100;
except FreeAndNil(fBmp); end;
end;

destructor TRoundHint.Destroy;
begin
fBmp.Free;
inherited;
end;

procedure TRoundHint.SetBmp(Image : TBitmap);
begin
fBmp := Image;
end;


Procedure TRoundHint.Paint;
Var Rect : TRect;
Medaillon : HRgn;
begin
{ClientRect à été déterminé par la méthode CalcHintRect.}
Rect := ClientRect;
Medaillon := CreateEllipticRgnIndirect(Rect); //Création d'une région elliptique.
Canvas.Draw(0,0,fBmp); //Dessin de l'avatar.
{FrameRgn() est une fonction qui dessine un contour autour de la région.
Mais ici, résultat bizarre dû à l'ombre de la bulle, je pense.}
//Canvas.Brush.Color:=clblack;
//FrameRgn(Canvas.Handle,Medaillon,Canvas.Brush.Handle,1,1);
SetWindowRgn(Handle,Medaillon,True ); //On applique la région à la fenêtre Windows.
end;

END.

----------------------------------------------------------

Exemple d'utilisation:


uses RoundHintUnit;

var H1 : TRoundHint;

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.ShowHint := true;
Application.HintPause := 0;
Application.HintHidePause := -1;
H1 := TRoundHint.Create(nil);
H1.Image := Image1.Picture.Bitmap;//ici, 100x100 pixels.
//Pour fermer: H1.ReleaseHandle;
end;

procedure TForm1.Button1Click(Sender: TObject);
var Rect : TRect;
begin
Rect.Left := 10;//Les hints peuvent éventuellement occuper tout l'écran.
Rect.Top := 10;
Rect.Right :=Rect.Left+4+Image1.Width;//+4 pour centrer. Pkoi? Mystère...
Rect.Bottom :=Rect.Top+Image1.Height;
H1.ActivateHint(Rect,'');//Chaîne vide.
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
H1.ReleaseHandle;
end;
Utilisateur anonyme
15 déc. 2007 à 15:04
Alors dans la procedure Debut rajoute ceci :

Canvas.Draw(0, 0, Bitmap[i]); {Dessin du Bmp dans l'image}
ShowHint := true;
end;
FreeAndNil(Bitmap[i]); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<-------------------
end;
LacherAvatar(false); {lancement des 10 threads}

Et du coup tu peux même supprimer l'appel à Free dans les unités "Thread"
Et l'application utilise moins de mémoire ;-)
Et l'erreur est Normal ... puisque tu en faisant un Free l'objet en Question est toujours assigné pour le système, (if Assigned(BitMap[x]) renvoie True tant que Bitmap[X] <> Nil)
pour éviter ça il faut le mettre à Nil

là j'ai pas le temps, mais dès que ... je me pencherais un peut plus sur le problème
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 déc. 2007 à 13:36
@cirec:
sur une deuxième série,avec free
La violation d'accès se produit bien sûr tout à la fin lorsque tous les avatars s'endorment sur le plancher des vaches..
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 déc. 2007 à 13:27
je te réponds de suite sans tester car j'avais écrit ça au début
mais l'os est que la destruction complète de l'image marche effectivement (d'autant que l'éclatement de la bulle aurait pu permettre la production d'un son)
Mais cela fonctionne une seule fois..et lors de création d'une seconde série,le prog plante car on détruit un objet qui n'existe plus..

Mais finallement c'est peut-être le mieux:
N'autoriser qu'une seule série
Utilisateur anonyme
15 déc. 2007 à 13:05
J'avais oublié un truc ...
Change dans toutes les unités "Thread" ceci :
if Assigned(BitMap[x]) then
BitMap[x].FreeImage;

en :
if Assigned(BitMap[x]) then
BitMap[x].Free; // <<<<<<<<<<-------

Sinon tu as des fuites de mémoires ;-)

je vais de ce pas voir ce que donne le nouveau code
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 déc. 2007 à 12:51
Voilà, j'ai supprimé les traces lors des déplacements des images.

Reste encore l'affichage des bulles qui de temps en temps m'agace un peu..
Si vous avec un bon PC, vous pouvez vous amuser à lancer plusieurs séries d'affilées...
et là ca devient la Foire aux avatars !
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
14 déc. 2007 à 16:19
JCL: http://jcl.sourceforge.net/daily/
JVCL: http://jvcl.sourceforge.net/daily/

ou sur le site de SOURCEFORGE..

Le TjvBallonHint est dans la palette JV Non-Visual
yvessimon Messages postés 637 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 9 janvier 2017
14 déc. 2007 à 13:54
Bonjour,

Ou trouver TJvBallonHint de la suite JEDI

?

Salutations
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
13 déc. 2007 à 13:17
Salut cirec,

Pour info,les images ont été traitées avec GIMP..
Les traces ben oui je sais..c'est pas top..
Qt au "pas quitter avt la fin", çà c'est voulu car j'ai pas trouvé comment shinter les 10 threads en même temps !
@+
Utilisateur anonyme
13 déc. 2007 à 11:44
Salut,

@Caribensila:

ton image est la plus lourde car c'est la seule que l'on peut ouvrir avec l'aperçu de windows, toutes les autres ne s'affiche pas (ça me rappel un truc ça ) je me demande avec quoi il les a fait enfin Delphi peut les lire c'est l'essentiel.

@Cantador:
J'ai testé ... mais ça me parait bien long tout ça, les déplacements laisse des traces et je ne pense pas que c'était prévu !
http://www.netimago.com/images/TyjPh2azK6FHsU4.jpg
Il est impossible de quitter l'application avant la fin des threads ... GrrRRrr ;)
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
13 déc. 2007 à 11:21
Merci caribensila..

Désolé, mais je n'ai pas réussi à faire fondre ton avatar...
C'est peut-être un signe..Hummmmm
Enfin, quand on voit la photo de WonderWoman publié par Francky23012301, tu as encore de la marge..

Pour le HintPerso.. j'y ai bien pensé mais j'ai préféré tomber
dans la facilité..

Tu peux si tu le souhaites proposer qlqchose..

Pour le Multi-threading, je suis aussi demandeur, mais ici,
je me demande s'il n'aurait pas été préférable de créer un objet..

A voir

@bientôt
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
12 déc. 2007 à 22:56
:))) Salut Cantador,

Pas regardé en détail, mais 2 remarques sur le vif:

- caribensilarond.bmp.... 18 382 octets
Ca doit être la surprise des Kinder pour que je sois le plus lourd, non?

- Compo externe: J'aime pas. T'aurais quand même pu nous faire une unité didactique en prime : "HintPerso" ;)

Sinon, c'est un joli travail d'anthropologie.
Pour le multi-threading, j'espère bien en apprendre bcp en lisant les commentaires.
Rejoignez-nous