Accueil > Forum > > > > ClipRect et Paint
ClipRect et Paint
vendredi 4 juillet 2008 à 14:01:36 |
ClipRect et Paint

barbichette
|
j'ai un gros souci... j'ai une class dérivé de TCustomControl. Evidemment, j'utilise la procedure Paint pour redessiner mon control, mais voilà, ça marche pas... En gros, quand il y a besoin de redessiner, il y a bien un appel à Paint, mais : 1 - la propriété cliprect de mon canvas contient toujours ClientRect. mais pas seulement la zone à redessiner. 2 - dans ma procédure, j'appelle une fonction d'un autre objet, avec un BitBlt. Et là il copie tout, sauf la zone qui est sencé être redessinée... Comme si il inversait les deux zones (celle à redessiner et celle à excule). Je suis désolé, mais il ne sert à rien de donner le bout de code, mais en gros : quand je fait procedure gnagnagna.paint; var r:trect; begin r:=canvas.cliprect; //<- ici, r=BoundsRect; canvas.rectangle(r); end; Quelqu'un aurait-il une solution, une explication, ou quelqu'un a-t'il déjà eu le cas... Merci
|
|
vendredi 4 juillet 2008 à 15:18:53 |
Re : ClipRect et Paint

florenth
|
Salut !
Pour ta question "2" je ne vois absolument pas d'où ça peut venir mais ce problème ne m'est jamais arrivé. Mais pourrait-on voir plus ? comme par exemple le code appelant BitBlt ?
Pour la "1", c'est tout à fait normal. Tant que tu n'appelles pas InvalidateRect() en spécifiant un nouveau rectangle, tu aura sle rectangle englobant ton contrôle.
A+ Flo
|
|
vendredi 4 juillet 2008 à 15:27:49 |
Re : ClipRect et Paint

barbichette
|
alors, pour la 2 : BitBlt(FParentDc,FDecalDraw.x,FDecalDraw.y, FBitmap.Width, FBitmap.Height, FBitmap.Canvas.Handle,0,0,SRCCOPY);
FParentDc étant justement de HDC du contrôle qui reçoit me pose problème dans la procédure Paint.
Quand à Paint, il me semble (et je l'ai vérifier dans un programme vierge) qu'il peut recevoir des rectangles plus petits quand par exemple, une autre fenêtre, qui cachait mon contrôle, vient à disparaitre ou se déplace. Dans ce cas, windows envoie à mon application et ensuite à mon contrôle juste le rectangle à redessiner. D'ailleurs, dans ce cas, si je demande à faire : canvas.brush.color:=random(99999); canvas.rectangle(clientrect); j'ai bien seulement la zone à redessiner qui se redessine. Donc la région à redessiner est ok, mais pas canvas.cliprect...
Bizarre non...
|
|
vendredi 4 juillet 2008 à 18:19:23 |
Re : ClipRect et Paint

barbichette
|
rebonjour, en fait, j'ai trouvé une partie du problème : le handle du canvas de l'objet TCustomObject n'est pas le même que le canvas renvoyé par getdc(TCustomObject.handle). Je cherche donc comment faire correspondre les deux.
|
|
samedi 5 juillet 2008 à 09:24:42 |
Re : ClipRect et Paint
|
samedi 5 juillet 2008 à 20:15:22 |
Re : ClipRect et Paint

f0xi
|
mmm pourquoi ne pas deriver TGraphicControl plutot que TCustomControl ? c'est beaucoups mieux pour les control graphique.
|
|
samedi 5 juillet 2008 à 22:22:39 |
Re : ClipRect et Paint

barbichette
|
ben en fait, il faut que mon contrôle intercepte les évènements claviers, le focus, les scrollbars... Il ne me semble pas que les TGraphicControl le font.
Par contre, j'ai toujours pas trouvé pourquoi GetDc(TCustomControl) ne donne pas la même chose que TCustomControl.canvas.handle. Je ne connais pas trop le fonctionnement des contrôles de delphi,... Donc, en fait, quand j'essaie de dessiner dans le canvas via getdc, et ben en fait, je dessine dans un canvas qui est identique à canvas.handle, mais c'est pas le même... Donc, il marche pas pareil, et entre autre pour le ClipRect, qui reste toujours à Clientrect via getdc et getcliprect, mais qui correspond bien à la zone à redessiner dans canvas.cliprect... Vraiment, je suis perdu.. Pourquoi 2 handle pour un même composant...
|
|
dimanche 6 juillet 2008 à 12:06:47 |
Re : ClipRect et Paint

florenth
|
"pourquoi ne pas deriver TGraphicControl plutot que TCustomControl ? c'est beaucoups mieux pour les control graphique" => Sans relancer le débat ici inutilement, je n'ai que des problèmes avec les TGraphicControl. Certes ils sont biens pour coder des boutons, etc.. mais dès qu'il faut faire mieux c'est TCustomControl qu'il faut privilégier. Certes ils consomment plus de mémoire et de ressources, mais au moins ce sont de vrais contrôles Windows et non pas une pseudo-implémentation faite par les dev de Borland. [et puis t'a le doublebuffer natif au moins... ^^] Ressources Delphi, sources, tutoriaux, actu, ...: www.mx-dev.net [ Lien ]
|
|
lundi 7 juillet 2008 à 19:56:37 |
Re : ClipRect et Paint

barbichette
|
Tu fais bien de soulever ce point sur le doublebuffer. C'est peut-être de là que résite l'astuce entre canvas.handle et getdc. Je pense que getdc donne le handle direct à l'écran alors que canvas.handle va donner le handle du bitmap pour le doublebuffer...
Je part en vacances mais dès mon retour, je me replonge dedans.
|
|
lundi 7 juillet 2008 à 21:36:45 |
Re : ClipRect et Paint

florenth
|
Alors bonnes vacances ! Moi c'est dans 5 jours ! (autant prévenir)
A+
|
|
Cette discussion est classée dans : gros, paint, canvas, redessiner, cliprect
Répondre à ce message
Sujets en rapport avec ce message
Gros problème de dessin [ par titidebute ]
Je voudrais dessiner sur le canvas d'un TLabel mais qui a déjà une couleur de fond (je vais m'expliquer)...monlabel (créer dynamiquement) -> monlabel.
J ai un gros probleme ... [ par funemul ]
Voila mon probleme : mes projets ont du etre effacé, et j ai du reinstallé delphi. (verion 5 pro)J avais une savegarde, seulement e probleme c que mai
gros problème de compilation [ par Latchee ]
Voila C tout simple, delphi ne veut plus compiler nimporte quelle source ke je lui fait ouvrir, le bouton "run" est grisé.Et malgré moultes bidouillag
Form Et Canvas [ par sebastienbro ]
Voila, je déssine sur le Canvas d'une form. J'voudrais savoir commen on fé pr effacer ce canvas, avant de redessiner dessus ?Bye\* -- Seb -- */
Gestion du focus ? [ par Nebula ]
Salut à tous !Je cherche à coder un éditeur (un peu comme SynEdit, mais en plus léger) pour la gestion du code C/C++, mais je me heurte à un petit pro
panel en canvas? [ par lupoo ]
salut à tous,g un prog qui dessine une ligne elastique sur la Form, avec deux cliques de la souris, mais lorsque je rajoute un Panel, les cliques ne f
Question avec canvas.arc [ par CaptainChoc ]
BOnjour, voila j'aimerais faire un cercle avec la prpriété canvas.arc. jusque la pas de prob sauf que je ve un cercle qui s'affiche progressivement po
Hint sur Canvas ! [ par devio ]
Bonjour,Pourrait-on me dire s'il est possible, et comment, attribuer un Hint sur un rectangle (ou autre) tracé sur le canvas d'une image. Pour exemple
Image JPEG à partir d'un Canvas [ par chups82 ]
J'aimerais enregistrer le canvas d'une TForm sous forme d'image jpeg. J'ai essayé de passer par le canvas d'un TBitmap mais ça ne marche pas. J'ai che
Un petit gros probleme [ par Arianesatch ]
Salut tout le monde dites voir j'ai une petite question pour vous:Je voudrais savoir si l'un des champs dans une table a bien une valeur, je fais un s
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2010 : SHAREPOINT 2010 POUR LES DéVELOPPEURSTECHDAYS PARIS 2010 : SHAREPOINT 2010 POUR LES DéVELOPPEURS par ROMELARD Fabrice
Animé par: Laurent Cotton Le développement dans SharePoint 2010 passe par plusieurs axes qui seront évoqués dans cette session, mais plus particulièrement les développements simples lié au besoin Business Business Connectivity Services Ce BCS es...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOURTECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOUR par ROMELARD Fabrice
Cette session est la dernière pleinière de ces 3 jours de TechDays Paris 2010. Généralement, cette troisième journée est plus axée sur l'avenir vu par Microsoft. Après un retour sur l'avenir vu par la Science Fiction ou par ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion
Forum
RE : SAVEDIALOGRE : SAVEDIALOG par JulioDelphi
Cliquez pour lire la suite par JulioDelphi
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|