begin process at 2012 02 11 06:58:42
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Mutimédia

 > 

Image & Vidéo

 > 

ClipRect et Paint


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

ClipRect et Paint

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

barbichette

Membre Club
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

Membre Club
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

Membre Club
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

Membre Club
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

florenth

Membre Club
Ouais, ben là, par contre, ça me dépasse
Désolé mais je ne sais rien d'autre... [ Lien ]
samedi 5 juillet 2008 à 20:15:22 | Re : ClipRect et Paint

f0xi

Membre Club Administrateur CodeS-SourceS

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

Membre Club
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

Membre Club
"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

Membre Club
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

Membre Club
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


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,905 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales