IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Langage Delphi Discussion :

Comment créer un graphique (canvas) à partir de données ?


Sujet :

Langage Delphi

  1. #21
    Membre actif Avatar de remixtech
    Profil pro
    Enseignant
    Inscrit en
    Février 2003
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2003
    Messages : 272
    Points : 214
    Points
    214
    Par défaut
    En faite ca va j'ai compris le mieux c'est qu'on a pas besoin de AA ensuite, c'est bien lisse
    Merci

  2. #22
    Membre actif Avatar de remixtech
    Profil pro
    Enseignant
    Inscrit en
    Février 2003
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2003
    Messages : 272
    Points : 214
    Points
    214
    Par défaut
    re,

    J'ai un problème quand je mets Doublebuffered à true

    J'obtient un bug graphique dans les panels qui doivent redimenssioner



    Une idée ?

    Merci

  3. #23
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Quelle est cette fonction de redimensionnement ?
    A quoi te sert-elle ? C'est pour agrandir l'espace d'affichage ou l'étirer ?

    Regarde, je partirais sur cette base. Ensuite, je pense que j'ajouterais le masque de transparence alpha, et éventuellement l'anti-aliasing...

    http://sub0.developpez.com/delphi/bezier.zip

    Pour ta courbe, ne serait-il pas plus simple de faire une ligne droite entre les points ?
    Si ces points sont suffisemment nombreux, ça ne se verra pas (l'anti-aliasing pourra adoucir éventuellement).
    Voici une fonction pour réaliser un flou légé (en 24bits) si ça t'intéresse...
    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
    Procedure Gaussien(Var clip: TBitmap);
    Var
      x, y: Integer;
      p0, p1, p2: PByteArray;
    Begin
      For y := 1 To clip.Height - 2 Do
      Begin
        p0 := clip.ScanLine[y - 1];
        p1 := clip.ScanLine[y];
        p2 := clip.ScanLine[y + 1];
        For x := 1 To clip.Width - 2 Do
        Begin
          p1[x * 3] := (p0[x * 3] + p2[x * 3] + p1[(x - 1) * 3] + p1[(x + 1) * 3]) Div 4;
          p1[x * 3 + 1] := (p0[x * 3 + 1] + p2[x * 3 + 1] + p1[(x - 1) * 3 + 1] + p1[(x + 1) * 3 + 1]) Div 4;
          p1[x * 3 + 2] := (p0[x * 3 + 2] + p2[x * 3 + 2] + p1[(x - 1) * 3 + 2] + p1[(x + 1) * 3 + 2]) Div 4;
        End;
      End;
    End;
    De retour parmis vous après 10 ans!!

  4. #24
    Membre actif Avatar de remixtech
    Profil pro
    Enseignant
    Inscrit en
    Février 2003
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2003
    Messages : 272
    Points : 214
    Points
    214
    Par défaut ...
    C'est juste un simple tsplitter ...

    Je vais faire un composant mais ce qui m'embete beaucoup c'est ce clignotement ...

  5. #25
    Membre actif Avatar de remixtech
    Profil pro
    Enseignant
    Inscrit en
    Février 2003
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2003
    Messages : 272
    Points : 214
    Points
    214
    Par défaut
    Oui c'est tr_s bien mais je n'ai pas de support pour l'image
    Le Timage ne fonctionne pas comme je veux
    Le tpaintbox n'a pas de Doublebuffered

    Peut on dessiner sur un tpanel ?

  6. #26
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Le Timage ne fonctionne pas comme je veux
    C'est à dire ? Qu'est-ce-qui manque ?

    Peut on dessiner sur un tpanel ?
    Oui, sur tous les objets possèdant un Canvas...
    De retour parmis vous après 10 ans!!

  7. #27
    Membre actif Avatar de remixtech
    Profil pro
    Enseignant
    Inscrit en
    Février 2003
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2003
    Messages : 272
    Points : 214
    Points
    214
    Par défaut
    Oui bien enf aite des que je redimensionne le Timage grace au splitter et que je redessine, le canvas ne suit pas, pourtant en Align := alclient.

    je me crée un petit composant qui pourra resservir à partir du tpanel

  8. #28
    Membre actif Avatar de remixtech
    Profil pro
    Enseignant
    Inscrit en
    Février 2003
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2003
    Messages : 272
    Points : 214
    Points
    214
    Par défaut ...
    Voila comment j'ai commencé

    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    unit GRAPH;
     
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
     
    type
      TGraph = class(TCustomControl)
      private
        fBorderStyle: TBorderStyle;
        fAutoSize: boolean;
        fCenter: boolean;
        fResBitmap: string;
        HBitmap: HBitmap;
        BMPWidth: integer;
        BMPHeight: integer;
        procedure SetBorderStyle(Value: TBorderStyle);
        procedure SetAutoSize(Value: boolean);
        procedure SetCenter(Value: boolean);
      procedure paint; override;
      protected
        procedure CreateParams(var Params: TCreateParams); override;
      public
      published
        property BorderStyle: TBorderStyle read fBorderStyle write SetBorderStyle;
        property AutoSize: boolean read fAutoSize write SetAutoSize;
        property Center: boolean read fCenter write SetCenter;
     
        property Align;
        property Color;
        property Ctl3D;
        property DragCursor;
        property DragMode;
        property Enabled;
        property ParentColor;
        property ParentCtl3D;
        property ParentShowHint;
        property PopupMenu;
        property ShowHint;
        property Visible;
        property OnClick;
        property OnDblClick;
        property OnDragDrop;
        property OnDragOver;
        property OnEndDrag;
        property OnMouseDown;
        property OnMouseMove;
        property OnMouseUp;
        property OnStartDrag;
      end;
     
    procedure Register;
     
    implementation
     
    procedure Register;
    begin
      RegisterComponents('OnKeySoft', [TGraph]);
    end;
     
    procedure TGraph.CreateParams(var Params: TCreateParams);
    const
      BorderStyles: array[TBorderStyle] of Longint = (0, WS_BORDER);
    begin
      inherited CreateParams(Params);
      with Params do
      begin
        Style := Style or BorderStyles[FBorderStyle];
        if NewStyleControls and Ctl3D and (FBorderStyle = bsSingle) then
        begin
          Style := Style and not WS_BORDER;
          ExStyle := ExStyle or WS_EX_CLIENTEDGE;
        end;
      end;
    end;
     
    procedure TGraph.SetBorderStyle(Value: TBorderStyle);
    begin
      if FBorderStyle <> Value then begin
        FBorderStyle := Value;
        RecreateWnd;
      end;
    end;
     
    procedure TGraph.SetAutoSize(Value: boolean);
    begin
      fAutoSize := Value;
      if Value and (HBitmap <> 0) then begin
        ClientWidth := BMPWidth;
        ClientHeight := BMPHeight;
      end;
    end;
     
    procedure TGraph.SetCenter(Value: boolean);
    begin
      if fCenter <> Value then begin
        fCenter := Value;
        if Value and (not fAutoSize) and (HBitmap <> 0) then Invalidate;
      end;
    end;
     
     
     
    procedure TGraph.Paint;
     var i, A, B, C: integer;
      P: array[1..4] of TPoint;
    const
     
      Larg = 5;
    begin
       with Canvas do begin
     
     
       // Creation d'un rectangle qui fait le tour
     
        Brush.Color := $00C2EECE;
        Pen.Color := $00C2EECE;
        Brush.Style := bsSolid;
        Rectangle(0, 0, Width, Height);
        Pen.Color := $00A8E3B3;
     
     
     
     
     
      // Construction de la courbe
        pen.Color := clblack;
        pen.Width := 1;
     
     {   for i := listbox1.Items.count - 1 downto 1 do
        begin
          A := strtoint(listbox1.items.strings[i - 1]);
          C := strtoint(listbox1.items.strings[i]);
          B := (A + C) div 2;
          P[1] := Point(Width - ((i - 1) * Larg * 3 + Larg * 0), Height - A);
          P[2] := Point(Width - ((i - 1) * Larg * 3 + Larg * 1), Height - B);
          P[3] := Point(Width - ((i - 1) * Larg * 3 + Larg * 2), Height - C);
          P[4] := Point(Width - ((i - 1) * Larg * 3 + Larg * 3), Height - C);
          PolyBezier(P);
        end;  }
     
        Pen.Color := $00A8E3B3;
        pen.Width := 1;
     
            // création des lignes verticales
     
        for i := 0 to (Width div 50) do begin
          moveto(Width - i * 50, 0);
          lineto(Width - i * 50, Height);
        end;
     
        // création des lignes horizontales
     
        for i := 0 to (Height div 25) do begin
          moveto(0, Height - i * 25);
          lineto(Width, Height - i * 25);
        end;
     
           pen.Color :=$0044B13F;
        pen.Width := 2;
     
       { for i := listbox1.Items.count-1 downto 1 do
        begin
          A := strtoint(listbox1.items.strings[i-1]);
          C := strtoint(listbox1.items.strings[i]);
          B := (A + C) div 2;
          P[1] := Point(Width - ((i - 1) * Larg * 3 + Larg * 0), Height - A);
          P[2] := Point(Width - ((i - 1) * Larg * 3 + Larg * 1), Height -B);
          P[3] := Point(Width - ((i - 1) * Larg * 3 + Larg * 2), Height -C);
          P[4] := Point(Width - ((i - 1) * Larg * 3 + Larg * 3), Height -C);
          PolyBezier(P);
        end;   }
     
     
     
      end;
    end;
     
    end.

  9. #29
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Lorsque tu redimensionnes une image, il faut penser à redimensionner également le bitmap...
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Image2.Width := ClientWidth;
    Image2.Height := ClientHeight;
    Image2.Picture.Bitmap.Width := Image2.Width;
    Image2.Picture.Bitmap.Height := Image2.Height;
    Voilà qui devrait résoudre ton problème.
    Sinon, j'ai plusieurs méthodes à te proposer si tu veux optimiser l'affichage de ma démo.
    A propos, tu remarqueras que l'on peut choisir la largeur...
    De retour parmis vous après 10 ans!!

  10. #30
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    http://sub0.developpez.com/delphi/bezier2c.zip

    J'ai ajouté le filtre de flou légé... Qu'en penses-tu ?



    Sinon sans le filtre :



    Et le graphique ne se redessine que pour le redimensionnement...
    Sujet résolu ?
    De retour parmis vous après 10 ans!!

  11. #31
    Membre actif Avatar de remixtech
    Profil pro
    Enseignant
    Inscrit en
    Février 2003
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2003
    Messages : 272
    Points : 214
    Points
    214
    Par défaut
    Oui c'est très bien, même si je suis pas très flou gaussien.

    Sujet résolu

    Mais pour mon composant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        property backcolor: tcolor read fbackcolor write fbackcolor default clwhite;
        property linecolor: tcolor read flinecolor write flinecolor default clblack;
        property graphcolor: tcolor read fgraphcolor write fgraphcolor default clred;
        property remplicolor: tcolor read fremplicolor write fremplicolor default clgreen ;
    Comment rafraichir le graph en design time, quand on change une couleur ...

    Comment mettre des couleurs par défaut car la il mets tout en Clblack dans l'editeur de composant ?

    Merci d'avance

  12. #32
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2003
    Messages : 43
    Points : 57
    Points
    57
    Par défaut
    Comment mettre des couleurs par défaut car la il mets tout en Clblack dans l'editeur de composant ?
    Il faut définir les propriété dans Create()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    constructor MonComposant.Create(AOwner: TControl);
    begin
     
    LineColor := clBlack;
    BackColor := clWhite;
     
    etc...
     
    end;

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/06/2015, 11h09
  2. Créer un graphique a partir d'une quantité variable de donné.
    Par kent010 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/10/2014, 17h26
  3. Réponses: 3
    Dernier message: 25/07/2005, 09h40
  4. Réponses: 1
    Dernier message: 24/05/2005, 14h50
  5. Comment créer un fichier dummy de taille donnée ?
    Par Maitre Kanter dans le forum Langage
    Réponses: 3
    Dernier message: 13/12/2003, 23h46

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