Ikonki w TListView

0

Mogłby mi ktos powiedziec co jest nie tak ????? dlaczego nie pobiera mi ikonek odpowiednich dla plikow.
Zeby było jaśniej to prosze otworzyc Total Comandera i juz wszystko jasne, bo chyba widac ikonki.

Probuje no i nic,

//---------------------------------------------------------------------------
#define NO_WIN32_LEAN_AND_MEAN
#include <shlobj.h>

#include <vcl.h>

//-------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <ToolWin.hpp>
#include <ImgList.hpp>
#include <Menus.hpp>
#include <FileCtrl.hpp>
#include <ShellAPI.h>
#include <comObj.hpp>
//0-------------


#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
SHFILEINFO FileInfo;
THandle imageListHandle;
TIcon * ikonka;
TListItem *listItem;



//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}


//---------------------------------------------------------------------------
 class Rekord
 {
 public:
 String nazwa;
 String rozszerzenie;
 };
 //Rekord::Rekord()
 //{
 //nazwa="cos";
 //rozszerzenie="txt";
 //}



 //-------------------------------------------------------------------
 //------------------------------------------------------------------------
  HICON GetAssociatedIcon(String const AExtension, BOOL ASmall)
{

  TSHFileInfo Info;
  Cardinal Flags;

   if (ASmall)  // then
      Flags = SHGFI_ICON || SHGFI_SMALLICON || SHGFI_USEFILEATTRIBUTES || SHGFI_SYSICONINDEX ;
   else
      Flags = SHGFI_ICON || SHGFI_LARGEICON || SHGFI_USEFILEATTRIBUTES;

   SHGetFileInfo(AExtension.c_str(), FILE_ATTRIBUTE_NORMAL, &Info, sizeof(TSHFileInfo), Flags);
   return Info.hIcon;
}

//--------------------------------------------------------------------


 Rekord *get(TSearchRec sr)
 {
 Rekord *temp;
 temp=new Rekord;
 if(sr.Name!='.')
        {
 if((sr.Attr & faDirectory)!=0)  // jezeli katalog
 {
 temp->nazwa=sr.Name;
 }
 else
 {
 temp->nazwa=sr.Name;
 String rob=LowerCase(ExtractFileExt(sr.Name));
             if(rob.Length()>1)
               {
               rob=rob.Delete(1,1);
               }
 temp->rozszerzenie=rob;
 }
 return temp;
 }
 else

 return NULL;
 }
 //----------
 void clearList(TList *list)    //funkcja typu void jednoargumentowa ze wskaznikiem
                               //list do pokazywania na obiekt TList
{
 if(list->Count)                   //jezeli w liscie cos wogole jest
   {
   int i;                          //deklaracja zmiennej typu int

   for(i=0;i<list->Count-1;i++)    //za pomoca petli for przechodzimy po kolejnych
                                   //elementach listy zaczynajac od i=0 a konczac
                                   //na  ostatnim, czyli list->Count-1
      delete(list->Items[i]);      //przy pomocy operatora delete w sposob dynamiczny
                                   //zwalniamy pamiec poszczegolnych elementow list->Items[i]

  list->Clear();                   //czyszczenie listy przy pomocy Clear();
  }
}
 //------------
 void Dir(String sciezka,TList *list)
 {
 TSearchRec sr;
 Rekord *temp;
 clearList(list);
 temp=new Rekord();

     if(FindFirst(sciezka,faAnyFile,sr)!=NULL)
        {
        return;
        }
     temp=get(sr);
     list->Add(temp);

        while(FindNext(sr)==0)
              {
              temp=get(sr);
                if(temp!=NULL)  list->Add(temp);
              }

 }
 void TForm1::ListView(TList *list,TListView * tListView)
 {
   SHFILEINFO file;
     TSHFileInfo FileInfo;
     String link;
  if(list->Count)
    {
    int i;
    Rekord *dane;
    TListItem *item;

    tListView->Items->BeginUpdate();
    tListView->Clear();
    dane = new Rekord;
 
       for(i=0;i<=list->Count-1;i++)
          {
          dane = new Rekord;
          dane=(Rekord*)list->Items[i];
          item=tListView->Items->Add();
          item->Caption=dane->nazwa;
          item->SubItems->Add(dane->rozszerzenie);
////////////////////////////////////////////////////////////////////////////////////////
//////////////////     TU WŁAŚNIE TU    !////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////

          ikonka->Handle= GetAssociatedIcon("C:\\so\t.txt",true);  //      dane->rozszerzenie
                                               
// zamiast tego c:\\so.....sciezki  -   ExtractFileExt(dane->nazwa)
 //ikonka->Handle=     (ExtractFileExt(dane->nazwa),true);  //      dane->rozszerzenie
          //item->ImageIndex=33 ; //indeks_ikony(dane->nazwa,dane->rozszerzenie);

        /*
         TSHFileInfo FileInfo;
         SHGetFileInfo(dane->nazwa.c_str(), 0, &FileInfo, sizeof(FileInfo), SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_ICON);
             //      "C:\\so\\Word.doc"
         item->ImageIndex=FileInfo.iIcon;
         ShowMessage( FileInfo.iIcon);
         */



  /*
    //item->ImageIndex=imgList->AddIcon(ikonka);
    //imgList->AddIcon(ikonka);
    //item->ImageIndex=0; //imgList->Count-1;
      link=dane->nazwa;
     SHGetFileInfo(link.c_str(), 0, &FileInfo, sizeof(FileInfo), SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_ICON);
    item->ImageIndex = FileInfo.iIcon;
*/
///////////////////////////////////////////////////////////////////////////////////////////
//////////////    JAK WIDAC ROBILEM JAK SIE TYLKO DAŁO ////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////// NO  I NIC //////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////
          }

           //ShowMessage(imgList->Count-1);    //item->ImageIndex=imgList->Count-1;
           //ImageList1->AddIcon(ikonka);

   // tListView->ItemIndex=3;
    tListView->Items->EndUpdate();
    

    }
 }

void __fastcall TForm1::FormCreate(TObject *Sender)
{
ikonka = new TIcon;
tLista = new TList;
 TIcon * ikonka;

 TImage *imgList;
Dir("C:\\*.*",tLista);
ListView(tLista,ListView1);
ListView1->Columns->Items[0]->Width=200;
ListView1->Columns->Items[1]->Width=90;

}
//---------------------------------------------------------------------------

Przejrzałem dostępne materiały na forum :( no i nic !! [sciana] 

wiecej tu
<url>
http://4programmers.net/Forum/197743?h=gesiek20#197743</url>

0

Sprecyzuje pytanie

JAK POBRAC ikonke pliku:

  • znajac jego rozszerzenie (np. .doc )
    bądz
  • scieżke (np. c:\notatnik.txt)
0

Temat TABU ??

0
gesiek20 napisał(a)

Temat TABU ??

Chyba tak :D
Na tym dziale ludzie nie sa zbyt rozmowni :P

SH_FindExecute() // o ile dobrze pamietam nazwe funkcji, jest to z ShellApi

Pobiera jaki program jest skojazony z danym rozszezeniem, a to jak pobrac ikonke z programu exe to juz chyba wiesz :)

0
desperat napisał(a)
SH_FindExecute() // o ile dobrze pamietam nazwe funkcji, jest to z ShellApi

Pobiera jaki program jest skojazony z danym rozszezeniem, a to jak pobrac ikonke z programu exe to juz chyba wiesz :)

Fajnie ale w helpie nie moge tego znaleźć, Wiec prosze nie badz taki skromny i podaj przykladowe uzycie tej funkcji :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1