IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[Demande]Changer l'icone d'un fichier


Sujet :

Windows Forms

  1. #41
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 11
    Points
    11
    Par défaut
    Ouais mais au lieu de me dire que j'y suis pas , tu pourrais pas me faire un exemple de se que tu entend par "surchargé" , tu sais je débute apres tout...


    SVP!!

  2. #42
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par BCmDev Voir le message
    Tu n'y es pas, slayer418. Ta classe doit dériver de Edanmo.ShellExtensions.IconHandlerBase puis surcharger la méthode OnExtractIcon. N'oublie pas d'indiquer l'extension de fichier via l'attribut dédié.
    L'appel sera ensuite fait directement par le shell, tu n'as pas d'appel à écrire. Quand tu compiles, l'IconHandler est enregistré automatiquement par Visual Studio. Tu peux donc voir directement le résultat dans l'explorateur.
    "Surcharger" n'est pas le terme exact... une surcharge (overload) est une méthode avec le même nom mais des paramètres différents. Ici, il s'agit de rédéfinir (override) dans la classe héritée une méthode de la classe de base.

    slayer418: ça se fait comme ça :
    Par exemple, supposons que la classe A ait une méthode X avec la signature suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Overridable Sub X(int i)
    (Overridable indique que la méthode peut être redéfinie)
    Si une classe B hérite de A, elle peut redéfinir la méthode X :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Overrides Sub X(int i)
       ...
    End Sub
    (Overrides indique qu'il s'agit d'une redéfinition de la méthode)

  3. #43
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 11
    Points
    11
    Par défaut
    Ca semble tellement simple à vous voir écrire mais ...
    Je comprend pas comment faire...


    Edit: ca parait con... j'aurait jamais crue que se serait si dure que ca changer l'icone des fichier.

  4. #44
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par slayer418 Voir le message
    Ca semble tellement simple à vous voir écrire mais ...
    Je comprend pas comment faire...
    Euh... tu sais ce que c'est que l'héritage quand même ? Sinon, je te conseille vivement de suivre un cours sur VB.NET, et sur la programmation orientée objet en général. Sinon tu n'arriveras pas à t'en sortir, il te manquerait des notions trop importantes pour être ignorées.

  5. #45
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 11
    Points
    11
    Par défaut
    Bah peut-etre que le mot héritage me dit rien mais que je m'en sert.

  6. #46
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par slayer418 Voir le message
    Bah peut-etre que le mot héritage me dit rien mais que je m'en sert.
    Le mot-clé "Inherits", ça te parle ? Si ce n'est pas le cas, tu ne risques pas d'utiliser l'héritage...

  7. #47
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 11
    Points
    11
    Par défaut
    Ouais j'ai déja vue ca dans des codes mais je sais pas à quoi ca sert vraiment... lol, je vous jure que je m'adapte vite , il suffit qu'on m'explique.

  8. #48
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par slayer418 Voir le message
    Ouais j'ai déja vue ca dans des codes mais je sais pas à quoi ca sert vraiment... lol, je vous jure que je m'adapte vite , il suffit qu'on m'explique.
    Je veux bien croire que tu t'adaptes vite, mais c'est un concept qui ne s'explique pas comme ça en 5 minutes... Il y a déjà plus de 40 messages dans cette discussion, dont une bonne partie est liée au fait qu'il te manque les bases pour comprendre les réponses qu'on te donne. De plus, le forum n'est pas destiné à donner des cours, mais à trouver des solutions sur des problèmes précis.

    Donc j'insiste, il faut vraiment que tu suives un cours ! Il y a tout ce qu'il faut ici. Reviens quand tu en sauras plus sur la question, et là on pourra t'aider...

  9. #49
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 11
    Points
    11
    Par défaut
    OK!! je comprend
    j'ai marquer :
    dans une classe pis j'avais accès aux Controls de Form1, genre , Textbox1,Textbox2...ect.

    Je comprend, ca l'établie un partage.

    Moi j'utilise pas la classe , BCmDev, j'ai compiler le projet du lien que tu m'a donner se qui à créé Edanmo.ShellExtension.dll que j'ai référencé dans mon projet.

  10. #50
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par slayer418 Voir le message
    Je comprend, ca l'établie un partage.
    Mauvaise réponse
    Enfin, d'une certaine manière, c'est vrai, mais c'est beaucoup plus complexe que ça...

    Moi j'utilise pas la classe , BCmDev, j'ai compiler le projet du lien que tu m'a donner se qui à créé Edanmo.ShellExtension.dll que j'ai référencé dans mon projet.
    Justement, il faut que tu crées une classe !

    Comme je te l'ai dit, je ne vais pas te faire ici un cours sur la programmation objet. Il y en a partout sur le net, à commencer par ce site. Si tu ne fais pas l'effort de les lire, je ne vois pas pourquoi on ferait l'effort de t'aider.

  11. #51
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 11
    Points
    11
    Par défaut
    Bah la comment ca, je comprend...
    Je veux pas de cours , je veux de l'aide...

    Je sais débrouiller et je comprend vite.
    Mais VB rhyme pas avec PHP(bah dans le fond oui mais ... ) alors j'ai besoin d'aide. .

    Se que je comprend c'est que BCmDev pensais que j'utilisais la classe de Edanmo direct dans mon projet mais moi j'ai compiler le Shell Extension (Le lien qui ma donner et qui contient la classe Edanmo)

  12. #52
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 11
    Points
    11
    Par défaut
    Les mecs, ne m'abandonnez pas comme ça , j'ai toujours un problème et ce n'est pas dû à mon manque de savoir, j'en sais quand même en masse.

    Allez BCmDev SVP élabore un peu plus tes propos SVP, il faut que je réussisse!!

  13. #53
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Points : 553
    Points
    553
    Par défaut
    Tout d'abord je m'excuse pour avoir écrit cette horreur : il s'agit bien de redéfinition de la méthode OnExtractIcon et pas de surcharge.
    slayer418, je te propose un petit tutoriel pour une extension du shell qui affiche une icône différente suivant qu'un fichier d'extension "customExtension" est vide ou non :

    1 - création d'un nouveau projet, que tu enregistres pour COM (dans les propriétés du projet, onglet relatif à la compilation). Tu références Edanmo.ShellExtesions.
    2 - tu crées la classe suivante :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    Option Explicit On
    Option Strict On
     
    Imports System
    Imports System.Drawing
    Imports Microsoft.VisualBasic
    Imports Edanmo.ShellExtensions
     
    Namespace CustomShellExtension
        < _
           ExtensionFileTypes(".customExtension"), _
           ComClass(CustomShellExtension.ClassId, CustomShellExtension.InterfaceId, CustomShellExtension.EventsId) _
        > _
         Public Class CustomShellExtension
            Inherits Edanmo.ShellExtensions.IconHandlerBase
     
            Public Const ClassId As String = "771B82BB-5A8C-43f0-B3E0-E3D25A1F7F95"
            Public Const InterfaceId As String = "F856C01B-36DE-4b7b-8EF4-2AE03CB90548"
            Public Const EventsId As String = "1C500ECD-EAC3-4ddd-9F34-AEC22AEF1AE9"
     
            Public Overrides Sub OnExtractIcon(ByVal Filename As String, ByVal IconIndex As Integer, ByRef LargeIcon As IntPtr, ByRef SmallIcon As IntPtr, ByVal LargeSize As Integer, ByVal SmallSize As Integer)
     
                Dim currentFileInfo As New System.IO.FileInfo(Me.Filename)
                Dim imagePath As String = "C:\ImageFull.bmp"
                If (currentFileInfo.Length = 0) Then
                    imagePath = "C:\ImageEmpty.bmp"
                End If
                Dim Image As New Bitmap(imagePath)
                Dim Large, Small As Bitmap
     
                ' Create a large and small thumbnail
                Small = DirectCast(Image.GetThumbnailImage(SmallSize, SmallSize, Nothing, IntPtr.Zero), Bitmap)
                Large = DirectCast(Image.GetThumbnailImage(LargeSize, LargeSize, Nothing, IntPtr.Zero), Bitmap)
     
                ' Convert the thumbnails to icons
                LargeIcon = Large.GetHicon()
                SmallIcon = Small.GetHicon()
     
                Small.Dispose()
                Large.Dispose()
                Image.Dispose()
     
            End Sub
     
            Public Overrides Function OnGetIconLocation(ByRef IconFile As String, ByRef IconIndex As Integer, ByVal Flags As Edanmo.ShellExtensions.IconHandlerFlags) As IconHandlerReturnFlags
                Return IconHandlerReturnFlags.PerInstance Or IconHandlerReturnFlags.DontCache
            End Function
     
        End Class
    End Namespace
    3 - tu compiles.
    4 - tu peux voir que j'utilise les chemins "C:\ImageFull.bmp" et "C:\ImageEmpty.bmp". Tu les changes afin de pointer vers des images qui te conviennent et qui existent.
    5 - tu crées deux fichiers de test : empty.customExtension et full.customExtension. Tu laisses le fichier empty.customExtension vide et tu écris un peu de texte dans full.custmExtension.

    Tu remarqueras que l'extension cible est indiquée via l'attribut ExtensionFileTypes et que j'ai défini des GUIDs (à redéfinir pour tes propres extensions).

    L'exemple est on ne peut plus trivial. Il est notamment évident que la gestion des icônes ne doit pas se faire ainsi.

    Voilà, je pense que c'est clair, fais-moi un retour. Ce n'est vraiment pas compliqué et tu peux dire un grand merci à Eduardo A. Morcillo.

  14. #54
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 11
    Points
    11
    Par défaut
    Merci encore une fois de m'aider!!
    Nouveau Problème, et petit information, j'utilise VB.Net Express 2008.
    Bon voila tout se que j'ai fait:
    1 - J'ai créé un nouveau projet de type Bibliotheque de Classe, que j'ai enregistré pour COM (dans les propriétés du projet, onglet relatif à la compilation). et j'y ai référencé Edanmo.ShellExtensions.

    J'ai pas trouver rien en rapport avec COM dans l'onglet "Compilation" dans les propriétés du projet.


    2 - J'y ai mit la Classe

    3 - J'ai changer le chemin de "C:\ImageFull.bmp" et "C:\ImageEmpty.bmp" (Par d'autre image bmp).

    4 - J'ai compilé, se qui ma donné un fichier DLL portant le nom de mon projet.

    5 - J'ai créé deux fichiers de test : empty.customExtension et full.customExtension. J'ai laissé le fichier empty.customExtension vide et j'ai écris un peu de texte dans full.custmExtension mais ils n'ont pas changé d'icone.

    Donc j'en conclu que j'ai fait quelque chose pas correctement , je suspect l'Étape 1 avec L'enregistrement pour COM.

    Mais je vois toujours pas comment ca va me permet dans mon programme de pouvoir changer l'icone d'un fichier spécifier.

    Moi se que j'aimerais en final c'est que j'utilise SHChangeIconDialogW pour choisir un nouvelle icone pour le fichier.

  15. #55
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Points : 553
    Points
    553
    Par défaut
    Citation Envoyé par slayer418 Voir le message
    J'ai pas trouver rien en rapport avec COM dans l'onglet "Compilation" dans les propriétés du projet.
    Dans la version anglaise : onglet Compile, checkbox Register for COM interop.
    Si tu veux vérifier que ton extension est bien déployée, va consulter la base de registres : clef HKEY_CLASSES_ROOT\.customExtension\shellex\IconHandler, valeur par défaut = {771B82BB-5A8C-43f0-B3E0-E3D25A1F7F95}.

    Une fois que tu auras compris comment cela fonctionne, il te sera facile de faire une interface de paramétrage de ton extension et de gérer l'icône à afficher suivant ce paramétrage dans OnExtractIcon.

    Tu es en horaires décalés ou dans un pays éloigné ?

  16. #56
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Je sais pas si c'est pareil dans VB Express, mais dans Visual C# Express 2008 en français, l'onglet s'appelle "Générer", et la checkbox "Inscrire pour COM Interop". Et il faut faire défiler la scrollbar pour voir l'option apparaître... à moins bien sûr d'avoir un très grand écran

  17. #57
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 11
    Points
    11
    Par défaut
    Apres mainte recherche dans les propriétés du Projet , j'en conclu que la checkbox 'Inscrire pour COM Interop' n'est pas présante.

    Pourtant j'ai lu à plusieurs endroit des gens l'utilisait...


    Oh et je suis du Canada, Quebec.

  18. #58
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Ben t'as pas dû bien chercher alors... cette checkbox existe sous Visual C# Express 2008 et sous Visual Studio 2008 (aussi bien pour les projets C# que VB).
    Donc ça m'étonnerait que ça n'existe pas pour VB Express 2008 !
    (cf. pièce jointe : projet "bibliothèque de classes" en VB.NET sous VS2008)

  19. #59
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 11
    Points
    11
    Par défaut
    Bon regarde , j'ouvre Visual Basic 2008 Express et je créer un projet de Classe et je vais exactement où ton image indique et je n'ai pas de checkbox 'Inscrire pour COM Interop'.

    Je n'ai pas VS, mais j'ai, séparément, VB.Net 2008 et C# 2008.

  20. #60
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par slayer418 Voir le message
    Bon regarde , j'ouvre Visual Basic 2008 Express et je créer un projet de Classe et je vais exactement où ton image indique et je n'ai pas de checkbox 'Inscrire pour COM Interop'.

    Je n'ai pas VS, mais j'ai, séparément, VB.Net 2008 et C# 2008.
    Ben là je comprends pas... très bizarre cette affaire
    De toutes façons, tu peux t'en sortir autrement je pense. Dans l'onglet Application, clique sur le bouton "Assembly information" et coche la check-box "Make assembly COM-visible". Ensuite, une fois compilé, tu devrais pouvoir l'inscrire manuellement avec regsvr32.exe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    regsvr32.exe /i TaDll.dll
    NB: ce que je viens de proposer est très théorique, je ne l'ai pas testé et je ne peux pas garantir que ça va marcher...

Discussions similaires

  1. [XL-2003] Changer icone d'un fichier excel
    Par toinou28 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/05/2009, 13h35
  2. Changer l'icone d'UN fichier excel
    Par Speed41 dans le forum Excel
    Réponses: 7
    Dernier message: 26/03/2009, 10h58
  3. [HTML] changer d'icone pour un fichier HTML
    Par Cuenod dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 22/02/2008, 23h05
  4. Changer l'icone d'un fichier compilé (exe)
    Par pitizone dans le forum MATLAB
    Réponses: 5
    Dernier message: 05/04/2007, 09h54
  5. [VB6] Changer l'icone d'un fichier
    Par Asdorve dans le forum VB 6 et antérieur
    Réponses: 33
    Dernier message: 12/05/2006, 14h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo