Pb d'affichage d'un TPaintBox...

cs_seni Messages postés 24 Date d'inscription mercredi 18 août 2004 Statut Membre Dernière intervention 3 novembre 2005 - 22 oct. 2004 à 01:23
krypto2000 Messages postés 23 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 3 mars 2005 - 26 oct. 2004 à 14:41
Bonjour,

J'essaie de realiser une application contenant un composant TPaintBox mais j'ai qques pb avec lui :

- Je voudrais l' "afficher" et le "desafficher" en utilisant :
PaintBox1.visible:= True or False
A la creation de ma forme, si je mets le visible a False, je ne peux plus afficher mon PaintBox par la suite.

- La fonction PaintBox1.Canvas.StretchDraw(Rectangle,Picture); affiche t-elle sistematiquement la fenetre?

- Je voudrais egalement pouvoir afficher un texte par dessus mais je n'y arrive pas, y a t'il un moyen de forcer un label ou une fenetre a passer au dessus des autres.

Merci

5 réponses

vincentstryckmans Messages postés 228 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 octobre 2006
22 oct. 2004 à 15:15
Salut Seni,

Pour afficher et cacher ton paintbox comme bon te semble, tu peux en effet utiliser sa propriété visible. Mais :

Le code qui trace ton graphique, image, ... dans le paintbox doit être placé ou mieux encore appelé depuis l'event OnPaint de la paintbox.

Ensuite, chaque fois que tu mets visible à true, tu dois effectuer un repaint.

Le fait d'utiliser l'event OnPaint permettera à windows de réafficher le paintbox automatiquement si la fenètre de ton soft est temporairement minimiser, cacher, etc ...

Pour ton autre question, je n'ai aps de solution. As-tu essayé de changer l'ordre d'affichage des composants dans le fichier .dfm ?
Je pose lde ce pas a question sur le forum de Borland.

Si tu trouves, donne la solution sur le forum, cela intéressera toujours quelqu'un.

Et comme disait ma grand-mère : il y a toujours du soleil derrière les nuages.

Vincent Stryckmans
0
cs_seni Messages postés 24 Date d'inscription mercredi 18 août 2004 Statut Membre Dernière intervention 3 novembre 2005
22 oct. 2004 à 23:46
Merci pour les reponses,

J'ai appele la fonction suivante depuis l'event OnPaint de la PaintBox :

procedure TfrmTakePicture.PaintBox1Paint(Sender: TObject);
begin
  PaintBox1.Canvas.StretchDraw(Rectangle,PictureTemp);
end;


Du coup la propriete visible fonctionne tres bien.

Comme quoi ca aide de coder proprement ;)

Pour ma derniere question, j'ai recreer de nouveau label, comme il a ete cree apres ma PaintBox il reste naturellement par dessus.
Pour ceux qui veulent ecrire ds le PaintBox, vous pouvez tjrs utiliser les fonctions suivantes (Merci JRod) :

Ecrire sur un canvas (exemple):
PaintBox1.canvas.Font.Color:=clred; 
PaintBox1.canvas.Brush.Style:=bsclear;//tu peux enlever cette ligne si tu veux un texte style label 
PaintBox1.Canvas.TextOut(10,20,'Tontexte'); 
0
vincentstryckmans Messages postés 228 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 octobre 2006
25 oct. 2004 à 12:46
Voici la réponse donnée dans le forum de Delphi par TeamB

This works fine for me. If I drop a tPaintBox on top of a tLabel the label
is hidden but using "send to back" on the tPaintBox fixes it. If you can
select the tLabel in the object inspector by clicking on it then it's on
top of the tPaintBox.

Evidemment, ils causent la langue de Shakespaere de l'autre côté de l'atlantique.

Bref, c'est ce que je supposais dans mon précédent message.

Et comme disait ma grand-mère : il y a toujours du soleil derrière les nuages.

Vincent Stryckmans
0
krypto2000 Messages postés 23 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 3 mars 2005
26 oct. 2004 à 14:27
Bon moi jn'ai mon delphi en anglais mais ça ne devrais pas changer grand chose...

Pour faire modifier l'ordre des controls :

click droit sur le control >> control > send to back | bring to front
0

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

Posez votre question
krypto2000 Messages postés 23 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 3 mars 2005
26 oct. 2004 à 14:41
Ou sinon il y'a encore une manière plus générale pour afficher du texte en faisant appel à l'API windows :

var s: PAnsiChar; r: TRect;
begin
s := PChar('Hello world');
r := Rect(0,0,55,15);
DrawText(PaintBox1.Canvas.Handle,s,-1,r,DT_CENTER or DT_LEFT);
end;
0
Rejoignez-nous