Bem voilà, comme certains le savent déjà, je ne fais pas de compos alors que je programme avec Delphi depuis 7 ans! Donc, je m' y suis mis pour savoir au moins quelle est la sensation d' utiliser nos propres compos. J' ai donc fais un TPanel avec un dégradé. Il y en a des centaines allez-vous me dire ... C' est vrai !
Comme on peut le constater, la procédure qui fait le dégradé est identique quel que soit le compo trouvé sur les diverses sites de Delphi.
Alors moi, j' y est apporté une modification qui peut faire que le Paint soit bien plus rapide!
Je vous donne que la procédure, je mettrai peut-être un compo plus tard ...
Source / Exemple :
procedure TdgradPaintbox.GradFill(fromColor, toColor: TColor; adgradOrientation: TdgradOrientation);
var
aBand : TRect; { Bande rectangulaire de couleur courante }
i, nbDgrad : integer; { Compteur pour parcourir la hauteur de la fiche }
Arr_StartRGB : Array[0..2] of Byte; { RGB de la couleur de départ }
Arr_DifRGB : Array[0..2] of integer; { RGB à ajouter à la couleur de départ pour atteindre la couleur de fin }
Arr_CurRGB : Array[0..2] of Byte; { RGB de la couleur courante }
begin
// Calcul des valeurs RGB pour la couleur courante
Arr_StartRGB[0] := GetRValue( ColorToRGB( fromColor ) );
Arr_StartRGB[1] := GetGValue( ColorToRGB( fromColor ) );
Arr_StartRGB[2] := GetBValue( ColorToRGB( fromColor ) );
// Calcul des valeurs à ajouter pour atteindre la couleur de fin
Arr_DifRGB[0] := GetRValue( ColorToRGB( toColor )) - Arr_StartRGB[0] ;
Arr_DifRGB[1] := GetgValue( ColorToRGB( toColor )) - Arr_StartRGB[1] ;
Arr_DifRGB[2] := GetbValue( ColorToRGB( toColor )) - Arr_StartRGB[2] ;
With Canvas do
begin
Pen.Style := psSolid;
Pen.Mode := pmCopy;
Pen.Width := 1;
nbDgrad := 255;
if adgradOrientation = doVertical
then begin
if ClientRect.Bottom - ClientRect.Top < 255
then nbDgrad := ClientRect.Bottom - ClientRect.Top;
end
else begin
if ClientRect.Right - ClientRect.Left < 255
then nbDgrad := ClientRect.Right - ClientRect.Left;
end;
for i:= 0 to nbDgrad do // Degradé de um max. de 255 cores ...
begin
If adgradOrientation = doVertical
Then begin
aBand.Left := ClientRect.Left;
aBand.Right := ClientRect.Right;
aBand.Top := ClientRect.Top + MulDiv(i, ClientRect.Bottom - ClientRect.Top, nbDgrad+1 );
aBand.Bottom := ClientRect.Top + MulDiv( i+1 , ClientRect.Bottom - ClientRect.Top, nbDgrad+1 );
End
Else begin
aBand.left := ClientRect.Left + MulDiv( i , ClientRect.Right - ClientRect.Left, nbDgrad+1 );
aBand.right := ClientRect.Left + MulDiv( i+1 , ClientRect.Right - ClientRect.Left, nbDgrad+1 );
aBand.Top := ClientRect.Top;
aBand.Bottom := ClientRect.Bottom;
End;
// Calcul de la couleur courante
Arr_CurRGB[0] := (Arr_StartRGB[0] + MulDiv( i, Arr_DifRGB[0] , nbDgrad ));
Arr_CurRGB[1] := (Arr_StartRGB[1] + MulDiv( i, Arr_DifRGB[1] , nbDgrad ));
Arr_CurRGB[2] := (Arr_StartRGB[2] + MulDiv( i, Arr_DifRGB[2] , nbDgrad ));
Brush.color:=RGB(Arr_CurRGB[0], Arr_CurRGB[1], Arr_CurRGB[2]);
FillRect(aBand);
end;
end;
end;
Conclusion :
L' astuce comme vous pouvez le remarquez est de voir si le nombre de dégradé est inférieur à 255.
Ça evitera de faire 255 fois quelques chose qui, avec 50 fois suffit. Biensûr, plus le compo est petit sur l' axe d' application du dégradé et plus c' est rapide avec cette correction. Faites en le test et donnez moi votre avis.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.