Affectation de valeur à une propriété de composant

Résolu
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 - 15 août 2010 à 12:09
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 - 18 août 2010 à 05:59
Bonjour,

Bien que replongeant le nez dans la littérature de Borland et autres tutoriaux sur les composants, j'ai un doute sur l'affectation d'une valeur à une propriété d'un composant.

But : Pour les formes géométriques qui ont leurs valeurs (Width et height) égales : Cercle, carré... je voudrai que dès que l'utilisateur change une de ces valeurs dans l'inspecteur de propriétés ou par programme, les deux valeurs s'égalisent en prenant la plus grande des valeurs. Voici, la méthode pour Height, celle pour width a la même forme. Mon écriture est-elle valable?

Comme j'ai quelques soucis d'affichage, je ne suis pas sûr de la validité du code.

procedure TBTreeGraph.SetHeightEtiquette(Value : Integer);
begin
  if value <> FHeightEtiq then
  begin
    if (FEtiquette teCircle) or (FEtiquette teSquare) or (FEtiquette = teRoundSquare)... then
    begin
      if FHeightEtiq > FWidthEtiq then
      begin
        FHeightEtiq := value;
        SetWidthEtiquette(value);
      end else FHeightEtiq := FWidthEtiq;
    end else FHeightEtiq := value;
    Invalidate;
  end;
end;


Merci pour vos lumières
Jean_Jean

11 réponses

cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
16 août 2010 à 10:26
Salut,

ce que tu ne sembles pas comprendre est que la nouvelle valeur de FHeightEtiq est dans Value: donc, n' utilise pas FHeightEtiq pour faire des tests de comparaison:

procedure TBTreeGraph.SetHeightEtiquette(Value : Integer);
begin
if value <> FHeightEtiq then
begin
if (FEtiquette teCircle) or (FEtiquette teSquare) or (FEtiquette = teRoundSquare)... then
begin
if Value > FWidthEtiq then
begin
FHeightEtiq := value;
FWidthEtiq := value;
end else FHeightEtiq := FWidthEtiq;
end else FHeightEtiq := value;
Invalidate;
end;
end;

Il n' est pas necessaire non plus d' appeler SetWidthEtiquette, remplace simplement la valeur de la propriété: FWidthEtiq := value.


N' oublie pas une chose, si tu écrits :
FWidthEtiq := 10, tu modifies sa valeur directment, SetWidthEtiquette ne sera donc pas appelé.
WidthEtiq := 10, tu modifies la valeur de FWidthEtiq en passant par SetWidthEtiquette.

property WidthEtiq read FWidthEtiq WRITE SetWidthEtiq !!!

Voilà,
A+
3
fbalien Messages postés 251 Date d'inscription dimanche 7 décembre 2003 Statut Membre Dernière intervention 11 novembre 2016
16 août 2010 à 12:18
Sauf erreur de ma part
le code ne permet que d’augmenter la taille de ton objet et ne permet pas de le réduire
c’est peut être voulue dans le cas contraire il faudrait faire ceci
procedure TBTreeGraph.SetHeightEtiquette(Value : Integer); 
begin 
  if value <> FHeightEtiq then 
  begin 
    if (FEtiquette teCircle) or (FEtiquette teSquare) or (FEtiquette = teRoundSquare)... then 
    begin 
      FHeightEtiq := value; 
      FWidthEtiq := value; 
      Invalidate; 
    end; 
  end;
end;

A+
3
fbalien Messages postés 251 Date d'inscription dimanche 7 décembre 2003 Statut Membre Dernière intervention 11 novembre 2016
16 août 2010 à 20:06
bonjour

En plus je viens de voir que le mien n'est pas bon non plus il n'y a changement que si c'est un carre
procedure TBTreeGraph.SetHeightEtiquette(Value : Integer); 
begin 
  if value <> FHeightEtiq then 
  begin 
    FHeightEtiq := value; 
    if (FEtiquette teCircle) or (FEtiquette teSquare) or (FEtiquette = teRoundSquare)... then 
      FWidthEtiq := value; 
    Invalidate; 
  end;
end;


donc le mieux a mon avis serait de faire l'équivalent pour SetWidthEtiquette
procedure TBTreeGraph.SetWidthEtiquette(Value : Integer); 
begin 
  if value <> FWidthEtiq then 
  begin 
    FWidthEtiq := value; 
    if (FEtiquette teCircle) or (FEtiquette teSquare) or (FEtiquette = teRoundSquare)... then 
      FHeightEtiq := value; 
    Invalidate; 
  end;
end;


A+
3
Utilisateur anonyme
16 août 2010 à 23:09
Salut à tous,

Jean_Jean tu as écris ceci :

If (FEtiquette teCircle) or (FEtiquette teSquare) or (FEtiquette = teRoundSquare)... then


Personnellement je remplacerais cette ligne par (Non vérifiée)

If FEtiquette In [TeCircle,TeSquare,TeRoundSquare, ...] Then


Mais c'est juste pour faire ma chochotte
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
16 août 2010 à 11:20
Merci Mauricio pour tes éclairages. J'ai beau relire la doc de borland, rien ne vaut les explications de ceux qui se sont frotté aux codes.
Oais, je m'étais mélangé les pinceaux encore une fois!
J'espère pouvoir redonner à ce site tout ce qu'il m'a donné.

Bien à toi
Jean_Jean
0
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
16 août 2010 à 11:32
"J'espère pouvoir redonner à ce site tout ce qu'il m'a donné. "

Un jour, j' en suis sûr!!!

A+
0
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
16 août 2010 à 12:39
@ fbalien
Oui je sais, l'algo n'est pas bon, c'est un manque de rigueur de ma part. Mauricio a éclairci un point qui n'était pas très clair, c'est pour ça que j'ai validé sa réponse.

En fait, pour la mise en cohérence des dimensions, je ne sais trop que faire. Lorsque l'utilisateur choisit une forme, les propriétés X et Y doivent s'égaliser; plusieurs solutions sont possibles :
1. On égalise sur la plus grande valeur des deux propriétés, mais pourquoi la plus grande?!
2. on égalise les valeurs sur ladernière saisie par l'utilisateur. Laquelle préfères-tu? Peux être cette deuxième solution, elle parait plus ergonomique dans le paramétrage du composant.
A+
Jean_Jean
0
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
17 août 2010 à 05:46
@ fbalien : tu devais être en hypoglycémie, ça nous arrive à tous. Oui, ça semble mieux!
@ Francky, j'aime bien quand tu fais ta chochotte. Tu chochottes, je chochotte, fbalien chochotte aussi et d'ailleurs nous chochotons tous ici.
Question élégance d'écriture, j'aime bien ta proposition, les ensembles, on les oublie souvent, en plus, je crois que c'est plus rapide, bien qu'à ce niveau du code, ça ne soit pas primordial.
On pourrait demander au trio chochotteur Cirec, Mauricio et Cari roi des chochotteurs qui se chouchoutent bien sur le dernier code de Cari...
Chouchoutons
Jean_Jean
0
Utilisateur anonyme
17 août 2010 à 16:24
Biensur ne pas oublier qu'il faut chouchouter avec modération , et celui qui choucoute est celui qui ne conduit pas (Surtout si c'est Cari : il peut pas chouchouter son bitoniau et conduire en même temps - Trop dangereux lol).
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
18 août 2010 à 02:34
Salut les chochottes !

J'avais les oreilles qui sifflaient et je me demandais d'où ça venait...

... Et, bien sûr, je tombe sur Francky (comme par hasard!).





PS: J'conduis pas car j'ai pas le permis
0
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
18 août 2010 à 05:59
C'est vrai ça, c'est la faute à Francky! Il est souvent au premier plan des cochottes blagues!
J'me laisse entrainer j'sais pas où, avec lui faut se méfier.
Il t'en glisse une sympa pour t'aider et après ça dérappe!

Jean_Jean
0
Rejoignez-nous