Canvas qui s'effacent !

Résolu
flo160fr Messages postés 157 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 14 avril 2009 - 3 juil. 2006 à 22:34
N_M_B Messages postés 94 Date d'inscription mardi 9 mai 2006 Statut Membre Dernière intervention 1 mars 2008 - 4 juil. 2006 à 11:39
Bonjours,

Je voudrai juste savoir s'il existai un moye nou eviter que les canvas s'éfacent :

Par exemple, si je dessine un rectangle dan la propriété canvas d'une form, et que je passe une autre fenetre par dessu, mon rectangle a disparau....

Y a -t-il un moyen d'éviter cela ?

9 réponses

Utilisateur anonyme
3 juil. 2006 à 23:25
Salut,

oui c'est possible :

procedure TForm1.AImageMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
CreateACopy(AImage);
ViewACopy(AImage);
If (SSLeft in Shift) then AImage.canvas.rectangle(xi,yi,x,y);
end;

procedure TForm1.AImageMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
If (SSLeft in Shift) then
Begin
ViewACopy(AImage);
AImage.canvas.rectangle(xi,yi,x,y);
end;
End;

procedure TForm1.AImageMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
AImage.Canvas.MoveTo(X,Y);
Xi:=X;// a utiliser pour le rectangle et à définir comme variable globale
Yi:=Y;//idem
end;


Procedure CreateACopy(AImage : TImage);
Begin
IF CopyBmp<>nil then FreeAndNil(CopyBmp); //copybmp : variable globale
CopyBmp:=TBitMap.Create;
CopyBmp.Width:=AImage.Width;
CopyBmp.Height:=AImage.Height;
CopyBmp.Canvas.StretchDraw(CopyBmp.Canvas.ClipRect, AImage.Picture.Bitmap);
End;

Procedure ViewACopy(AImage : TImage);
Begin
If CopyBmp<>nil then
AImage.Picture.Bitmap.Assign(CopyBmp);
End;

@+
3
N_M_B Messages postés 94 Date d'inscription mardi 9 mai 2006 Statut Membre Dernière intervention 1 mars 2008
4 juil. 2006 à 02:25
salut ! ,je pense que tu peut faire plus simple .
tu met ton bout de code qui dessine à l'evenement OnpPint de ta fiche
N*M*B
3
Utilisateur anonyme
4 juil. 2006 à 10:36
Salut,

Alors deux choses :

*Dans le cas d'une Form, N_M_B a raison : la procedure OnPaint existe et est bien plus simple. Donc Méa_Culpa : ;).

*La procedure que je t'ai passé est générale : Si tu veux dessiner sur une Form d'une autre application que la tienne, cela est bien plus complexe. La procedure que je t'ai passé reste valable (dans le principe) mais tu dois l'adapter :
- tu créer un bitmap
-tu copies le canvas de ta form dans celui du bitmap.
-Tu affiches ton bitmap sur ta Form.
-Tu dessines sur la Form

les 3 dernières procedures doivent etre réalisées à chaque fois que tu dessines : pour cela tu appelles ce systeme de procedure dans les evenements MouseUp et MouseMove de ta Form principale.

Si maintenant tu veux modifier de facon réelle c'est à dire définitive le canvas de ta Form (application extérieure à la tienne si j'ai bien compris) c'est, je pense, impossible : en effet cela revient à modifier un executable et à ma connaissance cela n'est pas possible (en tout cas à ce niveau là). Donc l'intéret de dessiner sur la Form d'une application exterieure est tres limitée sans parler de la difficulté à le faire.

A+
3
Utilisateur anonyme
3 juil. 2006 à 23:28
Ce code fonctionne aussi si la propriété stretch est à True; ce qui t'évitera que la position de ton carrée et celle de ta souris ne coincident pas.

A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
4 juil. 2006 à 06:27
Salut,

La procedure que je propose est pour un Timage : pour un TImage tu n'as pas d'évènement OnPaint N_M_B. Ce que tu proposes es valable uniquement pour un TPaintBox : attention alors!

@+
0
flo160fr Messages postés 157 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 14 avril 2009
4 juil. 2006 à 10:14
Merci, mais le problème c'est que moi je doit dessiner sur le canvas d'une form,.... qui plus est une form d'une autre aplication.... Merci quand meme d'avoir pris le temps de répondre
0
N_M_B Messages postés 94 Date d'inscription mardi 9 mai 2006 Statut Membre Dernière intervention 1 mars 2008
4 juil. 2006 à 11:31
salut ! francky je pensse  que de déssiner sur une application exterieur(on se comprend bien on ne modifie pas le fichier de l'application on repère seulement le Handle de la form et on dessine dessu) on peut toujour intercepter le message a déstination de l'application et repaindre (je pense qu'il fait éffectuer un Hook  et c'est un peut complique a mon gout comme la dit francky )on tout les cas j'éspeere que tu va trouver     @+


 N*M*B
0
flo160fr Messages postés 157 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 14 avril 2009
4 juil. 2006 à 11:34
Merci pour vos réponces, et en effet, je ne compte pas modifier de maniere définitive la forme de l'aplication, mai simplement son apparance quand mon aplication est active.
0
N_M_B Messages postés 94 Date d'inscription mardi 9 mai 2006 Statut Membre Dernière intervention 1 mars 2008
4 juil. 2006 à 11:39
derien   @+
N*M*B
0
Rejoignez-nous