Вопрос: Как получить все иконки которые есть в 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" );
}



--------------------------------------------------------------------------------
	

Электронные Книги по компьютерным программам
На правах рекламы:
Логин
Пароль
Запомнить меня