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

Composants VCL Delphi Discussion :

Récupérer l'icône d'un fichier quelle qu'il soit


Sujet :

Composants VCL Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 3
    Par défaut Récupérer l'icône d'un fichier quelle qu'il soit
    Bonjour,

    Comment faire pour récupérer l'icône d'un fichier ?

    Par exemple, mon application permet d'ouvrir tout type de fichier et pour se faire, sur ma form, a côté du chemin du fichier, je veux afficher un petit bouton dont l'icône est celle de l'exécutable qui permet d'ouvrir le fichier...

    Quelqu'un peu-il m'aider ?

    Merci d'avance,
    Grégory

  2. #2
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 703
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 703
    Par défaut
    Trouvé ca, je ne sais plus où (pas testé ):

    Je recupère l'icone associé au fichier texte par cette méthode:

    Code:
    function GetAssociatedIcon(const Ext: PChar): HICON;
    var
    Info: TSHFileInfo;
    begin
    SHGetFileInfo(Ext, FILE_ATTRIBUTE_NORMAL, Info, SizeOf(Info), SHGFI_ICON or SHGFI_SMALLICON or SHGFI_USEFILEATTRIBUTES);
    Result := Info.hIcon;
    end;


    procedure TForm1.Button1Click(Sender: TObject);
    var
    Ic: TIcon;
    begin
    Ic := TIcon.Create;
    Ic.Handle := GetAssociatedIcon('.txt');
    ImageList1.AddIcon(Ic);
    ImageList1.Draw(Image1.Canvas, 0, 0, 0, True);
    Ic.Free;
    end;
    Si ca peut t'aider ...

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 3
    Par défaut
    Bon, c'est pas évident, parce que après avoir récupéré le '.ico', il faut le transformer en '.bmp' pour pouvoir l'afficher dans un speedbutton...
    Je rame sur cette transformation.

    Merci pour l'info,
    Grégory

  4. #4
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 703
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 703
    Par défaut
    Pour le tranformer, passe par un TPicture.

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 21
    Par défaut
    Citation Envoyé par Poussier
    Bon, c'est pas évident, parce que après avoir récupéré le '.ico', il faut le transformer en '.bmp' pour pouvoir l'afficher dans un speedbutton...
    Je rame sur cette transformation.

    Merci pour l'info,
    Grégory
    Voici une procédure qui permet de convertir un TIcon en TBitmap :
    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
     
    procedure TIconToTBitmap(FIcon: TIcon;var FBitmap: TBitmap;FBackgroundColor: TColor);
    begin
    with FBitmap, Canvas do
         if Assigned(FIcon)
            then
              begin
              Width:=FIcon.Width;
              Height:=FIcon.Height;
              Brush.Color:=FBackgroundColor;
              FillRect(rect(0,0,Width,Height));
              Draw(0,0,FIcon);
              end
            else
              begin
              Width:=GetSystemMetrics(SM_CXICON);
              Height:=GetSystemMetrics(SM_CYICON);
              Brush.Color:=FBackgroundColor;
              FillRect(rect(0,0,Width,Height));
              end;
    end;

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 3
    Par défaut
    Ok, après avoir un peu galéré avec la taille du .ico 4*plus grande que celle du bmp, j'ai réussi à faire ce que je voulais
    A savoir : Récupérer le nom d'un fichier et placer l'icône qui servira à l'ouvrir dans un speedbutton.

    Voici le code :

    var
    Ic: TIcon;
    Bmp : TBitmap;

    function GetAssociatedIcon(const Ext: PChar): HICON;
    var
    Info: TSHFileInfo;
    begin
    SHGetFileInfo(Ext, FILE_ATTRIBUTE_NORMAL, Info, SizeOf(Info), SHGFI_ICON or SHGFI_SMALLICON or SHGFI_USEFILEATTRIBUTES);
    Result := Info.hIcon;
    end;

    Procedure TIconToTBitmap(FIcon: TIcon ; FBitmap : TBitmap);
    begin
    with FBitmap, Canvas do
    if Assigned(FIcon) then
    begin
    Width:=FIcon.Width div 2;
    Height:=FIcon.Height div 2;
    Brush.Color:=clWhite ;
    FillRect(rect(0,0,Width,Height));
    Draw(0,0,FIcon);
    end
    else
    begin
    Width:=GetSystemMetrics(SM_CXICON) div 2;
    Height:=GetSystemMetrics(SM_CYICON) div 2;
    Brush.Color:=clWhite ;
    FillRect(rect(0,0,Width,Height));
    end;
    end;


    begin
    // Affichage de la bonne icône dans le bouton
    Ic := TIcon.Create;
    bmp := TBitmap.Create;
    If Donnee_document<>nil then
    Ic.Handle := GetAssociatedIcon(Pchar(ExtractFileExt(extractfilename(Donnee_document.Nom))));
    TIconToTBitmap(Ic,bmp);
    speedbutton_open.Glyph := bmp;
    Ic.Free;
    bmp.Free;


    Merci à vous !!

    Grégory

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 25/02/2013, 13h25
  2. Récupérer l'icône associée à un fichier
    Par Thomas Lebrun dans le forum Contribuez
    Réponses: 0
    Dernier message: 29/12/2010, 10h55
  3. Récupérer l'icône associée à un fichier
    Par Thomas Lebrun dans le forum Contribuez
    Réponses: 0
    Dernier message: 28/12/2010, 23h23
  4. [SHELL] Icônes associées à des fichiers
    Par agh dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 09/04/2003, 17h04
  5. Réponses: 11
    Dernier message: 23/07/2002, 14h33

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