Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

LISTBOX AVEC SMILEYS


Information sur la source

Catégorie :Composants Niveau : Initié Date de création : 04/05/2004 Vu / téléchargé: 5 549 / 944

Note :
9,5 / 10 - par 2 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

Description

C'est un premier jet pour un Listbox utilisable dans les clients de chat... Elle gère les smileys et trois taille de police, et sera à terme encapsulée dans un composant. Je la met ici en version de test, pour avoir un peu d'aide pour la suite (voir plus bas) ! :)
 

Conclusion

Il manque les retours à la ligne, que je pense savoir comment coder... Mais comment redéfinir la taille des items lorsque la ListBox est redimensionnée ??? :-/
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de BlackWizzard le 05/05/2004 11:29:41 administrateur CS

c genial :D

signaler à un administrateur
Commentaire de Don0Choa le 05/05/2004 12:27:32

Oh t'es encore vivant toi? :D ca fait un moment quand même !

C'est pas mal la listbox avec smiley! Il était temps que quelqu'un y pense.

Par curiosité, tu fais cette listbox dans quel but? je veux dire, t'as un projet ? Simple curiosité :)

++

signaler à un administrateur
Commentaire de Nebula le 05/05/2004 13:28:16

Ouaip je suis toujours vivant :) Pas de projet particulier, simplement pour le plaisir :p

signaler à un administrateur
Commentaire de shining le 14/05/2004 03:21:50

Bravo!!, pour mon Package ShiningComponents il ya justement un composant dérivé d'un TlistBox avec quelques fonctions en plus.. tel que tu texte façon Mirc ;) donc choix des couleurs incrustation de smiley... et donc voici comment redimenssionnée la TListBox..
tout d'abord il faut surchargé la fonction "MeasureItem" dans la déclaration "Protected" exemple

Procedure MeasureItem(Index: Integer; var ItemHeight:Integer);override;

à l'interrieur de la procédure il faut bien entendu transmettre la fonction au TListBox

Procedure MeasureItem(Index: Integer; var ItemHeight:Integer);override;
begin
      Inherited MeasureItem(Index, ItemHeight);
      { Attention cette fonction est appeler avant le dessin des Items
      ce qui implique une fonction de pre-calcule des Items, une fois la  hauteur calculée il suffit de renvoyé la valeur à ItemHeight.
     voilà j'espère avoir été clair :).
      }  
end;





signaler à un administrateur
Commentaire de Nebula le 17/08/2004 01:33:23

Tu as été très clair et c'est un peu de cette manière que je comptais les gérer, mais est-ce que si la taille de la listbox change, cette méthode est appelée de nouveau pour chaque item ? Car pour le moment, elle n'est pas appelée et je bloque toujours dessus (bon je viens de retomber sur ce code et je voudrais essayer de le finir !)

signaler à un administrateur
Commentaire de shining le 19/08/2004 23:05:07

donc on recapitule, tout d'abord je rappel que cette fonction est appeler juste avant le dessin de l'item, donc une fonction préparse est néccessaire pour que chaque items puisse avoir une hauteur adéquate pour celà il faut respecter ces 3 règles

1- Mettre la propriété Style à lbOwnerDrawVariable;
2- Surcharger la procedure MeasureItem(en proctected)
3- préparse du Texte avant le dessin de l'item
mais Attention utilisez ListBox1.Items.Add(MyText) plutôt que AddObject car malheureusement les Objets retourne toujours une valeur nuls(pour des raisons non expliquer de la part de Delphi!!)
et donc c'est simple il suffit de recupérer la valeur de l'item via son Index exemple :
ItemHeight := Préparse(Items[Index]);
Attention dans la fonction préparse il ne faut pas Dessiné l'item sinon ya risque d'appel recursive à Paint & MeasureItem...
Conseil: dans la fonction préparse faire un hashage des caractères et s'arrêter quand il y'a un espace " ", ensuite calculé la largeur du texte via Canvas.Textwidth
ensuite verifiez que w(largeur du text) + X<= ClientWidth , si oui afficher le texte, si non incrémenter Y par Canvas.TextHeight
donc on as besoin d'une variable X,Y,W
X & Y seront initialisé par rapport à itemRect
Bonne Prog .




signaler à un administrateur
Commentaire de Nebula le 20/08/2004 00:27:52

Je crois que ce sera fonctionnel, géré ainsi. Je m'y atelle, merci infiniment ! :)

signaler à un administrateur
Commentaire de shining le 20/08/2004 23:53:48

il n'y a pas de quoi.
pour info, une partie de mon client irc sera mis sur ce site, dont un parser de Smiley TEmoticonsManager qui offre une solution flexible pour inserez des images, ainsi qu'un parser de Texte irc, dans le style Mirc
pour le moment de nombreux composants sont en developpement donc patience...
@+

signaler à un administrateur
Commentaire de atomefougere le 23/02/2005 04:20:45

L'exemple est très sympatique :)

J'aimerais avoir par contre plus de détails à propos du redimensionnement des items...

J'arrive à calculer la hauteur des items en fonction des retours à la ligne, mais ce calcul n'est fait qu'une fois. Donc tout fonctionne lors de l'ajout des items, mais si on change la largeur de la ListBox, les Items ne changent pas de taille.

Je m'explique :

Dans l'evenement OnMesureItem, je calcule la hauteur de l'item en fonction du texte qui y sera affiché.

Dans l'evenement OnDraw, j'affiche le texte sur une ou plusieurs lignes, en fonction de la longueur du texte.

Quand je redimensione la Listbox, le texte se recalle bien comme il faut, les retours à la ligne se font bien si necessaire, mais la hauteur de l'item, elle, ne change pas...

Je n'ai pas très bien compris les explications de shining, serait il possible que vous m'aidiez un peu plus sur ce point ?

Merci, et excusez moi de déterrer un ancien sujet.

signaler à un administrateur
Commentaire de Nebula le 14/06/2005 15:55:58

J'utilise ceci pour redimensionner les items (la routine CheckItemSize calculant la taille occupée par un item) :

  Size := CheckItemSize(Index);
  if Size <> ListBoxChat.Perform(LB_GETITEMHEIGHT, Index, 0)
  then begin
    ListBoxChat.Perform(LB_SETITEMHEIGHT, Index, Size);
    ListBoxChat.Invalidate;
    Exit;
  end;

Ce code va dans la routine OnDrawItem. Et lorsque la Form est redimensionnée, il faut aussi appeler ListBoxChat.Invalidate sinon le redimensionnement n'a pas cours immédiatement !

Je pense poster bientôt une listbox gérant tous les styles IRC et les retours à la ligne, le temps de me relire/commenter mon code/optimiser le bousin ;-)

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,655 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.