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 !

COMPOSANT BOUTON MULTI-USAGES AU LOOK ENTIEREMENT PERSONNALISABLE (NOUVELLE VERSION)


Information sur la source

Catégorie :Composants Classé sous : bouton, button Niveau : Initié Date de création : 05/04/2006 Date de mise à jour : 21/05/2006 17:13:03 Vu / téléchargé: 4 244 / 1 182

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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

Description

TBasicBtn sert de classe de base pour les boutons outils (non focalisables): gestion de tous les styles de boutons (autoUp, sélectionné, groupés exclusifs) et de tous les états (2 états survol souris, 2 états MouseDown, checked, 2 états disabled). Des options permettent d'affiner les états et le comportement du bouton. TBasicBtn implémente aussi des propriétés et méthodes pour l'affichage de Caption : layout, alignement multi-lignes...

TSimpleBtn est une classe dérivée de TBasicBtn. Il ajoute principalement :
- une propriété Glyphs : chaque état peut avoir son glyph. Les glyphs sont stockés soit dans un ImageList, soit dans un fichier ressources.  
- un événement OnBeforePaint: p.ex. pour dessiner un fond de bouton, une bordure...  

TDoubleBtn est une classe dérivée de TSimpleBtn: Ajout d'une flèche sur le côté droit (comme un TToolButton de style tbsDropDown). L'événement OnArrowClick permet de faire tous les traitements. Le dessin par défaut peut être paramétré (direction, taille, couleur...) ou même remplacé par un glyph (dans l'événement OnBeforePaint).


Remerciements pour leurs conseils à Mauricio, f0xi et Florenth.
 

Conclusion

Nouvelle démo.
Les composants doivent être installés avant de lancer la démo (palette par défaut : Exemples).  
Niveau initié ou débutant.
Pas de compatibilité avec l'ancienne version.
 

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

Historique

21 mai 2006 17:13:03 :
Mise à jour : changement des propriétés concernant les glyphs, ajout de TDoubleButton...

Commentaires et avis

signaler à un administrateur
Commentaire de f0xi le 07/04/2006 13:43:48 administrateur CS

Un boutton qui ne gere pas le focus ? quel interet ?

un petit truc pour toi :

voir la prop ControlStyle/ControlState de la classe de base TControl !


un bon point pour toi d'avoir utilisé l'ancetre TGraphicControl et non comme certains le font souvent TPanel et TImage... no comment.

signaler à un administrateur
Commentaire de MAURICIO le 07/04/2006 15:38:08

Les TGraphicControl n' ont pas de focus les gars!!!
Il faudrait descendre le compo de TwinControl (compo fenetré, donc avec Handle) pour faire cela ...
Mon TcySkinButton gère les boutons non rectngulaires et le TcyPictureArea permet de gérer une palette de différents boutons (tableau de bord par ex.) de différentes formes/tailles ds un même compo!!!

Je te conseille de jeter un oeil sur mes compo qui sont ici:
http://www.delphifr.com/codes/COMPOSANTS-TCY-COMPONENT-PACK-V5-60_30296.aspx

Tu trouveras du code qui t' aidera pour n' importe quel compo :)
A+

signaler à un administrateur
Commentaire de ThWilliam le 09/04/2006 12:18:57

Salut f0xi,
TSpeedButton n'est pas focalisable. Tu ne lui trouves aucun intérêt ?
C'est vrai que j'aurais peut-être dû indiquer : "bouton outil".

signaler à un administrateur
Commentaire de ThWilliam le 09/04/2006 12:28:30

Salut Mauricio,
J'ai été voir le code de tes 2 composants.
Ce sont des composants plus spécifiques, donc rien à voir avec mon compo que j'ai voulu le plus ouvert possible.

signaler à un administrateur
Commentaire de MAURICIO le 11/04/2006 12:56:00

Salut ThWilliam,
j' ai enfin trouvé 5 minutes pour tester ton compo.
Tout d' abord, tu as raison, mes compos sont spécifiques ...

Mais revenons à ton compo:
si c' est ton 1er compo, je ne peux que te féliciter et j' attends avec impatience les futurs compos que tu feras.

par contre, il y a quand même quelques chose qui me gêne:

      case State of
        1: xxx;
        2: yyy;
      end;

Ta propriété State de ton compo est un integer, pourquoi n' a tu pas crée un type   pour l' état du compo genre: TBasicSate=(TbsNormal, tbsDown, etc ..);

La gestion indépendante de la position du caption et du glyph est un très bon choix à mon avis. L' utilisation du TImageList aussi mais la propriété Glyphs me semble lourde à gérer. Pour une plus grande facilité d' utilisation du compo, il aurait peut être fallu créer une propriété pour chaque indice image.

Pour résumer, je dirais que le compo est complet (il ne manque rien, c' est dingue) mais un peu difficile à utiliser.

En tout cas, il m' a donné envie de créer un bouton dans le genre de celui-ci.
A+

PS: j' ai pas trop regardé le code du compo, j' ai simplement vu que c' est très bien présenté.

signaler à un administrateur
Commentaire de MAURICIO le 11/04/2006 12:58:09

G mis 10/10 car je sais que tu vas tenir compte de mes remarques (Au moins celle concernant le State) ...

signaler à un administrateur
Commentaire de ThWilliam le 12/04/2006 17:57:26

Salut Mauricio,
Merci pour ton commentaire.

Concernant la propriété State : tu as raison, l'emploi de 0,1,2... n'est pas très pratique. Ta proposition de TBasicState est excellente. Ou alors employer des constantes publiques :
       const
         TBS_Up = 0;
         TBS_MsOnUp = 1;
               ...
ce qui permettrait dans du code externe, d'employer au choix "if State = 0" ou "if State = TBS_Up".

Pourquoi j'utilise TImageList: c'est vrai que c'est plus lourd à gérer que des glyphs incorporés (comme TSpeedButton) surtout si on n'a besoin que d'1 ou 2 boutons. Mais imagine un gros projet : j'ai, par exemple, un logiciel de comptabilité qui reprend le même bouton avec le même glyph sur 30 forms différentes. En plaçant un ImageList p.ex. dans un DataModule, cela permet une grosse économie de ressources et de plus, en remplaçant le glyph, tu changes en une fois l'aspect des 30 boutons.

Concernant la propriété Glyphs : j'avais d'abord créé une propriété pour chaque indice, puis créé une classe reprenant les 8 propriétés pour que cela apparaisse dans l'inspecteur d'objets comme un noeud à développer (les propriétés de type Record n'étant malheureusement pas publiables). Puis j'ai pensé à une variable de type string avec stockage en tableau, pcq je trouvais cela finalement le plus facile à employer, mais c'est un avis purement personnel.
Tes remarques sur la difficulté d'utilisation me sont très utiles. Elles me donnent l'idée que la classe de base (TBasicBtn) devrait encore être plus basique (en gros, ne gérer que les états) et, à partir de là, dériver des boutons avec des propriétés propres pour l'affichage. Allez, j'ai encore du boulot...  
J'attends aussi ton futur bouton avec impatience.
A+

signaler à un administrateur
Commentaire de mcapp le 30/05/2006 23:15:20

bonjour,
j'ai déjà réalisé des projets avec ton ancienne version. Mais, maintenant j'ai messages d'erreurs à l'ouverture dans Delphi car les propriétés de boutons déjà sur les forms ne sont plus reconnues par Delphi.
Ne pourrais-tu pas proposer encore l'ancienne version de ton composant SimpleBtn mais qui aurait un nouveau nom dans la palette d'outils afin de pouvoir réouvrir mes anciens projets en modifiant le code des Units.
Merci à toi !
MCapp

signaler à un administrateur
Commentaire de ThWilliam le 31/05/2006 10:18:15

Bonjour Mcapp,

Je suis d'accord de reproposer l'ancienne version, mais la nouvelle me semble plus aboutie, donc ce serait dommage de s'en passer (lol).
Ce qui provoque les erreurs d'ouverture ce sont les propriétés GlyphList et Glyphs. Pour y remédier, voici une solution relativement simple :
Tu ouvres par le bloc-notes les fichiers .dfm associés aux unités dans lesquelles tu as déclaré des TSimpleBtn (ex: unit1.dfm). Tu fais une recherche sur "Glyph".
- tu supprimes les lignes Glyphs = '...'
- pour les lignes contenant les propriétés GlyphList, GlyphLayout, GlyphAdjustV, GlyphAdjustH : tu ajoutes au début : <Glyphs.> (donc GlyphList = ImageList1  --> Glyphs.GlyphList = ImageList1).
Delphi va pouvoir ouvrir ton projet, et tu n'as plus qu'à assigner les valeurs pour les propriétés Glyphs.G0_up...
Si tu as employé la function State (ex: if State = 0) tu dois remplacer par : if Ord(State) = 0  (ou if State = stUp).
Je te conseille de faire un back up de ton projet avant de toucher aux dfm.
Si tu as des problèmes, n'hésite pas à m'en faire part. Cela fait vachement plaisir de savoir que son code est utile à d'autres (tu verras quand tu déposeras tes propres sources).
A +
Thierry




signaler à un administrateur
Commentaire de mcapp le 31/05/2006 14:41:03

Merci Thierry !
Je suis grandement intéressé par ton composant ! Je me suis donc hâté d'exploiter tes conseils !
J’ai donc fait exactement, dans mon Unit1.dfm,ce que tu m’as indiqué.
Mais maintenant à l’ouverture dans Delphi, j’ai le message d’erreur : «  Erreur lors de la lecture de SimpleBtn1.Glyph.GlyphList : La propriété Glyph n’existe pas. »
Mcapp

signaler à un administrateur
Commentaire de mcapp le 31/05/2006 14:43:21

Excuse-moi : je viens de me rendre compte que je devais écrire :  Glyphs.GlyhList !
Je corrige mon erreur et te tiens au courant !
Mcapp

signaler à un administrateur
Commentaire de mcapp le 31/05/2006 14:53:47

Grand Merci Thierry !
Ca fonctionne ! Je récupère donc mes projets qui étaient déjà complexes.
Cela "eut été" rageant de tout perdre.
Encore toutes mes félicitations pour tes composants !
A+
Mcapp

signaler à un administrateur
Commentaire de mcapp le 07/06/2006 13:05:16

Bonjour Thierry !
Comme tu vois, j'exploite toujours la grande qualité de tes composants.
Ma question est la suivante :
Dans l'utilisation de la propriété Caption, pourrait-on envisager une partie du texte (titre) en gras et l'autre partie en caractères simples ?
Cela passe-t-il par une moification du code de MyButtons.pas avec insertion de 2 rectangles textes, l'un pour le titre en gras et l'autre pour le texte simple ?
A +
Mcapp

signaler à un administrateur
Commentaire de ThWilliam le 08/06/2006 20:05:05

Bonjour Mcapp,
désolé de ne pas avoir pu te répondre plus vite...

Il y a moyen de faire cela sans modifier MyButtons.pas : dans Caption, tu ne mets que le titre, puis :

procedure TForm1.SimpleBtn1BeforePaint(Sender: TObject);
var
  s: string;
  x, y: integer;
begin
   with Simplebtn1 do   //ou with Sender as TSimpleBtn
   begin
     s:= 'deuxième ligne';  // ou case Tag of 1: s:= '  '; 2: s:='   '...
     Canvas.Font.Style:=[];  
     Canvas.Brush.Style:= bsClear;  // pour écrire en transparence
     x:= (Width - Canvas.TextWidth(s)) div 2;  // calcul de x
                                               // pour centrer le texte
     y:= Height - 15;
     Canvas.TextOut(x, y, s);
     // remettre le style en gras pour le dessin de Caption
     Canvas.Font.Style:= [fsBold];
   end;
end;

Remarques : si tu fais "bouger" le texte au click, tu devras en tenir compte pour le calcul de x et y (décaler x et y de 1 pixel).
Le petit ennui est que tu ne verras pas ta seconde ligne en mode conception, donc plus difficile à régler sa position.

A +
Thierry

signaler à un administrateur
Commentaire de mcapp le 09/06/2006 19:05:20

Merci beaucoup Thierry, ton explication me satisfait pleinement. Cela fonctionne très bien !
J'ai tout à fait, ainsi, ce que je souhaitais.
Je réfléchis maintenant à une modification de ce code dans l'Unit ou dans ton composant SimpleBtn pour que le texte "deuxième ligne" se comporte comme le texte Caption : j'ai inséré le SimpleBtn dans un Panel étirable et rétractable avec un TSplitter. Le texte Caption se rétracte bien avec le Panel mais pas le texte "deuxième ligne".

A+
Mcapp

signaler à un administrateur
Commentaire de N_M_B le 06/07/2006 20:32:44

rebonjour ThWilliam ! je tenais a te remercier pour ton magnifique TSimpleBtn c'est sur lui que je me suis basé pour faire mon 1er compo qui sera biento dans mes sources(juste un petit nettoyage de code ''oui oui je suis très brouillon ^^ '')
bravo !!! 10/10 $
@+

N*M*B

signaler à un administrateur
Commentaire de ThWilliam le 06/07/2006 20:44:43

Merci N_M_B.
Cela fait sacrément plaisir de voir que son code est utile à d'autres dans l'écriture de leur propre source.
A +
Thierry

signaler à un administrateur
Commentaire de mcapp le 07/07/2006 00:10:05

Je vois que d'autres personnes s'inspirent de ton composant pour élaborer de nouveaux projets et expriment aussi leur enthousiasme.
Je crois, effectivement, que tu mérites totalement ces marques de gratitude car ton composant est réellement très intéressant et incite à s'en inspirer pour d'autres créations !
Encore bravo, Thierry !

signaler à un administrateur
Commentaire de zek67 le 08/08/2006 10:29:25

Bonjour, tout d'abord bravo pour ce composant !

Une petite question : à quoi sert le "Prefix" dans les "Glyphs" ?

Merci d'avance pour la réponse.

A+ z.e.k

signaler à un administrateur
Commentaire de ThWilliam le 08/08/2006 11:53:05

Merci à toi, zek.

"Prefix" : ne sert que si tu utilises un fichier ressources (.res) pour stocker les bitmaps, au lieu d'un ImageList. Les fichiers ressources peuvent avoir des avantages, notamment dans le cas de 2 ou plusieurs programmes qui utiliseraient les mêmes bitmaps. Il suffit, dans ce cas, de recopier le fichier .res dans le dossier de ton nouveau programme et d'inclure la directive de compilation {$R monfichier.res}.
Regarde les commentaires au début de l'unité MyButtons : tu y trouveras un exemple de Prefix.

A +
Thierry

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Button et image, demande a tous le monde ;-) [ par weldoo ] slt a tous je recherche un composant pour réaliser des bouton style pla ! un p comme internet explorer...aussi a y integrer une image et du texte sur Clignotement bouton [ par oullafff ] Bonjour TLM,J'ai télécharger un composant du nom de TIAeverButton, celui-ci est très bien... mais j'aimerais enlever le clignotement du bouton lorsque Gestion des utilisateurs.... [ par Mylvain ] Salut je réalise tant bien que mal un projet sous Delphi (mon premier), j'utilise Delphi 6 et MS SQL Server 2000. Mon programme doit comporter une ges Contourner le pb de lien cyclique entre 2 unités, comment faire? [ par hectorticoli ] Bonjour, Comme vous le savez surement, avec delphi/kylix on ne peut pas Unit1 ne peut pas utiliser Unit2 si Unit 2 utilise Unit1 (lien cyclique...)Seu Besoin d'aide avec les labels [ par Programmeur1987 ] Je veut, dison que j'ai x label dans ma form et un text box et un button, bon je veut que j'aye a écrire dans mon edit le nom d'un label et quand je c problème de MessageBox [ par eowene ] Bonjour à tous.Ce que je veux faire parrait simple mais pour moi, ça ne lest pas.Voilà, j'ai une feuille sur laquelle il y a un bouton. Ce bouton appe Comment interrompre un traitement avec un bouton Stop [ par thonyboy ] Bonjour,J'ai une appli qui fait un trés long traitement !J'aimerais donner la possibilité a l'utilisateur de stopper ce traitement. Pour cela j'ai mis Ajout d'un bouton sur la bordure de la fiche [ par flo1984 ] Salut,Est-ce que quelqu'un saurait comment on ajoute un bouton sur la bordure de la fiche ? En fait je voudrais ajouter un bouton qui me permettrais bizard ,... [ par thone08 ] Bonjour, je voulait me servir de l'interface graphique de wmp9 donc j'ai importer l'activex puis je l'est inserer ainsi qu'un bouton , sur le bouton g savoir quand l'utilisateur clique sur le bouton minimize de mon form [ par globule ] Comment savoir quand l'utilisateur clique sur le bouton minimize de mon form ?Merci


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

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,702 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é.