begin process at 2010 03 20 16:37:52
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Composants

 > LISTBOX AVEC SMILEYS

LISTBOX AVEC SMILEYS


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Composants Niveau :Initié Date de création :04/05/2004 Vu / téléchargé :5 858 / 963

Auteur : Nebula

Ecrire un message privé
Site perso
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

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture LISTBOX POUR CLIENTS IRC
Source avec Zip Source avec une capture COLOR PICKER (CAPTURE D'ÉCRAN, ZOOM ET CONVERSION DE COULEUR...
Source avec Zip Source avec une capture RICHEDIT AVEC SUPPORT DES THÈMES XP
Source avec Zip Source avec une capture FORCER LA TRANSPARENCE DES FENÊTRES (WINDOWS XP ET SUPÉRIEUR...
Source avec Zip Source avec une capture UNITÉS SQLITE POUR DELPHI

 Sources de la même categorie

Source avec Zip COMPOSANT THORLOGE par Michel34
Source avec Zip COMMANDS MANAGER - BESOIN DE COMMANDES DANS VOS PROGRAMMES T... par f0xi
Source avec Zip Source avec une capture COMPOSANT TZSIMAGE par ThWilliam
Source avec Zip Source avec une capture UTILISER LES COMPOSANTS PAR LEURS NUMÉROS par Dany3
Source avec Zip Source avec une capture TQGRID UN STRINGGRID AMÉLIORER. par yanb

Commentaires et avis

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

c genial :D

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é :)

++

Commentaire de Nebula le 05/05/2004 13:28:16

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

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;





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 !)

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 .




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 ! :)

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...
@+

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.

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...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 9,017 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales