Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Visualiser un graphique et une image l'un après l'autre [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    novembre 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2005
    Messages : 58
    Points : 46
    Points
    46
    Par défaut Visualiser un graphique et une image l'un après l'autre
    Bonjour,

    j'ai une image en fond d'écran de mon application.
    Puis je veux effacer l'image et la remplacer par une PaintBox.
    Lorsque j'ai fini, j'efface la PaintBox et je réaffiche l'image en fond d'écran.

    Mais lorsque je veux afficher la PaintBox, l'image s'efface, mais la PaintBox n'apparaît pas.
    Il faut que je represse sur le bouton PaintBox pour qu'elle s'affiche enfin.

    Le Bitmap sert à construire l'image qui est ensuite dessinée dans la PaintBox.

    Où se trouve l'erreur ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    unit UnitGraph;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Buttons,
      StdCtrls, ExtCtrls;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Image1: TImage;
        PaintBox1: TPaintBox;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      public
        { public declarations }
        Procedure Affich(Sender: TObject);                                          // affichage des graphes
      private
        { private declarations }
        FGph                   : TBitmap;
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    //******************************************************************************
    //**************************   Affichage des graphes   *************************
    //******************************************************************************
    procedure TForm1.Affich(Sender: TObject);
      Const
        ClrFond = Clgreen;
      begin
        Image1.Visible:=false;
     
        Paintbox1.Align:=AlClient;
        FGph.Height:=Paintbox1.Height;
        FGph.Width:=Paintbox1.Width;
     
        FGph.Canvas.brush.Color:=ClrFond ;
        FGph.Canvas.pen.Color:=ClrFond ;                                            // si la couleur n'est pas celle du fond, un cadre apparaît de la couleur du stylo
        FGph.Canvas.rectangle(0, 0, FGph.Width, FGph.Height);                       // -----> efface la fenêtre
        FGph.Canvas.pen.Color:=ClBlack;                                             // si la couleur n'est pas celle du fond, un cadre apparaît de la couleur du stylo
        FGph.canvas.moveto(100, 100);                                               // construction des axes des abscisses
        FGph.canvas.lineto(150, 150);
     
        Paintbox1.Canvas.Draw(0, 0, FGph);                                          // transfère le dessin dans la Paintbox
        Paintbox1.Visible:=true;
      end;
    //******************************************************************************
    //*********************   Fin de l'affichage des graphes   *********************
    //******************************************************************************
     
     
    procedure TForm1.Button1Click(Sender: TObject);
      begin
        Affich(Sender);
      end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      Paintbox1.Visible:=false;
      Image1.Visible:=true;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
      begin
          FGph:=TBitmap.Create;
      end;
     
     
    end.
    Voici le code complet du petit programme : testgraph.zip


    Merci et bonne journée
    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    mai 2013
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : mai 2013
    Messages : 91
    Points : 533
    Points
    533
    Par défaut Résilience
    Bonjour,

    Un TImage stocke l'image qu'il affiche, elle est donc résiliente.

    Un TPaintBox permet de dessiner comme avec un Timage mais l'image n'est pas conservée. Au moindre rafraichissement elle disparait. C'est pourquoi les actions de dessins d'un TPaintBox sont placées dans l'événement OnPaint qui sera appelé à chaque rafraichissement.

    A titre indicatif, le TImage embarque également un TPaintBox qui ne dit pas son nom. On y accède via le Canvas de l'événement OnPaint qui n'est pas celui du bitmap ! Cela permet d'avoir une image de fond (Picture), par exemple une courbe mathématique, et des informations dynamiques, par exemple hauteur de la courbe selon la position en X (dans le OnPaint).

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    novembre 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2005
    Messages : 58
    Points : 46
    Points
    46
    Par défaut Raffraichissement de la PaintBox
    Merci pour la réponse.
    effectivement, il faut transférer le dessin du Bitmap dans l'événement 'OnPaint' de la Paintbox.
    bonne journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JPGraph] Plusieurs graphiques sur une image
    Par [ZiP] dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 27/12/2007, 20h52
  2. Projet - Visualiser le traitement d'une image
    Par genzo93 dans le forum 2D
    Réponses: 4
    Dernier message: 03/05/2007, 18h12
  3. Visualiser le biais sur une image IRM
    Par larimoise dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 04/03/2007, 23h52
  4. Réponses: 6
    Dernier message: 29/07/2005, 12h12
  5. visualisation et zoom d'une image
    Par julie20 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 11/08/2003, 04h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo