Thema: Delphi Icons aus Shell32.dll

Einzelnen Beitrag anzeigen

MathiasSimmack
(Gast)

n/a Beiträge
 
#12
  Alt 13. Jul 2002, 14:51
@Chris: Nö.

@Tpercon: Wenn du unter dem Imageindex 48 bleibst, dann kannst du die Icons getrost verwenden. Soweit ich das gesehen habe, sind diese identisch. Insofern dürfte es bei dir (Laufwerks-Icons) keine Probleme geben.

Generell wäre aber sicher sakuras Beitrag interessant, weil diese Variante unabhängig von eigenen Zugriffen auf die "shell32.dll" ist. Ich habe mir mal die Freiheit genommen, den für dich wahrscheinlich wichtigen Teil zu extrahieren. sakura wird hoffentlich nicht schimpfen.

Folgendes (gebasteltes ) Beispiel liest die vorhandenen Laufwerke mit den korrekten Icons in eine ListView ein. Die Routinen "DriveExists" und "DriveType" stehen in der DP-Library und sind -natürlich!- auch von sakura:

Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  i : integer;
  FileInfo: TSHFileInfo;
  ImageListHandle: THandle;
  aIcon: TIcon;
begin
  for i := 0 to 25 do
    if(DriveExists(i)) then
      begin
        fillchar(FileInfo,sizeof(FileInfo),#0);
          ImageListHandle := SHGetFileInfo(pchar(CHR(i+65) + ':\'),
          0, FileInfo, sizeof(FileInfo), SHGFI_ICON or SHGFI_LARGEICON);

        try
          aIcon := TIcon.Create;
          try
            aIcon.Handle := FileInfo.hIcon;

            ListView1.Items.Add;
            ListView1.Items[ListView1.Items.Count-1].Caption   :=
              CHR(i+65) + ':\  (' + DriveType(i) + ')';
            ListView1.Items[ListView1.Items.Count-1].ImageIndex :=
              ImageList1.AddIcon(aIcon);
          finally
            FreeAndNil(aIcon);
          end;
        finally
          DestroyIcon(FileInfo.hIcon);
          ImageList_Destroy(ImageListHandle);
        end;
      end;
end;
Codebasis, Copyright by Sakura.
(Das nur, damit er mich nicht auf 10 Mio US-Dollar verklagt. )

<Edit>

"ShellAPI" und "CommCtrl" (für ImageList_Destroy) nicht vergessen! Außerdem sollte die Imageliste natürlich die Maße 32x32 besitzen. Andernfalls kann man aber auch das Flag SHGFI_SMALLICON benutzen.

Hatte ich doch glatt vergessen zu erwähnen.

</Edit>


Gruß,
Mathias.
  Mit Zitat antworten Zitat