OVH Cloud OVH Cloud

[WD8] Affichage d'icône / API

9 réponses
Avatar
eandrieux
Bonjour,

J'ai une table dans laquelle j'affiche la liste de divers fichiers présents
sur mon disque dur.

Je voudrais que la première colonne affiche l'icône du fichier (en petit)
comme sous l'explorateur Windows, mais je ne trouve pas la fonction exacte.

Certaines API (comme shell32->"ExtractIconA" ou "ExtractIconExA") ne
s'applique apparemment qu'aux fichiers .EXE ou .DLL.

L'appel à "ExtractAssociatedIconA" semblerait plus approprié mais j'obtiens
toujours un message d'erreur ("Une erreur système inattendue est survenue")
sans indication pour résoudre cette erreur.

Quelqu'un connait il un moyen de faire afficher l'icône d'un fichier dans
une table Windev directement à partir de ce fichier ?

Merci par avance pour vos réponses et suggestions,
Cordialement

--
Etienne Andrieux
-----------------------------------------
pour me répondre directement :
http://cerbermail.com/?bbYkJoQBQT

9 réponses

Avatar
Maax°\(51\)°
Salut

Voir l'exemple de la LST 55 je crois : WD7 Extraction Icone
qui permet d'utiliser ExtractAssociatedIconA et d'afficher l'image dans une
liste ou un champ image

@+
Maax°(51)°

"eandrieux" a écrit dans le message de
news:cas8dc$qj3$
Bonjour,

J'ai une table dans laquelle j'affiche la liste de divers fichiers


présents
sur mon disque dur.

Je voudrais que la première colonne affiche l'icône du fichier (en petit)
comme sous l'explorateur Windows, mais je ne trouve pas la fonction


exacte.

Certaines API (comme shell32->"ExtractIconA" ou "ExtractIconExA") ne
s'applique apparemment qu'aux fichiers .EXE ou .DLL.

L'appel à "ExtractAssociatedIconA" semblerait plus approprié mais


j'obtiens
toujours un message d'erreur ("Une erreur système inattendue est


survenue")
sans indication pour résoudre cette erreur.

Quelqu'un connait il un moyen de faire afficher l'icône d'un fichier dans
une table Windev directement à partir de ce fichier ?

Merci par avance pour vos réponses et suggestions,
Cordialement

--
Etienne Andrieux
-----------------------------------------
pour me répondre directement :
http://cerbermail.com/?bbYkJoQBQT





Avatar
Gégé
eandrieux wrote:
Certaines API (comme shell32->"ExtractIconA" ou "ExtractIconExA") ne
s'applique apparemment qu'aux fichiers .EXE ou .DLL.




http://centrewd.free.fr/?page=ficheapi&t=f&n=ExtractAssociatedIcon
Avatar
eandrieux
Merci pour cette réponse, le code semble correspondre.

Y a t'il y un moyen d'affecter l'icône à un objet "Image" de Windev afin de
le manipuler comme une autre image de l'application ?

Merci par avance pour votre aide,
Cordialement
--
Etienne Andrieux
-----------------------------------------
pour me répondre directement :
http://cerbermail.com/?bbYkJoQBQT


"Gégé" a écrit dans le message de news:
cau468$7j0$
eandrieux wrote:
> Certaines API (comme shell32->"ExtractIconA" ou "ExtractIconExA") ne
> s'applique apparemment qu'aux fichiers .EXE ou .DLL.
>

http://centrewd.free.fr/?page=ficheapi&t=f&n=ExtractAssociatedIcon



Avatar
Utilisateur_anonyme_et_non_membre_de_webatou.net
eandrieux wrote:

Bonjour,



J'ai une table dans laquelle j'affiche la liste de divers fichiers présents
sur mon disque dur.



Je voudrais que la première colonne affiche l'icône du fichier (en petit)
comme sous l'explorateur Windows, mais je ne trouve pas la fonction exacte.



Certaines API (comme shell32->"ExtractIconA" ou "ExtractIconExA") ne
s'applique apparemment qu'aux fichiers .EXE ou .DLL.



Entre autres choses, j'ai mis ça dans un composant :

http://www.neogie.com/download/NeogieLibrary.zip

Il y a SauveIconeAssociée, et SauveIconeFichier, au choix pour sauver
l'icone du programme associé, ou l'icone du fichier.

--
Posté via http://www.webatou.net/
Usenet dans votre navigateur !
Complaints-To:
Avatar
eandrieux
Merci pour votre réponse.

En fait, je ne cherche pas à "sauver" ou "extraire" l'icône mais juste à
l'afficher dans une image Windev...

Suite à l'aide du forum, il ne me manque plus que quelques lignes (et
astuces) de code pour affecter icône renvoyé par l'API à une image Windev...
merci par avance à ceux qui pourrait m'aider dans cette dernière étape...

Cordialement
--
Etienne Andrieux
-----------------------------------------
pour me répondre directement :
http://cerbermail.com/?bbYkJoQBQT


"Anonyme de Webatou.net"
a écrit dans
le message de news: 40d2b16a$0$291$
eandrieux wrote:

> Bonjour,

> J'ai une table dans laquelle j'affiche la liste de divers fichiers


présents
> sur mon disque dur.

> Je voudrais que la première colonne affiche l'icône du fichier (en


petit)
> comme sous l'explorateur Windows, mais je ne trouve pas la fonction


exacte.

> Certaines API (comme shell32->"ExtractIconA" ou "ExtractIconExA") ne
> s'applique apparemment qu'aux fichiers .EXE ou .DLL.

Entre autres choses, j'ai mis ça dans un composant :

http://www.neogie.com/download/NeogieLibrary.zip

Il y a SauveIconeAssociée, et SauveIconeFichier, au choix pour sauver
l'icone du programme associé, ou l'icone du fichier.

--
Posté via http://www.webatou.net/
Usenet dans votre navigateur !
Complaints-To:



Avatar
Gégé
eandrieux wrote:
Y a t'il y un moyen d'affecter l'icône à un objet "Image" de Windev afin de
le manipuler comme une autre image de l'application ?



Avec le DC, tu peux le faire. Voir l'aide à ce sujet
Avatar
eandrieux
Pour info, (créer une champ Image avec le nom "hIconAFF")

hDC est un entier
hIcon est un entier
lpIconPath est une chaîne ASCIIZ sur 255
lpIcon est un entier

// récupére le "Device Context" de l'image
hDC = dDébutDessin(hIconAFF)
// sélection du fichier pour lequel on veut l'icône...
lpIconPath = fSélecteur(SysRep(srBureau), "", "Sélectionnez un fichier...",
"Tous fichiers (*.*)"+TAB+"*.*", "*", fselOuvre+fselExiste)
// extraction de l'icône
hIcon = API("shell32", "ExtractAssociatedIconA",Instance(), &lpIconPath,
&lpIcon)
// affichage de l'icône
API("user32", "DrawIcon", hDC, 1, 1, hIcon)
API("user32", "DestroyIcon", hIcon)

// permet l'affichage dans la zone hIconAFF (sinon l'icône est manipulable
dcopie... mais ne s'affiche pas?)
dRedimensionne(hIconAFF,hIconAFF..Largeur,hIconAFF..Hauteur)

Ce code semble fonctionner,
Cordialement

--
Etienne Andrieux
-----------------------------------------
pour me répondre directement :
http://cerbermail.com/?bbYkJoQBQT


"eandrieux" a écrit dans le message de news:
cas8dc$qj3$
Bonjour,

J'ai une table dans laquelle j'affiche la liste de divers fichiers


présents
sur mon disque dur.

Je voudrais que la première colonne affiche l'icône du fichier (en petit)
comme sous l'explorateur Windows, mais je ne trouve pas la fonction


exacte.

Certaines API (comme shell32->"ExtractIconA" ou "ExtractIconExA") ne
s'applique apparemment qu'aux fichiers .EXE ou .DLL.

L'appel à "ExtractAssociatedIconA" semblerait plus approprié mais


j'obtiens
toujours un message d'erreur ("Une erreur système inattendue est


survenue")
sans indication pour résoudre cette erreur.

Quelqu'un connait il un moyen de faire afficher l'icône d'un fichier dans
une table Windev directement à partir de ce fichier ?

Merci par avance pour vos réponses et suggestions,
Cordialement

--
Etienne Andrieux
-----------------------------------------
pour me répondre directement :
http://cerbermail.com/?bbYkJoQBQT





Avatar
Utilisateur_anonyme_et_non_membre_de_webatou.net
eandrieux wrote:

Merci pour votre réponse.



En fait, je ne cherche pas à "sauver" ou "extraire" l'icône mais juste à
l'afficher dans une image Windev...



Suite à l'aide du forum, il ne me manque plus que quelques lignes (et
astuces) de code pour affecter icône renvoyé par l'API à une image Windev...
merci par avance à ceux qui pourrait m'aider dans cette dernière étape...



Voilà le code source.
Ca fera ce que tu veux, sauf sauver.

PROCEDURE SauveIconeAssociée(TailleIcone=1)


SHFILEINFO est structure
hIcon est entier //out: icon
iIcon est entier //out: icon index
dwAttributes est entier // out: SFGAO_ flags
szDisplayName est ASCIIZ chaîne sur 260 //* MAX_PATH ' out: displayname
(or path)
szTypeName est ASCIIZ chaîne sur 80 //* 80 ' out: type name
FIN

SHGFI_DISPLAYNAME est entier = 0x200
SHGFI_EXETYPE est entier= 0x2000
SHGFI_ICON est entier =0x100
SHGFI_OPENICON est entier= 0x2
SHGFI_SELECTED est entier= 0x10000
SHGFI_SYSICONINDEX est entier= 0x4000 // ' system icon index
SHGFI_LARGEICON est entier= 0x0 // '32x32 icon
SHGFI_SMALLICON est entier= 0x1 // '16x16 icon
SHGFI_SHELLICONSIZE est entier= 0x4
SHGFI_TYPENAME est entier = 0x400
SFGAO_HASSUBFOLDER est entier = 0x80000000 //check che presence of the
HASSUBFOLDER attribute
SHGFI_ATTRIBUTES est entier= 0x800 // retrieve the folder's attributes


TailleIc est un entier
retval est entier
hIcon, hInst, nIconIndex sont entier
hdc est entier
szFileName est ASCIIZ chaîne sur 260
szFileName = Chemin

FI est SHFILEINFO

SELON TailleIcone
CAS 1
TailleIc=SHGFI_ICON+SHGFI_SMALLICON
CAS 2
TailleIc=SHGFI_ICON+SHGFI_LARGEICON
FIN

retval=API("shell32","SHGetFileInfoA",&szFileName,0,&FI,Dimension(FI),TailleIc)


SI FI:hIcon>0 ALORS
FenIcone.ImageIcone..Hauteur2

dFinDessin(FenIcone.ImageIcone)
hdcÝébutDessin(FenIcone.ImageIcone)
API("user32","DrawIcon",hdc,0,0,FI:hIcon)
dSauveImageBMP(FenIcone.ImageIcone,Destination)
SI TailleIcone=1
FenIcone.ImageIcone..Largeur
FenIcone.ImageIcone..Hauteur
FenIcone.ImageIconeÞstination
FIN
API("user32","UpdateWindow",Handle())
API("user32","DestroyIcon",FI:hIcon)
FIN


***************** OU BIEN **************

PROCEDURE SauveIconeFichier(TailleIcone=1)
hIcon, hInst, nIconIndex, hdc sont des entiers
szExeFileName est ASCIIZ chaîne sur 260 = Chemin

hInst=Instance()
hIcon=AppelDLL32("Shell32.dll","ExtractIconA",hInst,&szExeFileName,nIconIndex)
SI hIcon>0 ALORS
FenIcone.ImageIcone..Largeur2
FenIcone.ImageIcone..Hauteur2

dFinDessin(FenIcone.ImageIcone)
hdcÝébutDessin(FenIcone.ImageIcone)
AppelDLL32("user32","DrawIcon",hdc,0,0,hIcon)
dSauveImageBMP(FenIcone.ImageIcone,Destination)
SI TailleIcone=1
FenIcone.ImageIcone..Largeur
FenIcone.ImageIcone..Hauteur
FenIcone.ImageIconeÞstination
FIN
AppelDLL32("user32","DestroyIcon",hIcon)
FIN


Dans l'une ou l'autre tu remplace FenIcone.ImageIcone par ton champ image.



--
Posté via http://www.webatou.net/
Usenet dans votre navigateur !
Complaints-To:
Avatar
eandrieux
Merci beaucoup pour ces sources très intéressantes,
Cordialement
--
Etienne Andrieux
-----------------------------------------
pour me répondre directement :
http://cerbermail.com/?bbYkJoQBQT


"Anonyme de Webatou.net"
a écrit dans
le message de news: 40d2df27$0$296$
eandrieux wrote:

> Merci pour votre réponse.

> En fait, je ne cherche pas à "sauver" ou "extraire" l'icône mais juste à
> l'afficher dans une image Windev...

> Suite à l'aide du forum, il ne me manque plus que quelques lignes (et
> astuces) de code pour affecter icône renvoyé par l'API à une image


Windev...
> merci par avance à ceux qui pourrait m'aider dans cette dernière


étape...

Voilà le code source.
Ca fera ce que tu veux, sauf sauver.

PROCEDURE SauveIconeAssociée(TailleIcone=1)


SHFILEINFO est structure
hIcon est entier //out: icon
iIcon est entier //out: icon index
dwAttributes est entier // out: SFGAO_ flags
szDisplayName est ASCIIZ chaîne sur 260 //* MAX_PATH ' out: displayname
(or path)
szTypeName est ASCIIZ chaîne sur 80 //* 80 ' out: type name
FIN

SHGFI_DISPLAYNAME est entier = 0x200
SHGFI_EXETYPE est entier= 0x2000
SHGFI_ICON est entier =0x100
SHGFI_OPENICON est entier= 0x2
SHGFI_SELECTED est entier= 0x10000
SHGFI_SYSICONINDEX est entier= 0x4000 // ' system icon index
SHGFI_LARGEICON est entier= 0x0 // '32x32 icon
SHGFI_SMALLICON est entier= 0x1 // '16x16 icon
SHGFI_SHELLICONSIZE est entier= 0x4
SHGFI_TYPENAME est entier = 0x400
SFGAO_HASSUBFOLDER est entier = 0x80000000 //check che presence of the
HASSUBFOLDER attribute
SHGFI_ATTRIBUTES est entier= 0x800 // retrieve the folder's attributes


TailleIc est un entier
retval est entier
hIcon, hInst, nIconIndex sont entier
hdc est entier
szFileName est ASCIIZ chaîne sur 260
szFileName = Chemin

FI est SHFILEINFO

SELON TailleIcone
CAS 1
TailleIc=SHGFI_ICON+SHGFI_SMALLICON
CAS 2
TailleIc=SHGFI_ICON+SHGFI_LARGEICON
FIN




retval=API("shell32","SHGetFileInfoA",&szFileName,0,&FI,Dimension(FI),Taille
Ic)


SI FI:hIcon>0 ALORS
FenIcone.ImageIcone..Hauteur2

dFinDessin(FenIcone.ImageIcone)
hdcÝébutDessin(FenIcone.ImageIcone)
API("user32","DrawIcon",hdc,0,0,FI:hIcon)
dSauveImageBMP(FenIcone.ImageIcone,Destination)
SI TailleIcone=1
FenIcone.ImageIcone..Largeur
FenIcone.ImageIcone..Hauteur
FenIcone.ImageIconeÞstination
FIN
API("user32","UpdateWindow",Handle())
API("user32","DestroyIcon",FI:hIcon)
FIN


***************** OU BIEN **************

PROCEDURE SauveIconeFichier(TailleIcone=1)
hIcon, hInst, nIconIndex, hdc sont des entiers
szExeFileName est ASCIIZ chaîne sur 260 = Chemin

hInst=Instance()



hIcon=AppelDLL32("Shell32.dll","ExtractIconA",hInst,&szExeFileName,nIconInde
x)
SI hIcon>0 ALORS
FenIcone.ImageIcone..Largeur2
FenIcone.ImageIcone..Hauteur2

dFinDessin(FenIcone.ImageIcone)
hdcÝébutDessin(FenIcone.ImageIcone)
AppelDLL32("user32","DrawIcon",hdc,0,0,hIcon)
dSauveImageBMP(FenIcone.ImageIcone,Destination)
SI TailleIcone=1
FenIcone.ImageIcone..Largeur
FenIcone.ImageIcone..Hauteur
FenIcone.ImageIconeÞstination
FIN
AppelDLL32("user32","DestroyIcon",hIcon)
FIN


Dans l'une ou l'autre tu remplace FenIcone.ImageIcone par ton champ image.



--
Posté via http://www.webatou.net/
Usenet dans votre navigateur !
Complaints-To: