Icons zur laufzeit erzeugen



  • Hi !

    Ich möchte das alle Files eines Dir. als Icons & Filenamen darunter auf meiner Form dargestelt werden. Jetzt weiss ich ja voher nicht wieviele Files in einem Dir. sind. Also möchte ich die die Icons je nach Bedarf erzeugen. Gibt es da eine geschickte Möglichkeit ? Kann man ausserdem irgendwie das Icon auslesen das Windows benutzt oder muss ich für jeden Dateityp eine Eigene Grafikdatei haben ? Kann man ausserem das Icon mit dem Label geschickt kombinieren so das man die quasi wie ein Objekt behandeln kann wenn man es zB verschieben möchte ? Hoffe auf Antworten 😉 Danke !!



  • .
      .
      .
      SHFILEINFO shFinfo;
      HIMAGELIST hImgList = NULL;
      hImgList = (HIMAGELIST)SHGetFileInfo( FName.c_str(),
                                            0,
                                            &shFinfo,
                                            sizeof( shFinfo ),
                                            SHGFI_ICON);
      TIcon *Icon;
      Icon=new TIcon;
      Icon->Handle=CopyIcon(shFinfo.hIcon);
      FImage->AutoSize=true;
      FImage->Stretch=false;
      FImage->Picture->Assign(Icon);
      delete Icon;
      FImage->Left=(ClientWidth-FImage->Width) / 2;
      FImage->Top=(ClientHeight-FImage->Height) / 2;
      .
      .
      .
    

    in FName (AnsiString steht der Name einer bel. Datei - mit ERWEITERUNG
    FImage ist eine Variable *TImage zur Anzeige.

    Das ist Teil einer Funktion bei meinem Prog. Liefert das Windows- verknüpfte Symbol.



  • Hmm danke das ist schonmal hervorragend - aber ich muss ha dieses FImage schon auf der Form haben wenn ich das nun aber für x Files machen will kann ich ja nicht auf gut Glück schonmal 10 oder so erstellen sondern muss evtl. im laufe des Programms mehr haben. Wie mache ich das ?



  • Z.B.:

    Du machst ne Box mit Rollbalken.

    Fuer jeden eintrag erzeugst Du DYNAMISCH ein TImage (oder eine spezielle, eigene Komponente - mit nem Image)
    Dem Image verpasst Du das Icon und setzt "Parent des Image" auf die Box
    Dann noch Left und Top passend zur Box einstellen - fertig.



  • Juhuu ! Das klappt soweit ! Aber wie kann ich so Sachen wie "OnClick" für die dynamisch erzeugten Images definieren ?



  • Also hab in der FAQ gelesen ich kann sowas machen wie Image[i]->OnClick=Image1Click;

    Das geht auch soweit aber wenn ich jetzt zB wenn eins der Images angeklickt wird den zugehörigen i Wert ausegeben will - wie mache ich das ? Kann ich das irgendwie übergeben ? Danke !



  • Keiner ? 😞



  • du kannst z.B. beim erstellen der Images Image->Tag einen Wert geben und diesen dann abfragen


Anmelden zum Antworten