Einzelnen Beitrag anzeigen

mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Icons von spicial verzeichnisen bekommen

  Alt 19. Aug 2006, 12:08
tut mir leid ich habe gestern leider die frage vollkommen falsch gestellt. die icons bekomme ich auch ohne PitmIDlist weil damit kenne ich mich überhaupt nicht aus(leider) und ich finde auch nichts brauchbars das aussieht wie ein tutorial oder so mit den ich was anfangen könnte.

Zum icon problem: das habe ich mit hilfer diese funktion(die ich aus diesem forum habe) gelöst:
Delphi-Quellcode:
function GetIndex(Datei:String):integer;
var
  SFI: TSHFileInfo;
  SysIL, Flags: Cardinal;
  i,z:integer;
  ext,ext2:String;
begin

  Result := -1; z:=-1;
  // Die erweiterung in kleine buchstaben umwandeln
  ext:=LowerCase (extractFileExt(datei));
  // Schauen ob das lezte icon noch passt
  if (index >-1) and (ext <> '') then
    ext2:=LowerCase(iconListIndex[index].ext);
    // Wenn nicht neue suchen
  if (ext <> ext2) then
    index:=-1;

 // in der IconListIndex schauen ob das geuchte icon schon vorhanden ist
  if index = -1 then begin
    for i:=0 to high(iconListIndex) do begin
      ext2:='';
      ext2:=iconListIndex[i].ext;
      // nach schauen ob ein eintrag passt und dabei unterscheiden ob sich um eine datei oder ein verzeichnis handelt
      if (ext = ext2) and (ext2 <> '') then begin
        // In Z wird der index zum icon gespeichert !
        z:=iconListIndex[i].index;
        break;
      end;
    end;
  end;

  // Wurde das icon schonmal verwendet dann wird das hier nicht ausgefürht und ich spare zeit
  if z = -1 then begin
    // index ein höhrer zählen(weil der ist ja noch -1)
    if index +1 > 6 then
      inc(index)
    else // ist der index+1 größer als 6 dann wieder auf 0 stellen
     index:=0;

    // Die erweiterung in kleine buchstaben umwandeln und in die liste speichern
    iconListIndex[index].ext:=LowerCase(extractFileExt(datei));

  // Windows mitteiln was ich haben möchte, in meinem fall nur den sysiconindex und die Smallicon
    Flags := SHGFI_SYSICONINDEX or SHGFI_SMALLICON;
    // Infos anfordern
    SysIL := SHGetFileInfo(@Datei[1] , 0, SFI, SizeOf(SFI), Flags);
    // Wenn gefunden den index entsprechend eintragen
    if SysIL <> 0 then begin
      iconListIndex[index].index:=SFI.iIcon;
      z:=SFI.iIcon;
     end;
  end;
  // z zurückgeben
  Result := z;
  // Sysil evlt. wieder freigeben
  DestroyIcon(SysIL);
end;
damit hole ich mir den index(wie gesagt der kern stammt aus diesem forum ich habe es nur etwas verändern)
damit nicht alle icons gesucht werden müssen führer ich ein liste mit den zulestzt 5 gefunden:
Delphi-Quellcode:
  tIconIndex = record
    index:Integer;
    ext:String;
    test:Cardinal;
  end;
Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
var
  hImgSm,
  hImgBig : HIMAGELIST;
  fi : TSHFileInfo;
begin
  SetLength(Files,0);
  ListView1.Items.Count:=20;
  DG:=0;
  GG:=ListView1.Height+listview1.Width;
  // Imageliste mit kleinen Symbolen ermitteln
  hImgSm := HIMAGELIST(SHGetFileInfo('',0,fi,sizeof(fi),
    SHGFI_SYSICONINDEX or SHGFI_SMALLICON));
  // und an die Imageliste auf der Form übergeben
  if(hImgSm <> 0) then
    ilSmall.Handle := hImgSm;

  // Imageliste mit großen Symbolen ermitteln
  hImgBig := HIMAGELIST(SHGetFileInfo('',0,fi,sizeof(fi),
    SHGFI_SYSICONINDEX or SHGFI_ICON));
  // und an die Imageliste auf der Form übergeben
  if(hImgBig <> 0) then
    ilBig.Handle := hImgBig;
  SetLength(iconListIndex,6);
und bei den imagelist die Shareimages auf true schalten und die namen anpassen.....
ich glaube das war jetzt alles !

vielen dank für eure hilfe !
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat