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

Composants VCL Delphi Discussion :

Plus rapide que TPaintBox


Sujet :

Composants VCL Delphi

  1. #21
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Le Assign sur les canvas, cela fonctionne rarement, autant sur Font, Brush, ... pas de soucis ... Mieux vaut un CopyRect (BitBlt) ...
    Effectivement. Une des raisons pour lesquelles je propose une combinaison TBitmap/TImage.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  2. #22
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    DUCROS s'est déjà décarcassé à expliquer tout ça en long en large et en travers sur le forum.
    Donc, tu cherches sur le forum :
    Mot-clé : TPaintBox
    Auteur : Waskol
    Rubrique du forum : Delphi

    Si tu ne trouve rien, c'est vraiment parce que tu as mal cherché

    Bon courage hombre.


    En résumé :
    - Avec ton TPaintBox, il te faut un TBitmap. Tu le crées dans le OnCreate de ta fiche, tu lui donne les dimensions de la PaintBox, et tu le détruit dans le OnDestroy de la fiche.

    - Pour mettre à jour ton dessin, tu écris une procédure pour ça dans laquelle
    a) tu dessines dans le bitmap
    b) tu appelle PaintBox1.Repaint;

    - Dans le OnPaint du TPaintBox tu dessine le contenu du bitmap sur la paintbox


    Ce qui donne le schéma suivant :
    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
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls;
     
    type
      TForm1 = class(TForm)
        PaintBox1: TPaintBox;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure PaintBox1Paint(Sender: TObject);
      private
        { Déclarations privées }
        TonBitmap:TBitmap;
      public
        { Déclarations publiques }
        Procedure MiseAJourDessin;
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      TonBitmap:=TBitmap.Create;
      TonBitmap.Width:=PaintBox1.ClientWidth;
      TonBitmap.Height:=PaintBox1.ClientHeight;
    end;
     
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      TonBitmap.Free;
    end;
     
    procedure TForm1.MiseAJourDessin;
    begin
      //Dessin dans le canvas du bitmap
      TonBitmap.Canvas.Draw();
      //Appel du OnPaint de la PaintBox
      PaintBox1.Repaint;
    end;
     
    procedure TForm1.PaintBox1Paint(Sender: TObject);
    begin
      PaintBox1.Canvas.Draw(0,0,TonBitmap);
    end;
     
    end.

    Ca va l'faire ?
    Bidouilleuse Delphi

  3. #23
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut
    Yep !

    Un seul homme vous manque et tout barre en sucette,

    Bien vu, Waskol,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  4. #24
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Ha, une précision tout de même, si lenteur il y a c'est parce que d'une manière ou d'une autre vous utilisez la propriété pixels du bitmap ou du canvas (boudiou que c'est lent !)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonBitmap.Canvas.pixels[x,y]:=clYellow;
    Pour coder les pixel il est vraiment préférable de passer par la propriété "scanline" des canvas. (il y a un tuto sur le site perso de nono40 : http://nono40.developpez.com ).

    très honnêtement, le temps de traitement d'une image peut varier dans un rapport de 1/2 seconde, à quelque millièmes de secondes (j'vous l'jure !).

    Après, pour les Draw, line, etc, ça va encore à peu près. D'accord, ce n'est pas DirectX, mais on peut faire des choses assez "véloces" (voir ma version du Serpent pour le défi))
    Bidouilleuse Delphi

  5. #25
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut

    pour augmenter l'efficacité de ton dessin tu peut
    passer par les api windows

    telque les selectobject
    ,createcompatiblebitmap,DeleteObject,BitBlt et autre joyeuseté

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  6. #26
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    J'ai suivi tout ce que vous avez dit sur le post.

    Il y a eu pas mal de solutions et de 'débats'.

    Je vous remercie pour votre aide.

  7. #27
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Pense a appliquer le tag

    et n'hesite pas a revenir nous voir si tu as des questions plus precises sur la methode que tu auras choisi
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  8. #28
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    Je reviens un peu tard sur ce message mais un détail n'a pas été donné dans cette intéressante discussion

    Il est généralement conseillé de verrouiller le canvas pendant la manipulation, cela peut aider concernant les performances

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    BMP.Canvas.Lock;
    try
    ...
    finally
      BMP.Canvas.Unlock; // pas BMP.Vancas.Unlock; :-Þ
    end;


    devYan.

  9. #29
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Je note
    Je ne connaissant pas ca ... et en effet ca peut servir.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

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

Discussions similaires

  1. Access plus rapide que SQL server ????? (débutante)
    Par 24 faubourg dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 21/12/2005, 17h36
  2. [D7] composants plus rapides que dbExpress pour Oracle 8i
    Par Magnus dans le forum Bases de données
    Réponses: 2
    Dernier message: 10/10/2005, 12h06
  3. Plus rapide que bresenham ?
    Par mathieu_t dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 01/06/2005, 13h28
  4. [VB6] timer plus rapide que 1 d'interval
    Par windob dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 24/02/2004, 00h16
  5. Réponses: 8
    Dernier message: 31/10/2003, 16h21

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