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 ?
Yep !
Un seul homme vous manque et tout barre en sucette,
Bien vu, Waskol,
--
jp
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 !)
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 ).
Code : Sélectionner tout - Visualiser dans une fenêtre à part MonBitmap.Canvas.pixels[x,y]:=clYellow;
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))
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
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.
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
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;
Je note
Je ne connaissant pas ca ... et en effet ca peut servir.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager