[Delphi] Utiliser des pngs pour les speedbuttons?

Utiliser des pngs pour les speedbuttons? [Delphi] - Delphi/Pascal - Programmation

Marsh Posté le 28-03-2004 à 15:50:37    

Bonjour,
 
Je cherche à utiliser des pngs comme glyph pour des speedbuttons. J'utilise le composant TPngImage, avec ce code-là:

Code :
  1. procedure TForm1.FormCreate(Sender: TObject);
  2. var
  3. PNG :TPNGObject;
  4. begin
  5. PNG := TPNGObject.Create;
  6. try
  7. PNG.LoadFromFile('./Data/Icons/open.png');
  8. BoutonParam.Glyph.Canvas.Draw(0,0,PNG);
  9. PNG.LoadFromFile('./Data/Icons/save.png');
  10. BoutonSave.Glyph.Canvas.Draw(0,0,PNG);
  11. finally
  12. PNG.Free;
  13. end;
  14. end;


Les glyphs des speedbuttons sont de simples bitmaps blancs, de la mm taille que mes pngs.
Ca marche, à part que ça me donne ça, les contours sont un peu crades:
http://www.lilkoala.net/speedbutton.png
 
Est-ce qu'il y a moyen d'afficher les pngs parfaitement? Avec les contours bien nets etc...?
 
Sinon si il y a d'autres méthodes... je prends :)


Message édité par Ipso le 28-03-2004 à 15:51:33
Reply

Marsh Posté le 28-03-2004 à 15:50:37   

Reply

Marsh Posté le 28-03-2004 à 16:39:27    

Perso, j'fais comme ça :
 

Code :
  1. var
  2. png : TPNGObject;
  3. bmp : TBitmap;
  4. begin
  5. png:=TPNGObject.Create;
  6. bmp:=TBitmap.Create;
  7. try
  8.  png.LoadFromFile('./Data/Icons/open.png');
  9.  bmp.Assign(png);
  10.  SpeedButton1.Glyph := bmp;
  11. finally
  12.  bmp.Free;
  13.  png.free;
  14. end;


 
Mais je pense que ton problème est plus lié à des icônes crades @ la base... (chez moi, ça bave pas)

Reply

Marsh Posté le 28-03-2004 à 16:52:27    

J'ai essayé avec ta méthode pour l'icone de gauche, voilà ce que ça donne:
http://www.lilkoala.net/speedbutton2.png
 
J'ai l'impression que c'est la transparence des pngs qui pose pb, parce qu'elles sont nickel à la base:
http://www.lilkoala.net/open.png
http://www.lilkoala.net/save.png


Message édité par Ipso le 28-03-2004 à 16:52:55
Reply

Marsh Posté le 28-03-2004 à 17:06:57    

Pourquoi tu utilises des Speedbuttons pour une Toolbar ? C'est un peu crado comme méthode :D En plus c'est vachement peu pratique.
 
Depuis pas mal de versions de Delphi, il y a les TToolbar + TToolbuttons + TImageList pour ça :o
 
Pour rendre une TImageList "32 bits" (supportant les transparences" ) il suffit de faire :
 

Code :
  1. ImageList1.Handle := ImageList_Create(16, 16, ILC_COLOR32 or ILC_MASK, 0, 4);


 
Dans le OnCreate de ta Form.
Note, il ne faut le faire que sous XP ! Sous les autres Windows ça ne marchera pas.
 
Pour savoir si t'es sous XP :

Code :
  1. IsWindowsNT := Win32Platform = VER_PLATFORM_WIN32_NT;
  2.   IsWindowsXP := (IsWindowsNT) and (((Win32MajorVersion = 5) and (Win32MinorVersion >= 1)) or (Win32MajorVersion > 5));


 
Si tu passes par un TBitmap, je ne suis pas sûr que tu garderas la transparence de tes images. Je te conseille d'utiliser des TIcon plutôt que TBitmap.


Message édité par antp le 28-03-2004 à 17:08:16

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 28-03-2004 à 17:13:23    

Euh ben je connais pas trop delphi, je tâtonne un peu, donc possible que je fasse n'importe quoi :P
 
Je vais essayer les Ttoolbuttons et TImagelist alors.

Reply

Marsh Posté le 28-03-2004 à 17:20:36    

T'as vu  :??:  
 
---------------------------
Notification d'une exception du débogueur
---------------------------
Le projet Project1.exe a provoqué une classe d'exception EPNGCannotChangeTransparent avec le message 'Setting bit transparency color is not allowed for png images containing alpha value for each pixel (COLOR_RGBALPHA and COLOR_GRAYSCALEALPHA)'.
---------------------------
 
J'ai testé aussi avec ça aussi mais j'ai le même résultat :
 

Code :
  1. //    png.TransparentColor := Form1.Color; L'exception du dessus...
  2.     png.AssignTo(bmp); // J'espèrais que le composant gérait mieux sa propre copie..

Reply

Marsh Posté le 28-03-2004 à 17:24:17    

Oui, j'avais essayé avec TransparentColor aussi, j'ai eu la mm erreur.

Reply

Marsh Posté le 28-03-2004 à 17:27:39    

& tu remarqueras que comme par hasard, ce sont tes pixels semi-transparents qui sont merdiques... les full transparents sont bien gérés eux..  j'ai peur que tu ne souhaites dépasser les limites (compréhensible) du composant...

Reply

Marsh Posté le 28-03-2004 à 17:38:37    

Soit tu prends du 32 bits mais à ce moment pas de TransparentColor et ça marche uniquement sous XP.
Soit tu fais comme tout le monde avec des images à transparence simple (une couleur qu'on définit comme étant transparente)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed