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;
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.
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;
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;
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é.
@ 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
@ 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).
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!