Delphi vers C++

Résolu
Signaler
Messages postés
10
Date d'inscription
mardi 15 février 2005
Statut
Membre
Dernière intervention
28 août 2007
-
Messages postés
10
Date d'inscription
mardi 15 février 2005
Statut
Membre
Dernière intervention
28 août 2007
-
Salut à tous !
Je suis un petit débutant en C++,
et je commence à créer un petit paint sous borland.
J'ai un code DELPHI qui pourrait m'être super utile (permettant de faire un dégradé sur le fond d'un form).
et j'essaye de le convertir pour borland en C++ mais mes connaissances en DELPHI et en C++ ne me permettent pas d'avancer :S
Des âmes charitables qui pourrait m'aider pendant que je continue à chercher ?

Voici le code :

unit main;

interface

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

type
  TForm1 = class(TForm)
    ColorDialog1: TColorDialog;
    GroupBox2: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Panel1: TPanel;
    Panel2: TPanel;
    GroupBox1: TGroupBox;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    Degrade: TButton;
    procedure DegradeClick(Sender: TObject);
    procedure Panel1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormResize(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

Procedure Degrader(Form : Tform;FStartColor:Tcolor;FEndColor:Tcolor;Vertical : boolean);
Var
  aBand : TRect;    { Bande rectangulaire de couleur courante        }
  i    : Integer;  { Compteur pour parcourir la hauteur de la fiche }
  FStartRGB  : Array[0..2] of Byte;    { RGB de la couleur de départ }
  FCurrentRGB : Array[0..2] of Byte;    { RGB de la couleur courante  }
  FDeltaRGB  : Array[0..2] of Integer; { RGB à ajouter à la couleur de départ pour atteindre la couleur de fin }

Begin
  { Calcul des valeurs RGB pour la couleur courante }
  FStartRGB[0] := GetRValue( ColorToRGB( FStartColor ) );
  FStartRGB[1] := GetGValue( ColorToRGB( FStartColor ) );
  FStartRGB[2] := GetBValue( ColorToRGB( FStartColor ) );
  { Calcul des valeurs à ajouter pour atteindre la couleur de fin }
  FDeltaRGB[0] := GetRValue( ColorToRGB( FEndColor )) - FStartRGB[0] ;
  FDeltaRGB[1] := GetgValue( ColorToRGB( FEndColor )) - FStartRGB[1] ;
  FDeltaRGB[2] := GetbValue( ColorToRGB( FEndColor )) - FStartRGB[2] ;

  { Initialisation des dimensions de la bande de couleur }
  aBand.Left :=0;
  aBand.Right:=Form.Width;
  { Boucle pour remplir la fiche courante en dégradé }
  With Form.Canvas Do
  Begin
    Pen.Style:=psSolid;
    Pen.Mode:=pmCopy;
    For i:= 0 To 255
    Do Begin
      { Dimensions verticales de la bande }
      If Vertical = true then begin
      aBand.Left :=0;
      aBand.Right:=Form.Width;
      aBand.Top := MulDiv( i , Form.Height , 256 );
      aBand.Bottom := MulDiv( i+1 , Form.Height , 256 );
      End
      Else begin
      aBand.Top:=0;
      aBand.Bottom:=form.Height;
      aBand.left := MulDiv( i , Form.width , 256 );
      aBand.right := MulDiv( i+1 , Form.width , 256 );
      End;
      { Calcul de la couleur courante }
      FCurrentRGB[0] := (FStartRGB[0] + MulDiv( i , FDeltaRGB[0] , 255 )) mod 256;
      FCurrentRGB[1] := (FStartRGB[1] + MulDiv( i , FDeltaRGB[1] , 255 )) mod 256;
      FCurrentRGB[2] := (FStartRGB[2] + MulDiv( i , FDeltaRGB[2] , 255 )) mod 256;
      { Affichage sur la fiche }
      Brush.color:=RGB(FCurrentRGB[0],FCurrentRGB[1],FCurrentRGB[2]);
      FillRect(aBand);
    End;
  End;
End;

//--------------------------------------------------------------------------------

procedure TForm1.DegradeClick(Sender: TObject);
var i : integer;
begin
Degrader(Form1,panel1.Color,panel2.Color,RadioButton2.Checked);
end;

procedure TForm1.Panel1Click(Sender: TObject);
begin
ColorDialog1.Color:=(sender as Tpanel).Color;
if ColorDialog1.Execute then (sender as Tpanel).Color:=ColorDialog1.Color;
Degrade.Click;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
Degrade.Click;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
Degrade.Click;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
Degrade.Click;
end;

end.

Voilà le programme est assez petit ca devrait pas être compliqué mais je comprend rien :S
Merci à tous ceux qui pourront m'aider !
A touti !

4 réponses

Messages postés
1727
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
6 novembre 2021
8
Salut,

Puisque tu est aussi avancé en C++ qu'en Delphi, pourquoi ne pas commencer par Delphi, tu as déjà le code pour ton Paint ?

A +

@Japee : tu crois qu'on peut faire un dégradé avec 2 trous alignés ? (Ouep on appelle ca un dégradé de trous ).

@Cirec : pas mal le coup de pub avec les photos et tout .
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
T'as vu la belle pub ... hein
j'l'ai bien faite ...

et puis il faut bien assurer la promotion de ses propres sources

ps
: Dans l'aperçu la miniature ne correspond pas au résultat final ... ce
n'est pas un bug c'est juste que les copies (images) ont étés faites
séparément
 
@+
Cirec

<hr size="2" />

 
@+
Cirec

<hr size="2" />
Messages postés
10
Date d'inscription
mardi 15 février 2005
Statut
Membre
Dernière intervention
28 août 2007

Merci Cirec, avec GradientFill j'arrive exactement à faire ce que je voulais faire ;)
Tant pis pour le projet en Delphi !