Affectation de valeur à une propriété de composant [Résolu]

Signaler
Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
-
Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
-
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

Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
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+
Messages postés
251
Date d'inscription
dimanche 7 décembre 2003
Statut
Membre
Dernière intervention
11 novembre 2016

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+
Messages postés
251
Date d'inscription
dimanche 7 décembre 2003
Statut
Membre
Dernière intervention
11 novembre 2016

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+

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
Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
3
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
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
"J'espère pouvoir redonner à ce site tout ce qu'il m'a donné. "

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

A+
Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
3
@ 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
Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
3
@ 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

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).
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
16
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
Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
3
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