Вопрос: Как получить все иконки которые есть в exe-файле?
Ответ :
code:
--------------------------------------------------------------------------------
typedef HICON* phIcon;
void __fastcall TForm1::Button1Click( TObject *Sender )
{
int numIcons;
phIcon pTheLargeIcons, pTheSmallIcons;
int LargeIconWidth;
int SmallIconWidth;
int SmallIconHeight;
int i, y, x, n;
TIcon *Icon;
Graphics::TBitmap *theBitmap;
if ( !OpenDialog1->Execute() )
return ;
numIcons = ExtractIconEx(
OpenDialog1->FileName.c_str(),
-1,
NULL,
NULL,
0 );
Caption = numIcons;
if ( numIcons > 0 ) {
try {
LargeIconWidth = GetSystemMetrics( SM_CXICON );
SmallIconWidth = GetSystemMetrics( SM_CXSMICON );
SmallIconHeight = GetSystemMetrics( SM_CYSMICON );
pTheLargeIcons = new HICON[ numIcons ];
pTheSmallIcons = new HICON[ numIcons ];
ZeroMemory( pTheLargeIcons, numIcons * sizeof( HICON ) );
ZeroMemory( pTheSmallIcons, numIcons * sizeof( HICON ) );
ExtractIconEx( OpenDialog1->FileName.c_str(), 0,
pTheLargeIcons, pTheSmallIcons, numIcons );
y = 0;
x = 0;
n = 0;
for ( int i = 0; i < numIcons; i++ ) {
if ( n * LargeIconWidth > (Width - LargeIconWidth) ) {
y += LargeIconWidth;
x = 0;
n = 0;
}
DrawIcon( Canvas->Handle,
x, y,
pTheLargeIcons[ i ] );
n++;
x = n * LargeIconWidth;
Icon = new TIcon;
theBitmap = new Graphics::TBitmap;
Icon->Handle = pTheSmallIcons[ i ];
theBitmap->Width = Icon->Width;
theBitmap->Height = Icon->Height;
theBitmap->Canvas->Draw( 0, 0, Icon );
Icon->Free();
Canvas->StretchDraw( Rect( i * SmallIconWidth,
300,
( i + 1 ) * SmallIconWidth,
300 + SmallIconHeight ),
theBitmap );
theBitmap->Free();
}
}
__finally
{
delete [] pTheLargeIcons;
delete [] pTheSmallIcons;
}
} else
ShowMessage( "No icons" );
}
--------------------------------------------------------------------------------
|