Bonsoir tout le monde.

Extrait de l'aide D7 sur « Monochrome », je trouve l'exemple suivant, texto :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TForm1.Button1Click(Sender: TObject);
var
 BitMap1,BitMap2 : TBitMap;
begin
   BitMap2 := TBitMap.Create;
   BitMap1 := TBitMap.Create;
try
   BitMap1.LoadFromFile('C:\Program Files\Fichiers Communs\Borland Shared\Images\Splash\256color\factory.bmp');
   BitMap2.Assign(BitMap1);     // Copie BitMap1 dans BitMap2
   BitMap2.Dormant;             // Libère les ressources GDI
   BitMap2.FreeImage;           // Libère la mémoire.
   Canvas.Draw(20,20,BitMap2);  // Notez que les appels précédents n'ont pas fait perdre l'image
 
   BitMap2.Monochrome := true;
   Canvas.Draw(80,80,BitMap2);
   BitMap2.ReleaseHandle;       // Avec cela on perd le bitmap;
 finally
   BitMap1.Free;
   BitMap2.Free;
 end;
end;
Ce qui m'interpelle, c'est le commentaire « Notez que les appels précédents n'ont pas fait perdre l'image » car moi, je ne note rien !

Ou plutôt, je note qu'en 20,20 rien n'est affiché (et en 80,80 j'ai un affreux pâté tout noir, normal).

Bon, je me dis qu'il y a une erreur dans l'aide et je teste en commentant la ligne concernée mais là, ô surprise, plus rien ne s'affiche !

Je décommente et commente la ligne suivante (BitMap2.Monochrome := true;), histoire d'en avoir le cœur net et oui, j'ai bien l'image en couleur en 80,80 -- mais toujours rien en 20,20...

Alors je commente aussi le Draw en 80,80 et encore une fois, rien ne s'affiche.

J'y perds mon latin...

Résumons :
Pour afficher un pâté noir,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
   Canvas.Draw(20,20,BitMap2);  // Notez que les appels précédents n'ont pas fait perdre l'image
   BitMap2.Monochrome := true;
   Canvas.Draw(80,80,BitMap2);
Pour afficher l'image en couleur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
   Canvas.Draw(20,20,BitMap2);  // Notez que les appels précédents n'ont pas fait perdre l'image
//   BitMap2.Monochrome := true;
   Canvas.Draw(80,80,BitMap2);
Pour ne rien afficher, au choix
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
//   Canvas.Draw(20,20,BitMap2);  // Notez que les appels précédents n'ont pas fait perdre l'image
//   BitMap2.Monochrome := true;
   Canvas.Draw(80,80,BitMap2);
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
   Canvas.Draw(20,20,BitMap2);  // Notez que les appels précédents n'ont pas fait perdre l'image
//   BitMap2.Monochrome := true;
//   Canvas.Draw(80,80,BitMap2);
peu importe que BitMap2.Monochrome soit commenté ou pas...


Question : pourquoi faut-il deux appels à Canvas.Draw pour avoir une image affichée ?
Pour tester, suffit de copier/coller ce code (en vérifiant quand même le chemin de l'image, lol !) ou de taper Monochrome dans l'EDI puis F1.

Merci,