Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
919 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  [Delphi] Utiliser des pngs pour les speedbuttons?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Delphi] Utiliser des pngs pour les speedbuttons?

n°685969
Ipso
Posté le 28-03-2004 à 15:50:37  profilanswer
 

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
mood
Publicité
Posté le 28-03-2004 à 15:50:37  profilanswer
 

n°685988
Whiler
Posté le 28-03-2004 à 16:39:27  profilanswer
 

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)

n°685992
Ipso
Posté le 28-03-2004 à 16:52:27  profilanswer
 

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
n°686000
antp
Super Administrateur
Champion des excuses bidons
Posté le 28-03-2004 à 17:06:57  profilanswer
 

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
n°686002
Ipso
Posté le 28-03-2004 à 17:13:23  profilanswer
 

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.

n°686004
Whiler
Posté le 28-03-2004 à 17:20:36  profilanswer
 

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..

n°686006
Ipso
Posté le 28-03-2004 à 17:24:17  profilanswer
 

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

n°686008
Whiler
Posté le 28-03-2004 à 17:27:39  profilanswer
 

& 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...

n°686022
antp
Super Administrateur
Champion des excuses bidons
Posté le 28-03-2004 à 17:38:37  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  [Delphi] Utiliser des pngs pour les speedbuttons?

 

Sujets relatifs
Associer une extension à un programme delphi[Delphi] Un composant ayant l'allure de l'inspecteur d'objet?
Delphi et Interbase[Delphi] Qu'est ce qu'une unité ?
OpenGL : combien de lumières on peut utiliser ?[delphi] le tag d'un tpanel
Delphi & JavaDocutiliser la carte graphique
utiliser 1 formule de calc stckée dans 1 champ d'1 bd access[HTML]Comment utiliser la sélection d'une liste de choix ?
Plus de sujets relatifs à : [Delphi] Utiliser des pngs pour les speedbuttons?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR