Problème avec Canvas.draw

fabiin Messages postés 329 Date d'inscription mercredi 4 avril 2001 Statut Membre Dernière intervention 8 décembre 2009 - 8 mai 2002 à 09:58
fabiin Messages postés 329 Date d'inscription mercredi 4 avril 2001 Statut Membre Dernière intervention 8 décembre 2009 - 8 mai 2002 à 10:32
salut,
voici mon prob:
j'utilise un thread
dans ce thread
dans ce thread je dessine sur un TBitmap
(jusque la pas de problème)
ensuite, je veu afficher mon tbitmap sur ma form
donc la je synchronize une procedure
et dans cette procedure j'ai
Form1.Canvas.Draw(0,0,TBitmap);
ca marche nikel
mais la ou ca me fai chier, c ka kan je déplace la souris sur la form, ben... le thread tourne encore, la fonction synchronize est encore appelé mais c comme si mon TBitmap n'était plus affiché sur la canvas de la form.
j'ai essayé ave le convas d'une paintbox, pareil..
leproblème vien donc de Canvas.Draw(0,0,TBitmap);

kelk'un saurai t'il comment remedier a ces problème :question)

Merci par avance :)

@+
Fabs 8-)

4 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
8 mai 2002 à 10:07
Le problème ne vient pas directement de Canvas.Draw.
Tu dois verouiller le canvas, dessiner dessus puis déverrouiller. Ainsi, aucun autre process ne peut utiliser le canvas tant que le thread l'utilises.

May Delphi be with you.
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
8 mai 2002 à 10:09
Suite :
Empêche d'autres threads d'utiliser le canevas.

procedure Lock;

Description

Appelez Lock dans une application multithread pour empêcher d'autres threads d'utiliser le canevas. Lock empêche l'exécution des autres threads coopératifs de l'application jusqu'à ce que la méthode Unlock soit appelée. Les appels imbriqués à Lock incrémentent la propriété LockCount afin que le canevas ne soit libéré que lorsque le dernier verrou est libéré.

Dans des applications multithread utilisant Lock pour protéger un canevas, tous les appels utilisant le canevas doivent être protégés par un appel à Lock. Tout thread ne verrouillant pas le canevas avant de l'utiliser introduire des problèmes potentiels.

Comme Lock empêche les autres threads de s'exécuter, elle peut avoir un effet négatif sur les performances. N'appelez Lock que s'il y a un risque qu'une autre thread interfère avec l'utilisation du canevas.

CQFD.
May Delphi be with you.
0
fabiin Messages postés 329 Date d'inscription mercredi 4 avril 2001 Statut Membre Dernière intervention 8 décembre 2009 6
8 mai 2002 à 10:19
tu veux dire
Canvas.Lock ???
pke si c ca bah ca marche po :(

@+
Fabs 8-)
0
fabiin Messages postés 329 Date d'inscription mercredi 4 avril 2001 Statut Membre Dernière intervention 8 décembre 2009 6
8 mai 2002 à 10:32
arf si c bon ca marche :-D
j'avais mal fais !!!
Merci bcp !!! :big)

@+
Fabs 8-)
0
Rejoignez-nous