|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre Expert
![]() Responsable de service informatique Inscription : avril 2011 Messages : 1 151 ![]() |
Bonjour,
Je cherche un composant "bouton" qui soit une image en fond (plusieurs états possibles), un gyph et texte comme le TBitBtn. Un peu comme les boutons dans Windev (pour ceux qui connaissent). Hélas je ne trouve pas, et ne sais pas trop comment faire. Partir de quoi ? Quoi modifier ? Si quelqu'un a développé ce genre de composants, peut-il me donner des pistes d'avancement ? Je ne suis pas très pointu dans la création de composants. ![]() Merci d'avance JS
__________________
L'Amour est fort difficile à conjuguer. Au passé, il n'est jamais simple. Au présent, il n'est qu'indicatif. Et au futur, il n'est que conditionnel. (d'après Jean Cocteau) |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() Directeur des systèmes d'information Inscription : juillet 2007 Messages : 378 ![]() |
Bonjour,
Si Parhelie passe par ici, il pourrait te donner le code source du composant qu'il avait développé avec nous à l'époque car je ne sais pas si j'ai gardé les sources... de mémoire, il était bien avancé car j'avais spécifié (Faire un truc à la Windev dans les spéc) Cordialement, Chris |
|
|
00
|
|
|
#3 |
|
Membre émérite
![]() ![]() Gilles Enseignant Inscription : novembre 2006 Messages : 808 ![]() |
Bonjour,
Je crois que Lazarus gère nativement les 5 états d'un bouton maintenant un peu comme Windev. Comparé à ce dernier, c'est moins souple parce que il ne gère pas une image fond et une image superposée dessus mais une seule image... Donc quand on allonge le dessin du bouton, le fond s'allonge normalement mais comme il faut incruster l'icône sur le dessin du fond (Imprimante, +, corbeille...), elle se déforme aussi. Ensuite, il est impossible de débrancher -enfin je n'y suis pas arrivé- l'apparition de l'encadré automatique quand on survole le bouton. J'utilse actuellement mes vieux boutons perso lazarus 0.28. A ce moment les 5 états n'existaient pas... où je ne les ai pas vu. J'ai commencé 2 approches : une avec un Timage et une avec un TPanel... Si j'arrive à débrancher le cadre automatique, la seconde est quasiment prête. Pour l'instant, je suis sur Windev en test et je n'ai pas trop le temps de le finir mais le test se termine la semaine prochaine et d'ici 15 jours je peux terminer le composant. Reste quand même aussi la gestion du TAB. Cordialement. Gilles @Chris, Bonjour, tu refais un petit tour par Lazarus ? |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Responsable de service informatique Inscription : avril 2011 Messages : 1 151 ![]() |
Merci à vous 2 pour vos réponses, même si elles ne solutionnent pas (encore) mon problème.
@selzig, tu pars de TPanel ou de TCustomPanel quand tu dérives ton composant ? JS
__________________
L'Amour est fort difficile à conjuguer. Au passé, il n'est jamais simple. Au présent, il n'est qu'indicatif. Et au futur, il n'est que conditionnel. (d'après Jean Cocteau) |
|
|
00
|
|
|
#5 |
|
Membre émérite
![]() ![]() Gilles Enseignant Inscription : novembre 2006 Messages : 808 ![]() |
Du second, sinon vous ne pouvez pas enlever les propriétés "published" inutiles.
Cordialement. Gilles |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Responsable de service informatique Inscription : avril 2011 Messages : 1 151 ![]() |
OK, Merci
JS
__________________
L'Amour est fort difficile à conjuguer. Au passé, il n'est jamais simple. Au présent, il n'est qu'indicatif. Et au futur, il n'est que conditionnel. (d'après Jean Cocteau) |
|
|
00
|
|
|
#7 | ||||
|
Nouveau Membre du Club
![]() Benjamin Codeur Inscription : août 2012 Messages : 37 ![]() |
Bonjour,
comme il est fait référence à Windev, je suppose que l'on travaille en Windows (7 ?). J'ai commencé à réaliser un composant dans ce genre là à partir de boutons 5 états Windev. Il est suffisamment fonctionnel pour moi mais bon il n'a aucune autre prétention. La première étape était celle de l'image ci-jointe. On utilise un TPanel qui se met à la taille de l'image1 (de fond). Ensuite on ajoute dans le Tpanel une deuxième image et un Tlabel. Avec les ancres, il est facile de gérer l'ensemble. Pour info, voici le lfm correspondant. Code :
Evidemment tous les ancrages doivent être retraduits dans le composant. Le TPanel gère le TabOrder. Le TSpeedButton est encore plus facile à imiter puisque l'image2 est centrée dans image1. Petit problème quand même, soit on part de la taille de l'image1 ou alors on gère le stretching de l'image1. Autrement dit soit le Tpanel s'adapte à la taille de l'image1 et donc c'est l'image1 qui donne la taille du Tpanel (c'est le cas des encrages ici) ou c'est l'image1 qui s'allonge à la taille désirée du Tpanel et dans ce cas là l'étape 2 est un peu plus compliquée. La deuxième étape est de découper les images en 5 (Tpanel1.Width := Image1.width div 5) puis de gérer les actions (survol de la souris, MouseDown, MouseUp et éventuellement le focus)... Là sans faire un composant, c'est beaucoup plus difficile à gérer... Enfin je n'ai pas essayé à partir de cette étape... Par contre en étape 2 avant de commencer le composant, j'ai coupé les images... puis étape 3, traité les évènements dans un composant hérité de TCustomPanel. Pour l'étape 2 : Code :
Je te laisse le plaisir de le faire. Je n'ai pas testé sur un autre OS que Windows7. Il faudrait voir comment sont gérés les problèmes de transparence. Il faut que l'image2 puisse être transparente. Maintenant, pour la surcharge des évènements, je peux éventuellement te donner des pistes si tu en as besoin et le veux... Dans ce cas, peut-être par message privé ? A+ |
||||
|
|
20
|
|
|
#8 |
|
Membre Expert
![]() Responsable de service informatique Inscription : avril 2011 Messages : 1 151 ![]() |
Merci pour ces pistes.
J'aurais effectivement surement besoin d'aide pour les évènements, pour la transparence de la 2nde image, ça devrait aller. Je vais commencer par voir tout ça. Je ne voudrais pas faire une usine à gaz, mais je ne me suis jamais lancé dans la création de composants, alors, j'ai plein de doute... Merci, et à très bientôt surement... JS Edit : Une question subsidiaire... Pour créer un nouveau composant, quel est la meilleure (la plus simple) technique ? Créer une unité, et déclarer le type composant, ou faire "Creer un nouveau composant" du menu paquet de Lazarus ?
__________________
L'Amour est fort difficile à conjuguer. Au passé, il n'est jamais simple. Au présent, il n'est qu'indicatif. Et au futur, il n'est que conditionnel. (d'après Jean Cocteau) |
|
|
00
|
|
|
#9 |
|
Nouveau Membre du Club
![]() Benjamin Codeur Inscription : août 2012 Messages : 37 ![]() |
Bonjour,
les 2 sont envisageables pour dériver un TCustomPanel. Mais pour faire un composant (notamment créer son .lpk), la méthode la plus simple est en effet Paquet -> Nouveau Paquet -> myButtons [nom] -> Valider Puis toujours dans la fenêtre du composant Ajouter -> Nouveau composant
*Je n'ai pas vu apparaître dans la liste des ancêtres proposés le TCustomPanel. J'ai choisi un TPanel puis modifier la ligne 11 de l'unit myBitBtn en TmyBitBtn = class(TCustomPanel). Si tu mets une image, son nom sera obligatoirement : TmyBitBtn.png ou autre extension (au format 24 x 24) Elle sera transformée en myBitBtn_icon.lrs. Fais le avant de créer ton composant sinon il faudra la transformer et modifier le code de ton lpk "à la main". Voila... Cela en est toujours une plus ou moins... mais c'est à mettre en rapport avec la puissance du concept et ce qu'il permet de faire... PS : Ta gestion de la transparence pourrait m'intéresser. J'ai un code fonctionnel mais pas exportable sur un autre OS (avec usage de LCLintf). Donc je suppose que ma méthode est mauvaise. |
|
|
00
|
|
|
#10 |
![]() ![]() Serge GirardDéveloppeur informatique Inscription : janvier 2007 Messages : 4 207 ![]() |
Salut ,
j'ai gardé une copie des composants cités par Chris37 , je pense qu'il s'agit de lzvgraphicbutton.pas dont il parle je peux envoyer l'ensemble complet si besoin (MP) , j'y avais mis mon grain de sel à l'époque et travaillé un peu sur les transparences
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous |
|
|
10
|
|
|
#11 | ||||
|
Nouveau Membre du Club
![]() Benjamin Codeur Inscription : août 2012 Messages : 37 ![]() |
Bonjour,
Extrait de lzvgraphicbutton.pas : Code :
Je ne vois pas non plus comment sont gérés soit l'AutoSize soit le Resize. Mais bon, je n'ai pas l'habitude de partir "directement" d'un TCustomControl... Enfin, on trouve Code :
Si tu veux bien fournir la partie manquante du code qua conçu l'équipe dans laquelle tu étais, cela m'intéresse d'une part pour l'utilisation de TCustomControl comme ancêtre et d'autre part pour la gestion des transparences. Merci. A+ |
||||
|
|
00
|
|
|
#12 |
![]() ![]() Serge GirardDéveloppeur informatique Inscription : janvier 2007 Messages : 4 207 ![]() |
La transparence n'avait rien à voir , si tu veux les paquets , je pense que la meilleure solution serait de les envoyer via MP
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous |
|
|
00
|
|
|
#13 |
|
Membre Expert
![]() Responsable de service informatique Inscription : avril 2011 Messages : 1 151 ![]() |
Merci SergioMaster,
Je regarde ces sources, quoi que je fasse au final, avoir le plus de pistes est toujours profitable. JS
__________________
L'Amour est fort difficile à conjuguer. Au passé, il n'est jamais simple. Au présent, il n'est qu'indicatif. Et au futur, il n'est que conditionnel. (d'après Jean Cocteau) |
|
|
00
|
|
|
#14 |
![]() ![]() Serge GirardDéveloppeur informatique Inscription : janvier 2007 Messages : 4 207 ![]() |
Du a des limitations de taille (+ de 2M en 7z) je propose que les personnes intéressées me MP leurs adresses mail pour leur faire parvenir les versions que je peux avoir sur mon poste .
je ne suis pas sur a 100% d'avoir les dernières sources (même SVN) disons que mon expérience LAZARUS s'est plus ou moins arrêtée en Décembre 2009
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous |
|
|
00
|
|
|
#15 |
|
Nouveau Membre du Club
![]() Benjamin Codeur Inscription : août 2012 Messages : 37 ![]() |
OK pour moi, SergioMaster. Je prends contact par MP pour te transmettre mon adresse mail.
Parallèlement, j'ai retravaillé sur mon composant. Je suis en train de regarder quelles différences imposait le choix d'un TCustomControl comme ancêtre à la place d'un TCustomPanel, ce dernier dérivant directement du premier. Donc ton code sera le bienvenu. Merci. |
|
|
00
|
|
|
#16 |
|
Membre Expert
![]() Responsable de service informatique Inscription : avril 2011 Messages : 1 151 ![]() |
@SergioMaster, je t'ai "MP" mon adresse mail.
Merci d'avance. A nous tous, on va ré-écrire un WindevLazarus... ![]() JS
__________________
L'Amour est fort difficile à conjuguer. Au passé, il n'est jamais simple. Au présent, il n'est qu'indicatif. Et au futur, il n'est que conditionnel. (d'après Jean Cocteau) |
|
|
00
|
|
|
#17 | ||
|
Membre Expert
![]() Responsable de service informatique Inscription : avril 2011 Messages : 1 151 ![]() |
Bonjour à toutes et tous,
Voilà, j'ai essayé de développer un bouton comme je le souhaite, mais, j'ai de gros soucis. Voilà le code du bouton en question Code :
En conception (car j'ai mis le compo dans un paquet), si je précise un fond (1 etat) et une glyph (1 Etat), j'ai la glyph qui est agrandie à la taille du bouton et qui masque le fond. A l'execution, j'ai carrément rien à part le "caption". En débuguant, j'ai finalement trouvé que c'est parce fNbImages et fNbGlyphs sont à 0 ! Alors qu'en conception, je les ai bien mis à 1. Autre problème, les valeurs "default" des propriétés ne semblent pas être prises en compte ? Pourquoi ? Bref, je ne comprends rien. J'ai déjà réaliser des composants sous Delphi 5 et je n'ai jamais rencontré ce genre de problème. Si quelqu'un peut m'éclairer sur les erreurs que j'ai commises, merci d'avance JS
__________________
L'Amour est fort difficile à conjuguer. Au passé, il n'est jamais simple. Au présent, il n'est qu'indicatif. Et au futur, il n'est que conditionnel. (d'après Jean Cocteau) |
||
|
|
00
|
|
|
#18 |
|
Membre Expert
![]() Responsable de service informatique Inscription : avril 2011 Messages : 1 151 ![]() |
Bon, j'ai quasiment terminé.
Il ne me reste qu'un soucis sur le Caption (Cf ici) et ça devrait marcher. Je copierais le source une fois terminé. Ah ! Si j'ai un petit soucis. L'image du composant dans la palette. J'ai bien créé le fichier ressource, mais Lazarus n'en veut pas dans la palette, il met un icone par défaut. A+ JS
__________________
L'Amour est fort difficile à conjuguer. Au passé, il n'est jamais simple. Au présent, il n'est qu'indicatif. Et au futur, il n'est que conditionnel. (d'après Jean Cocteau) |
|
|
00
|
|
|
#19 |
|
Membre Expert
![]() Responsable de service informatique Inscription : avril 2011 Messages : 1 151 ![]() |
Bon, je vous livre mon travail, fortement inspiré du source que SergioMaster (encore merci à toi).
Ce n'est surement pas parfait, mais ça semble vouloir fonctionner comme prévu, donc, la phase utilisation/debugging va réellement commencer pour moi. Si vous avez le temps, l'envie, etc... vous pouvez l'utiliser et me renvoyer vos impressions, remarques et corrections. JS PS : Et si quelqu'un sait comment solutionner le problème de l'icone de la palette...
__________________
L'Amour est fort difficile à conjuguer. Au passé, il n'est jamais simple. Au présent, il n'est qu'indicatif. Et au futur, il n'est que conditionnel. (d'après Jean Cocteau) |
|
|
00
|
|
|
#20 | ||
|
Membre Expert
![]() Responsable de service informatique Inscription : avril 2011 Messages : 1 151 ![]() |
Voici la dernière mouture du composant.
Merci à ApproxDev... Code :
JS
__________________
L'Amour est fort difficile à conjuguer. Au passé, il n'est jamais simple. Au présent, il n'est qu'indicatif. Et au futur, il n'est que conditionnel. (d'après Jean Cocteau) |
||
|
|
20
|
Copyright © 2000-2013 - www.developpez.com