Panel avec degradation de couleur

0/5 (1 avis)

Vue 4 195 fois - Téléchargée 579 fois

Description

composant (tout simple) issu de TCustomPanel dans lequel est ajouté 2 propriétés :
. une couleur N°2
. une orientation pour le dégradé

peut être que ce type de composant existe déjà ?
(à défaut et dans le doute et en guise de remerciement pour l'entraide...)

Source / Exemple :


unit DegradePanel;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls;

type Tsens = (GaucheDroite, DroiteGauche, HautBas, BasHaut);
type TDegradePanel = class(TCustomPanel)
  private
    { Déclarations privées }
    Color1 : TColor;
    FSens : TSens;
    Procedure SetColor (ColorX: TColor);
    Procedure SetSens (sens: TSens);
  protected
    { Déclarations protégées }
    procedure Paint; override;

  public
    { Déclarations publiques }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    { Déclarations publiées }
    property Align;
    property Alignment;
    property Anchors;
    property AutoSize;
    property BiDiMode;
    property BorderWidth;
    property BorderStyle;
    property Caption;
    property Color;
    property Constraints;
    property DragCursor;
    property DragKind;
    property DragMode;
    property Enabled;
    property FullRepaint;
    property Font;
    property ParentBiDiMode;
    property ParentColor;
    property ParentFont;
    property ParentShowHint;
    property ShowHint;
    property Visible;
    property OnClick;
    property OnDblClick;
    property OnDragDrop;
    property OnDragOver;
    property OnEndDock;
    property OnEndDrag;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnStartDock;
    property OnStartDrag;

    Property ColorDeg: TColor read Color1 write SetColor;
    property Orientation: TSens read FSens write Setsens;

  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Ric', [TDegradePanel]);
end;

constructor TDegradePanel.Create(AOwner: TComponent);
begin
  inherited Create(Aowner);
  Color:= clgray;
  color1:= clsilver;
  FSens:= GaucheDroite;
end;

destructor TDegradePanel.Destroy;
begin
  inherited Destroy;
end;

procedure TDegradePanel.SetColor(ColorX: TColor);
Begin
  color1 := colorX;
  Paint;
end;

Procedure TDegradePanel.SetSens (sens: TSens);
Begin
  Fsens:= sens;
  Paint;
end;

procedure TDegradePanel.Paint;
const Alignments: array[TAlignment] of Longint = (DT_LEFT, DT_RIGHT, DT_CENTER);
var pr, pg, pb : real;
    Rdep, Gdep, Bdep : byte;
    Rfin, Gfin, Bfin : byte;
    i, x : integer;
    Rect : TRect;
    Flags: Longint;
    FontHeight: Integer;
begin
  Rect := GetClientRect;
  if FSens in [GaucheDroite, HautBas]
     then begin
          Rdep := getRvalue (color);
          Gdep := getGvalue (color);
          Bdep := getBvalue (color);
          Rfin := getRvalue (color1);
          Gfin := getGvalue (color1);
          Bfin := getBvalue (color1); end 
     else begin
          Rdep := getRvalue (color1);
          Gdep := getGvalue (color1);
          Bdep := getBvalue (color1);
          Rfin := getRvalue (color);
          Gfin := getGvalue (color);
          Bfin := getBvalue (color); end ;

  if fsens in [HautBas, BasHaut]
     then x :=  height else x:= width;
  pr := (Rfin - Rdep) / x;
  pg := (Gfin - Gdep) / x;
  pb := (Bfin - Bdep) / x;
  
  with canvas do begin
       Brush.Color := Color;
       FillRect(Rect);
       Brush.Style := bsClear;
       Font := Self.Font;
       FontHeight := TextHeight('W');
       case FSens of
           GaucheDroite: for i := 0 to x do begin
                        pen.color := rgb (Rdep +round(i*pr), Gdep+round(i*pg), Bdep+round (i*pb));
                        moveto (i,0); LineTo (i,height); end;
           DroiteGauche : for i := 0 to x do begin
                        pen.color := rgb (Rdep +round(i*pr), Gdep+round(i*pg), Bdep+round (i*pb));
                        moveto (i,0); LineTo (i, height); end;
           HautBas :    for i := 0 to x do begin
                        pen.color := rgb (Rdep +round(i*pr), Gdep+round(i*pg), Bdep+round (i*pb));
                        moveto (0,i); LineTo (width,i); end;
           BasHaut  :    for i := 0 to x do begin
                        pen.color := rgb (Rdep +round(i*pr), Gdep+round(i*pg), Bdep+round (i*pb));
                        moveto (0,i); LineTo (width,i); end;
           end;
       with Rect do begin
            Top := ((Bottom + Top) - FontHeight) div 2;
            Bottom := Top + FontHeight; end;
       Flags := DT_EXPANDTABS or DT_VCENTER or Alignments[Alignment];
       Flags := DrawTextBiDiModeFlags(Flags);
       DrawText(Handle, PChar(Caption), -1, Rect, Flags);
  end;
end;

end.

Codes Sources

A voir également

Ajouter un commentaire Commentaire
cs_Ricquet Messages postés 20 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 30 novembre 2010
22 oct. 2010 à 15:24
Inspiration : image en fond de panel de kenavo, dont j'ai repris la gestion du caption bien qu'inutile pour un panel dégradé...

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.