Delphi vers C++

Résolu
Roulio52 Messages postés 10 Date d'inscription mardi 15 février 2005 Statut Membre Dernière intervention 28 août 2007 - 7 juin 2007 à 08:53
Roulio52 Messages postés 10 Date d'inscription mardi 15 février 2005 Statut Membre Dernière intervention 28 août 2007 - 7 juin 2007 à 17:28
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

japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
7 juin 2007 à 12:08
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 +
0
Utilisateur anonyme
7 juin 2007 à 12:53
@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 .
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
7 juin 2007 à 13:44
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" />
0
Roulio52 Messages postés 10 Date d'inscription mardi 15 février 2005 Statut Membre Dernière intervention 28 août 2007
7 juin 2007 à 17:28
Merci Cirec, avec GradientFill j'arrive exactement à faire ce que je voulais faire ;)
Tant pis pour le projet en Delphi !
0