Pb Dessin sur Image

Résolu
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 - 12 oct. 2006 à 23:33
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 15 oct. 2006 à 17:32
Bonsoir,
[javascript:Insert_Emoticon('/imgs2/smile_approve.gif'); ] J'ai l'impression que je ne place pas le code où il faut. L'évènement on click de radiobutton ne provoque  pas le dessin sur  l'image, alors que la procédure fonctionne lors de la création de  la fiche. un coup de OnPaint, mais je n'ai pas réussi.
Je vous ai mis un extrait de code pour plus de lisibilité! moi qui voulait faire un tuto rapidos pour CS, [javascript:Insert_Emoticon('/imgs2/smile_dead.gif'); ]c'est rapé. j'ai l'impression de ne plus rien savoir faire.
Lumières de CS qui avez réponse à tout!

[javascript:Insert_Emoticon('/imgs2/smile.gif'); ]1. Dans un tutorial que je prépare pour CS, j'ai une image de fond sur laquelle, je dessine par défaut dans la méthode create de la fiche. Je n'ai pas trouvé de solution. En gérant sur OnPaint de la fiche, ça ne marche pas non plus.
  with Image2 do
  begin
    With Canvas do
    begin
      textOut(270,32,'Question');
      TheRect := Rect(51,top + 485,133,top +567);
      FrameRect(TheRect);
      BitMap1 := TBitMap.Create;
      try
        FicImage := RepExe+'BmpListe1.bmp';
        BitMap1.LoadFromFile(FicImage);
        Canvas.Draw(52,top+ 486,BitMap1);
      finally
        BitMap1.Free;
      end;
      Encadre(Image2,48,top+482); fonctionne!
...
end;
[javascript:Insert_Emoticon('/imgs2/smile_dissapprove.gif'); ]2. Sur l'image sont posés des radiobutton qui en fonction du choix dessine un cadre autour d'une zone ou l'efface : [javascript:Insert_Emoticon('/imgs2/smile_angry.gif'); ]MArche pas!!!
procedure TForm1.RadioButton1Click(Sender: TObject);
begin
  Encadre(Image2,48,top+482); fonctionne pas!
end;
procedure TForm1.RadioButton2Click(Sender: TObject);
begin
  RazCadre(Image2,48,top+482);fonctionne pas!
end;
3. La procedure RazCadre fait la même chose que Encadre mais avec les couleurs du fond. La fonction Encadre fonctionne seulement dans l'appel de create.
Procedure TForm1.Encadre(Image : TImage;X,Y : Word);fonctionne!
var
   TheRect : TRect;
begin
  With Image do
    with canvas do
    begin
      Brush.Color : = ClWhite;
      TheRect := Rect(48,top + 482,136,top +570);
      TheRect := Rect(X,Y,X+88,Y+88);
      FrameRect(TheRect);
      Update;
  end
end;
Merci à vous
Jean_Jean
 

12 réponses

Utilisateur anonyme
13 oct. 2006 à 13:29
Je n'ai pas Delphi sous les yeux pour pouvoir t'en dire plus, mais en général on utilise le radiobutton ainsi :

procedure TForm1.Button1Click(Sender: TObject);
begin
If Radiobutton1.Checked=true then Encadre(Image2,48,top+482)
end;
3
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
13 oct. 2006 à 17:13
[javascript:Insert_Emoticon('/imgs2/smile_dissapprove.gif');

]
Je viens de faire le test simplement avec l'image posée sur la Fiche
principale.

Le pb est le même et l'image saute.





La séquence se fait dans l’ordre suivant :




<li>




Procédure Create Form


</li>




      1.     

chargement de l’image
de fond
2.     

tracé graphique




<!--[endif]-->



<li>


Procédure On Paint appelée 2 fois de suite


</li>
<li>


Clic sur Radio Button


</li>
<li>


Procédure On Paint appelée 1 fois par appel de la procedure Encadre.




</li>


[javascript:Insert_Emoticon('/imgs2/smile.gif');

]
Donc ici, je sais pourquoi, l’image saute. C’est parce que j’avais
plusieurs appels succésifs de la procédure RazCadre. Facile à résoudre avec un
seul appel de la  procédure d’effacement.





[javascript:Insert_Emoticon('/imgs2/smile_question.gif');

]
Pour le RadioButton, je ne trouve pas !

Jean_Jean
3
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
14 oct. 2006 à 08:07
tu sais que pour un with tu peu faire :

with Image.Canvas do begin

au lieu de

with Image do with Canvas do

ensuite, quand tu as deja With Image.Canvas do
ça sert a rien de refaire : Canvas.Draw()

<hr size="2" width="100%" />Croc (click me)
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
15 oct. 2006 à 12:28
Salut,

juste au passage
procedure TForm1.Button1Click(Sender: TObject);
begin
  If Radiobutton1.Checked= True Then Encadre(Image2,48,top+482)
end;
True n'est pas utile dans une évaluation ... True est implicitement déclaré

pour tester une condition  "True"
If Radiobutton1.Checked Then Encadre(Image2,48,top+482)

pour tester une condition  "False"
If Not Radiobutton1.Checked Then Encadre(Image2,48,top+482)
 
@+
Cirec

<hr size ="2" />
3

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

Posez votre question
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
15 oct. 2006 à 13:25
à propos de :

"tu sais que pour un with tu peu faire :

with Image.Canvas do begin

au lieu de

with Image do with Canvas do"

Et si tu as besoin d'Image et de Canvas tu peux aussi faire :

With Image, Canvas Do

 
@+
Cirec

<hr size="2" />
3
Utilisateur anonyme
13 oct. 2006 à 08:58
Salut,

Déjà tu ne parles pas de l'état checké ou non du radiobutton

procedure TForm1.RadioButton1Click(Sender: TObject);
begin
If Radiobutton1.checked then Encadre(Image2,48,top+482);
end;
0
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
13 oct. 2006 à 10:54
Bj Francky23012301,

[javascript:Insert_Emoticon('/imgs2/smile.gif'); ]Merci d'avoir répondu!

[javascript:Insert_Emoticon('/imgs2/smile_shy.gif'); ]Effectivement, je ne fais pas letest. En réalité j'avais mis une ligne en plus.
procedure TForm1.RadioButton1Click(Sender: TObject);
begin
  Radiobutton1.Checked:=true;

  Encadre(Image2,48,top+482);fonctionne pas!
end;

Je ne pensais qu'elle soit nécessaire car par simplification j'ai supposé que l'évènement onclick du bouton met à 1 le check, ce qui est le cas ici.
[javascript:Insert_Emoticon('/imgs2/smile_dissapprove.gif'); ]Le test que tu propose ne résoud pas le problème.
procedure TForm1.RadioButton1Click(Sender: TObject);
begin
  If Radiobutton1.checked then Encadre(Image2,48,top+482);
end;
Jean_Jean
0
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
13 oct. 2006 à 16:35
[javascript:Insert_Emoticon('/imgs2/smile_approve.gif');

]C'est ce que je croyais aussi!
L'image est sur un Tabsheet. Je dessine sur l'image et les radiobuttons sont posés également sur l'image.
Lorsque je change de radiobutton, l'image saute! Cela veut dire que la fiche est redessinée. Le problème vient peut être du fait que l'image est posé sur un
tabsheet. je vais faire  un test sans tabsheet pour voir.
Jean_Jean
0
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
13 oct. 2006 à 19:20
Autant pour moi.
On va chercher compliqué alors qu'il s'agissait d'un oubli d'effacement d'une ligne qui annuler l'effet et également une erreur de position top +482 sortait du graphique.
Mes excuses francky.
Jean_jean
0
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
14 oct. 2006 à 08:45
[javascript:Insert_Emoticon('/imgs2/smile.gif');

]Merci Foxi pour ton attention.
OK, pour canvas.Draw()!
with Image.Canvas : Oui, en effet, simplement, j'avais extrait ce code d'une procédure plus importante ou j'avais besoin de me référer à des propriétés de image non accessible par le canvas.
Merci bien!
[javascript:Insert_Emoticon('/imgs2/smile.gif'); ]jean_jean
0
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
15 oct. 2006 à 14:05
Oui merci Cirec,
je l'avait constaté,logique en fait!..
jean_jean
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
15 oct. 2006 à 17:32
tout a fait cirec pour le with ... on oublis parfois de preciser ce qui nous semble couller de source :)

lol pour Francky qui fait des if ... = true then ...
il devait etre fatigué ... d'habitude il le fait pas.

<hr size="2" width="100%" />Croc (click me)
0
Rejoignez-nous