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

Langage Delphi Discussion :

Icone sur un Bitbtn via GetIconHandle


Sujet :

Langage Delphi

  1. #1
    Membre du Club Avatar de bionicleman
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Points : 66
    Points
    66
    Par défaut Icone sur un Bitbtn via GetIconHandle
    Bonsoir à tous,
    J'ai un problème depuis un moment :
    Je voudrais qu'à l'execution d'un OpenDialog l'icone du fichier (.exe) récupéré soit mise dans le Form1.BitBtn1.Glyph, j'ai ce code et après moultes et moultes essais j'abandonne et je post
    Uses et Variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Uses [...], Unit1;
    var h : string;
    Fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function TForm1.GetIconHandle(const P_FileName : string;
                                  const P_Modifier : integer): HIcon;
    var Sfi: TSHFileInfo;
    begin
      SHGetFileInfo(PChar(P_FileName),
                    0,
                    Sfi,
                    SizeOf(TSHFileInfo),
                    SHGFI_SYSICONINDEX or SHGFI_ICON or P_Modifier);
      Result := Sfi.hIcon;
    end;
    Procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TForm2.Btn1Click(Sender: TObject);
    begin
    if OpenDialog1.execute then
    h:=(opendialog1.Filename);
    bitbtn1.glyph.handle := GetIconHandle(h, SHGFI_SHELLICONSIZE);
    end;
    La source de la majorité des bugs sur Windows se situe entre le clavier et la chaise...

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Transforme ton icône en bitmap et assigne le au Glyph. En conservant ta fonction GetIconHandle, essaye ceci:

    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
     
    procedure IconToBitmap(hIcon: THandle; var ABmp:TBitmap);
    begin
      ABmp.Width := 32;
      ABmp.Height := 32;
      ABmp.PixelFormat := pf24bit;
      DrawIconEx(ABmp.Canvas.Handle, 0, 0, hIcon, 32, 32, 0, 0, DI_NORMAL);
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      hIcon: THandle;
      Bitmap: TBitmap;
    begin
      with OpenDialog1 do
      begin
        if Execute then
        begin
          Bitmap := TBitmap.Create;
          try
            hIcon := GetIconHandle(Filename, SHGFI_SHELLICONSIZE);
            IconToBitmap(hIcon, Bitmap);
            BitBtn1.Glyph := Bitmap;
          finally
            Bitmap.Free;
          end;
        end;
      end;
    end;
    @+ Claudius

  3. #3
    Membre du Club Avatar de bionicleman
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Points : 66
    Points
    66
    Par défaut
    Wow !
    Ca marche nikel !
    Sauf que je ne sais pas si c'est normal mais l'icone qui s'affiche dans le glyph est une 32*32 alors que je veux une 16*16.
    Normalement SHGFI_SHELLICONSIZE renvoie une icone 16*16 non ?

    [Edit]
    Je n'ai rien dit
    Encore merci Cl@udius
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      ABmp.Width := 16;
      ABmp.Height := 16;
      ABmp.PixelFormat := pf24bit;
      DrawIconEx(ABmp.Canvas.Handle, 0, 0, hIcon, 16, 16, 0, 0, DI_NORMAL
    [/Edit]
    La source de la majorité des bugs sur Windows se situe entre le clavier et la chaise...

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/09/2005, 19h23
  2. déplacé icone sur bureau
    Par suiss dans le forum Autres Logiciels
    Réponses: 12
    Dernier message: 02/09/2005, 18h08
  3. Connexion sur une base via BDE (pb de User Name)
    Par Sharky21 dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/12/2004, 10h31
  4. [MFC] mettre des icones sur un CTreeCtrl
    Par Toutouffe dans le forum MFC
    Réponses: 3
    Dernier message: 30/11/2004, 17h11
  5. [icone]Comment appliquer une icone sur le.exe
    Par JavaLeDirePartout dans le forum JBuilder
    Réponses: 7
    Dernier message: 24/07/2003, 17h28

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