PUCE S'AJUSTANT EN FONCTION DE LA LARGEUR D'UN LABEL

JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 - 19 oct. 2006 à 10:58
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 20 oct. 2006 à 20:27
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/39969-puce-s-ajustant-en-fonction-de-la-largeur-d-un-label

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
20 oct. 2006 à 20:27
Mais non Julio, reviens, on a les mêmes à la maison ;o)
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
20 oct. 2006 à 17:23
Tiens, un homard qui a fait carrière dans les ordres...
"Puis-je vous serrer la pince, monseigneur ?" ^^
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
20 oct. 2006 à 14:51
homard'alors ! j'adore la version mmo !
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
20 oct. 2006 à 14:48
non une histoire de homard qui tue parce qu'il pue des pieds ...
ah bah non ... un homard ça a pas de pieds.


ou alors c'est celle du homard qui repaint un plafond et la un autre homard retire l'echelle en lui disant de se tenir au pinceaux, ce qui ne marche bien entendus pas, gravité oblige, et donc le premier homard se tue en tombant ...
d'ou le homard m'a tuer.

version mmo :

homard12465 m'a owné

version tolkien :

c'est alors que dans un sourd bruit de fracas, par une lune etincelante d'une nuit inquietante, qu'un homard level 1 fut ecrasé par une charue hobbit roulant a vive alors dans la penombre d'une foret ancestrale peuplée d'animaux fantastique et magique. Quand soudain, le homard agonisant, les entrailles degoulinante, put ecrire en lettre de sang, d'un adroit jet de volontée dés de 100, hobbit m'a tué.
C'est alors que Sam rejoins monsieur frodon qui paignait un grand et vaste plafond (et oui pour un hobbit tout parrait grand et vaste), et Sam crus alors bon de faire la blague du homard heu ... de l'echelle, a son ami porteur de l'anneau de malediction ... Sam lançat sans prevenir a son ami Frodon "tiens toi a l'echelle je retire le pinceau" ... ce qu'il fit ... Frodon restat consterner devant tant de betise de la part de ce balourd de hobbit et d'un admirable jet d'adresse 2xdés 6, lui balancat une douloureuse torgniolle dans la face, puis ecrit avec de la peinture sur le plafond : sam est un abrutis.
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
20 oct. 2006 à 12:24
T'insinue que je sens le homard ? je le savais ! je dois puer là :o
Utilisateur anonyme
20 oct. 2006 à 12:11
c'était pas une histoire "d'homard" à la base ? ... lol

@+
Cirec
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
20 oct. 2006 à 00:00
JulioDelphi m'a tuer lol...
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
19 oct. 2006 à 23:15
et moi je pue ? lol
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
19 oct. 2006 à 22:40
Salut à tous !
Ben, en voilà de bonnes réflexions.
La solution de Japee sera surement celle retenue par un débutant à cause de sa simplicité.
La solution proposée par Foxi est plus élégante et plus classe (lol) mais nécessite plus d'expérience.
Ce qui est intéressant ici, c'est de disposer des deux approches pour le prix d'une seule.
Bravo à tous.
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
19 oct. 2006 à 16:01
Ah... Duke3d et son éditeur de niveau... faut avoir pratiqué Build et Editart pendant des nuits entières pour comprendre.
"What are you waitin' for, Christmas ?"
Heu, hum, bon... faut que j'y aille, quoi.
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
19 oct. 2006 à 14:30
lol on vois les fan de duke nukem.

remarque moi je suis pas mieux vus comment j'ai bourriner sur la surcouche de classe.

TObject -> TPersistent -> TComponent -> TControl -> TGraphicControl -> TCustomLabel -> TLabel -> TLabel ...

ça c'est de l'heritage.
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
19 oct. 2006 à 12:58
Salut Julio,

"Come get some", en quelque sorte...???
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
19 oct. 2006 à 12:38
la détente ? j'aurais tendance à appuyer dessus pour ce genre d'usine a code XD
dsl j'ai pas pu m'en empecher :D
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
19 oct. 2006 à 12:25
Salut,
Effectivement, je suis parti en trip avec mes panels comme le dit si justement f0xi suite à la question tendancieuse du forum.
Ce n'est certainement pas la meilleure manière d'arriver au résultat ni la plus élégante.
C'est du bricolage pour se dépanner, et ça m'a amusé de tester la possibilité d'y arriver avec les propriétés align et autosize des composants TPanel et autres...
Un défi sympa à relever, pour le fun et la détente, quoi... ;-)
A +
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
19 oct. 2006 à 12:00
je vois je vois, en fait l'utilisateur débutant le delphi a essayé avec les props align, anchors etc et japee est resté dans le meme ordre d'idée, idée qui n'est d'ailleurs pas bonne :D
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
19 oct. 2006 à 11:51
non mais l'idée du TPuceLabel au depart etait d'ecrire un composant TLabel possedant la possibilitée d'ajouter des puces et donc d'avoir deux propriétées TPicture dans le composants.
bien sur ce composant aurait du etre installer dans la palettre pour pouvoir etre utilisé.

mais aprés je me suis dis qu'il y avait plus rapide que d'ecrir un composant specialisé, et c'etait en injectant l'evenement OnChange dans TLabel avant la declaration de TForm. comme ça hop, on avait plus besoin de rien du tout.

et c'est toi le NOOB XD tu comprend rien a mon code :)
lol.
(la on se croirais sur un chat de jeux en ligne avec mon NOOB XD)

mais il faut que tu aillent voir le thread sur le forum qui correspond a la source de japee, comme ça tu comprendras pourquoi il est partis en trip avec ses panels et pourquoi la solutions du combobox ne tiens pas la route.
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
19 oct. 2006 à 11:44
tu te rend compte le flood qu'on viens de faire en 40 minutes ?

que de grands debats dés le matin...

mais bon ça prouve au moins qu'a chaque probleme il y a une solution et meme parfois plusieurs.
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
19 oct. 2006 à 11:44
moké, est-ce que "ecrire un objet TPuceLabel a partir du code de TCustomLabel" fonctionne sans installer de compo ou reviens à poser la question "est ce dynamique pour son code d'écrire un objet TPuceLabel a partir du code de TCustomLabel ?" ^^
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
19 oct. 2006 à 11:42
GROS NOOB :D
nan mais la dérivation c'est la meilleure soluce, et la plus simple c'est poser la ligne "Image2.Left := Label1.Left + Label1.Width;" après la modif du label si cette modif n'apparait pas plus d'une fois dans le code.
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
19 oct. 2006 à 11:41
quote "JulioDelphi" : la dérivation est dynamique mais quand tu dis "ecrire un objet TPuceLabel a partir du code de TCustomLabel" ça ne l'est pas, me trompe-je ?

non regarde ce que j'ai mis aprés :

type
TLabel = class(StdCtrls.TLabel)
private
fOnChange : TNotifyEvent;
procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
published
property Onchange : TNotifyEvent read fOnChange write fOnChange;
end;

TForm1 = class(TForm)
Label1: TLabel;
private
public
end;

je place la derivation en dynamique (enfin oui pas vraiment dynamique) avant la declaration de TForm1, ce qui fait que tout les TLabel possedent desormais un evenement OnChange.
en gros la classe TLabel apparait toujours a l'identique dans l'explorateur d'objet et sur la fiche, mais dans le code et a l'execution elle a un evenement OnChange qu'on peu utiliser a notre guise, a condition d'ecrire nous meme les gestionnaire d'evenements pour les label concernés.
et en gros ça reprend ton idée, mais en utilisant l'evenement OnChange du TLabel plutot que d'un autre objet de la fiche.
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
19 oct. 2006 à 11:36
Ah oui ok ... lol ... c'est pas grave, c'est le matin tout les neuronnes sont pas bien demarrer.

moi j'etais rester sur l'application de celui qui as demander comment faire sur le forum. et lui il n'a pas justement de ComboBox ou de TEdit.
sur la demo de Japee, par contre on en a un justement pour modifier le texte et voir que l'astuce fonctionne.
mais dans un application normale, ce serat surtout avec LabelX.Caption qu'on modifierat le texte, et donc hop...

pour moi c'etait clair en ce sens, il est vrai que si tu etais pas au courrant du probleme de base tu pouvais pas trop comprendre ce que je disais et pourquoi j'essayais de faire comme je le faisais.
et que moi je moi je comprenais pas pourquoi tu t'obstinais avec ton combobox :)
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
19 oct. 2006 à 11:36
mais pas invisible ! as tu ouvert le code de japee ?
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
19 oct. 2006 à 11:35
la dérivation est dynamique mais quand tu dis "ecrire un objet TPuceLabel a partir du code de TCustomLabel" ça ne l'est pas, me trompe-je ?
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
19 oct. 2006 à 11:31
Quote "JulioDelphi" :

"ma soluce n'a pas besoin d'un TEDit en insivible oO où tu vois que j'ai dit ça ?"

Quote "JulioDelphi" :
"mets ceci en code dans le OnChange du ComboBox (ou d'un TEdit ou autre) :"

et donc comme y'a pas de TEdit ou TComboBox dans l'exemple de Japee, cela veut dire qu'il faut un ajouter un ... ;)
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
19 oct. 2006 à 11:29
ma methode est dynamique Julio ... pas de compo a installer.

ta methode avec un TEdit ou TComboBox demande 4 composants mais est plus legere que celle de Japee.
La mienne est je pense peut etre un peu mieux puisqu'on est pas contraint d'utiliser d'autre composants que les TLabel et TImage.
et qu'il suffit d'ecrire un Gestionnaire d'evenements pour chaque Label+Puces que l'on voudrat placer sur la fiche.

D'un point de vue technique elle peut etre egalement interressante pour voir comment on ajoute des propriétés dynamiquement dans des composants existant au dernier moment.
Ce qui evite justement de deriver le composants, de l'installer ect... ect... comme dans ma toute premiere suggestion.

De plus, on apprecierat peut etre d'avoir l'evenement OnChange dans le TLabel dans d'autre cas que d'aligner des images avec le Label.
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
19 oct. 2006 à 11:20
gné ? ma soluce n'a pas besoin d'un TEDit en insivible oO où tu vois que j'ai dit ça ?
c'est juste qu'en reprenant le code de japee, il fait une modif pour tester via un combobox ou un edit.
Ta soluce de deriver le compo est bien aussi mais il me sembe encore que c'est beaucoup pour peu.
une ligne "Image2.Left := Label1.Left + Label1.Width;" après la modif du label suffit, si il modifie ce label a plusieurs endroit, il peut aussi créer une proc qu'il apelle.
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
19 oct. 2006 à 11:14
et si on l'applique pour notre exemple :


procedure TForm1.DoLabelChange(Sender : TObject);
begin
Image2.Left := Label1.Left + Label1.Width;
end;

et au final on a pas trop galerer avec des truc bidule machin chose et ça peserat moins lourd que d'ajouter des composants.
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
19 oct. 2006 à 11:12
Le truc c'est d'éviter de faire installer des compos pour un truc si petit tout de même ou de se tapper xx ligens de codes alors qu'en posant 3 compos + 2 lignes de codes, ça marche :o
pourquoi compliquer les choses ?
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
19 oct. 2006 à 11:11
La methode a julio est pas mal non plus, mais necessite de mettre un TEdit en invisible quelque part.

on pourrait egalement faire :

type
// on derive TLable a partir de StdCtrls.TLabel
// tout les TLabel de Form1 possederont les modifications
TLabel = class(StdCtrls.TLabel)
private
// on ajoute un evenement OnChange
fOnChange : TNotifyEvent;
// on recupere le message systeme de changement de texte
procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
published
// on publie la propriété OnChange
property Onchange : TNotifyEvent read fOnChange write fOnChange;
end;

TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
public
// il nous faut un gestionnaire d'evenement
procedure DoLabelChange(sender : tobject);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

// on declare le code de CMTextChanged
procedure TLabel.CMTextChanged(var Message: TMessage);
begin
// on appel l'ancienne methode CMTextChanged de TLabel
inherited;
// enfin, on declanche l'evenement
if Assigned(fOnchange) then
fOnChange(Self);
end;

procedure TForm1.DoLabelChange(Sender : TObject);
begin
// notre gestionnaire d'evenement
// on y mets ce qu'on veut!
// ici, chaque appel au gestionnaire affiche le nom du label dans la caption de Form1
caption := (Sender as TLabel).Name;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
// on oublis pas d'assigner le gestionnaire d'evenement a Label1
Label1.Onchange := DoLabelChange;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
// pour verifier que tout fonctionne
Label1.Caption := 'Bonjour';
end;
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
19 oct. 2006 à 10:59
bon ben c'est bien, vus que j'avais suivis le thread du forum.

moi j'aurais plutot utiliser le Canvas du Label pour dessiner les puce mais ça aurait generer plus de code.
A moins de deriver TLabel ou carrement d'ecrire un objet TPuceLabel a partir du code de TCustomLabel, mais bon la c'est plus du tout pareil.
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
19 oct. 2006 à 10:58
oulalalala =) quelle usine !
moi je te propose tout bêtement ça :
- apres avoir posé tes 2 images et ton label, sans aucun autre composant TPanel ou autre Anchors ou Align à modifier, mets ceci en code dans le OnChange du ComboBox (ou d'un TEdit ou autre) :
Label1.Caption := ComboBox1.Text;
Image2.Left := Label1.Width + Label2.Left;
et pouf ça marche ^^
perso, je préfère ça :p
Rejoignez-nous