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>