sp40
Messages postés1276Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 2015
-
4 janv. 2007 à 15:16
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 2009
-
6 janv. 2007 à 14:28
Bonjour à tous et bonne année 2007
Je voudrais récupérer l'icone d'un executable et l'intégrer dans un timagelist...
Le problème c'est que l'icone est en 32X32 et que je voudrais un bmp dans mon imagelist en 16X16
Je sais récupérer l'icone et la transférer en 32X32, ce qu'il me manque
c'est la conversion du bmp de 32X32 en 16X16. Quelqu'un a une petite
idée ? merci
N.B. Ne pas oublier de fixer la taille du bitmap de destination à la taille souhaitée. Attention le code ne contient pas de vérification de l'existence ou non des bitmaps.
Cordialement.
<hr />"Frappe ta tête contre une calebasse... et si tu entends un son creux, ne te presse pas d'en déduire que c'est la calebasse qui est vide..."
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 5 janv. 2007 à 12:24
Salut,
que de complications ...
" Je voudrais récupérer l'icone d'un executable et l'intégrer dans un timagelist...
Le problème c'est que l'icone est en 32X32 et que je voudrais un bmp dans mon imagelist en 16X16"
Le TImageList addapte la taille des icônes automatiquement.
Si je crée deux ImageList (LargeImageList et SmallImageList) :
LargeImageList : Width & Height à 32 * 32
SmallImageList: Width & Height à 16 * 16
J'extrais l'icône d'un executable et je l'affecte aux deux ImageList :
sp40
Messages postés1276Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 201515 5 janv. 2007 à 15:10
Hélas, Cirec...
Quand je récupère un bitmap en 32 (car mon icone est en 32 et provient
de mon exécutable via "ExtractIcon" et "DrawIcon") que je place dans
une TImageList en 16, l'imagelist intègre bien les images mais chaque
image est découpée en 4 !!! Je n'ai pas trouvé comment dire
à l'imagelist qu'elle doit "strecher" l'image plutot que de la découper
en 4... (Désolé mais j'ai pas encore testé le code de WhiteHippo)
Simon
Vous n’avez pas trouvé la réponse que vous recherchez ?
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 6 janv. 2007 à 10:41
Bonjour,
Essaye un peu ceci :
var
Form1: TForm1;
HIconLarge:Hicon;
HIconSmall:Hicon;
nIcons:Integer;
implementation
{$R *.DFM}
procedure TForm1.ButtonChoixFichierClick(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
nIcons:=ExtractIconEx( Pchar(OpenDialog1.FileName),-1,HIconLarge,HIconSmall,0);
Label2.Caption:=IntToStr(nIcons);
ButtonAfichageIconeClick(Sender);
end;
end;
procedure TForm1.ButtonAfichageIconeClick(Sender: TObject);
Var
ValeurDeRetour:integer;
begin
ValeurDeRetour:=ExtractIconEx( Pchar(OpenDialog1.FileName),SpinEdit1.Value,HIconLarge,HIconSmall,1);
LabelValeurDeRetour.Caption:=IntToStr(ValeurDeRetour);
image1.Picture.Icon.ReleaseHandle; //libére les ressources allouées pour représenter l'icône
image1.Picture.Icon.Handle:=HIconLarge; //l'icône conenu dans picture devient l'icône désigné par le Handle H
//Un Handle sert à windows pour référencer les ressources
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 6 janv. 2007 à 11:25
Bonjour,
Une autre approche de ta demande qui confirme la suggestion de l'ami CIREC.
En utilisant 2 TimageList, un TFileListBox, un TDirectoryListBox, un TDriveComboBox et 2 Timage.
Code :
uses
ShellApi
var
MainForm: TMainForm;
implementation
{$R *.dfm}
function GetIconIndex(Extension: String; Attribus: DWORD; var TypeFichier :string):Integer;
var SHFileInfo: TSHFileInfo;
begin
if Extension[1] <> '.' then Extension := '.' + Extension;
SHGetFileInfo(PChar(Extension), Attribus, SHFileInfo, SizeOf(TSHFileInfo),
SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES or SHGFI_TYPENAME);
TypeFichier := SHFileInfo.szTypeName;
Result := SHFileInfo.iIcon;
end;
procedure TMainForm.FormCreate(Sender: TObject);
var SHFileInfo :TSHFileINfo;
begin
Ico_Big.Handle := SHGetFileInfo('', 0, SHFileInfo, SizeOF(SHFileInfo), SHGFI_SYSICONINDEX or SHGFI_LARGEICON);
Ico_Small.Handle := SHGetFileInfo('', 0, SHFileInfo, SizeOF(SHFileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
end;
procedure TMainForm.Button1Click(Sender: TObject);
var TypeFichier :string;
begin
Ico_Big.GetIcon(GetIconIndex(FileListBox1.filename,0,TypeFichier),Image1.Picture.Icon.Create);
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 6 janv. 2007 à 13:18
Salut,
@ Guillemouze :
elle est tout aussi courte que celle de WhiteHippo, et même plus, c'est juste qu'il a donné un exemple complet avec DirListBox & FileListBox etc ... et que WhiteHippo ne te donne pas le code pour mettre l'icône dans l'ImageList.
Sinon la méthode utilisé par Cincap (la dernièrre) est encore plus rapide que celle de WhiteHippo puisque l'on arrive au même résultat sans retravailler l'image.
Il suffisait de lire le code pour comprendre cela ...
@ SimonPelloquin : si ton image est divisée en quatre c'est que tu fais un truc que tu ne devrais pas faire.
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 6 janv. 2007 à 13:41
@cirec : ouais, j'ai pas eu le courage de lire le code.
@tout le monde : je pense qu'il est souhaitable, quand on met un code complet comme whitehippo, de mettre en avant la partie importante du code (gras, couleur, ...).
Voila, c'etait juste une petite revendication
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 6 janv. 2007 à 14:28
Rebonjour à tous,
Le 1er code suggéré n'utilisait que 2 composants Timage au lieu et place de 2 TImageList et un spinedit qui permet de voir combien d'icones se trouvent dans le fichier *.exe ou *.dll
L'exemple complet permet aussi de sauvegarder l'icone en bitmap.