Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

developing a file explorer

Posted on 1998-01-28
8
Medium Priority
?
165 Views
Last Modified: 2010-04-04
While developing an file explorer I have problems extracting the small icon of the associated executable file.

The large on wasn't difficult: You only have to use the api call EXTRACTASSOCIATEDICON and you will get an iconhandle. The system metrics define the size of the returned icon. This ist 32x32 with normal screen resolution.

Thanks

Marc
0
Comment
Question by:M_Hoeper
  • 4
  • 2
  • 2
8 Comments
 
LVL 5

Expert Comment

by:JimBob091197
ID: 1357712
Hi

You can use ShGetFileInfo to get large & small icon (and other stuff too).

E.g.
var
  shfi: TShFileInfo;
  Ico: TIcon;
  Filename: string;
begin
  Filename := 'C:\Autoexec.bat';

  // Get normal (32*32) icon.
  FillChar(shfi, SizeOf(TShFileInfo), 0);
  ShGetFileInfo(PChar(Filename), 0, shfi, SizeOf(TShFileInfo), SHGFI_ICON);
  Ico := TIcon.Create;
  Ico.Handle := shfi.hIcon;

  // Do something with icon, e.g. add to 32*32 TImageList:
  //imgLarge.AddIcon(Ico);

  Ico.Free;

  // Get small (16*16) icon.
  FillChar(shfi, SizeOf(TShFileInfo), 0);
  ShGetFileInfo(PChar(Filename), 0, shfi, SizeOf(TShFileInfo), SHGFI_ICON or SHGFI_SMALLICON);
  Ico := TIcon.Create;
  Ico.Handle := shfi.hIcon;

  // Do something with icon, e.g. add to 16*16 TImageList:
  //imgSmall.AddIcon(Ico);

  Ico.Free;



Regards,
JB
0
 
LVL 5

Expert Comment

by:JimBob091197
ID: 1357713
P.S.  Add ShellApi to uses clause.
0
 
LVL 8

Expert Comment

by:ZifNab
ID: 1357714
Doesn't this works :

uses ShellApi;

procedure TForm1.Button1Click(Sender: TObject);
var
  IconIndex : word;
  h : hIcon;
begin
  IconIndex := 0;
  h :=
    ExtractAssociatedIcon(hInstance,
                        'C:\WINDOWS\NOTEPAD.EXE',
                         IconINdex);

  DrawIcon(Form1.Canvas.Handle,
             10,
             10,
             h);

Zif.
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 8

Expert Comment

by:ZifNab
ID: 1357715
Sorry, had a little delay. Didn't saw answer of JimBob.
0
 

Author Comment

by:M_Hoeper
ID: 1357716
Thanks for your answer.

SHGetFileInfo doesn't work with Windows NT (4) but my program have to run with NT.

I'm sorry that I didn't write it in my question.
0
 
LVL 5

Expert Comment

by:JimBob091197
ID: 1357717
ShGetFileInfo does work on NT 4 (but not 3.51).  I have just run a sample app on an NT 4 machine, and it didn't work 1st time.  Then (without changing any code!!) I recompiled it, and ran it again and it worked...  That is very odd.

The 1st time it didn't work, it didn't even add it to the image list (imgLarge.Count = 0).  Maybe it didn't get a valid icon handle back.  Unfortunately, I can't go back and check because every time I run it now it works fine...

JB
0
 

Author Comment

by:M_Hoeper
ID: 1357718
Oh, sorry. I looked into the help file of dephi3. They write that the SHGetFileInfo routine only works with win95.

Now, i tried a sample code and it works wonderfull... And I'm a bit confused.

Please answer the question again and you will get the 200 points.

I send the question to the windows experts, too. And they recommend to use the ExtractIconEx routine :-) This routine isn't included in the delphi help, but is integrated in the shellapi unit.

Thanks

Marc
0
 
LVL 5

Accepted Solution

by:
JimBob091197 earned 600 total points
ID: 1357719
You can use ExtractIconEx, but you need the name of the file that has the icon, which must be EXE, DLL or ICO.  With ShGetFileInfo, you can pass it ANY file (e.g. DOC), and it will return the associated icon.
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
Creating an auto free TStringList The TStringList is a basic and frequently used object in Delphi. On many occasions, you may want to create a temporary list, process some items in the list and be done with the list. In such cases, you have to…
This lesson discusses how to use a Mainform + Subforms in Microsoft Access to find and enter data for payments on orders. The sample data comes from a custom shop that builds and sells movable storage structures that are delivered to your property. …
When cloud platforms entered the scene, users and companies jumped on board to take advantage of the many benefits, like the ability to work and connect with company information from various locations. What many didn't foresee was the increased risk…
Suggested Courses

783 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question