developing a file explorer

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
M_HoeperAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

JimBob091197Commented:
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
JimBob091197Commented:
P.S.  Add ShellApi to uses clause.
0
ZifNabCommented:
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
Cloud Class® Course: Microsoft Office 2010

This course will introduce you to the interfaces and features of Microsoft Office 2010 Word, Excel, PowerPoint, Outlook, and Access. You will learn about the features that are shared between all products in the Office suite, as well as the new features that are product specific.

ZifNabCommented:
Sorry, had a little delay. Didn't saw answer of JimBob.
0
M_HoeperAuthor Commented:
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
JimBob091197Commented:
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
M_HoeperAuthor Commented:
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
JimBob091197Commented:
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

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Delphi

From novice to tech pro — start learning today.