C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[2812] [질문]이미지 리스트에 추가하기....
김봉만 [] 4568 읽음    2000-01-20 00:00

    TImageList *SmallImageList = new TImageList(this);
    TImageList *LargeImageList = new TImageList(this);

    SmallImageList->ShareImages = true;
    LargeImageList->ShareImages = true;
    SmallImageList->Handle = SHGetFileInfo("", 0, &IconInfo, sizeof(IconInfo),
                                              SHGFI_ICON | SHGFI_SMALLICON |
                                              SHGFI_SYSICONINDEX);
    LargeImageList->Handle = SHGetFileInfo("", 0, &IconInfo, sizeof(IconInfo),
                                              SHGFI_ICON | SHGFI_LARGEICON |
                                              SHGFI_SYSICONINDEX);

팁 트릭 란의 비트맵에서 아이콘 읽기 를 참조 하다가 잘 안되서 질문 올립니다...

위의 소스는 시스템의 이미지 리스트 입니다....

이렇게 하니깐 구해 지더군여....

팁란의 방식대로 하면 추가가 잘 되는데...

화일에서 읽어서 넣을려구하면 치명적 에러로 리부팅을 해야 합니다 T.T

도와 주소서....

코맨트가 마나서 지저분해 보이는것은 지난 이틀간의 눈물입니다.....-.-


다음은 제가 시도한 여러가지 입니다


/*
    char tmp[5];
    sprintf(tmp,"%d",LargeImageList -> Count );
    ShowMessage  (tmp);



    int IconSizeX = GetSystemMetrics(SM_CXICON);      SM_CXICONSPACING, SM_CYICONSPACING
    int IconSizeY = GetSystemMetrics(SM_CYICON);     SM_CXICON,SM_CYICON

    int IconSmallSizeX = GetSystemMetrics(SM_CXSMICON);    SM_CXSMICON,SM_CYSMICON
    int IconSmallSizeY = GetSystemMetrics(SM_CYSMICON);

TIcon *NewIcon = ExtractIcon(HInstance, "파일의 전체경로", 0);
ImageList1->AddIcon(NewIcon);
UINT ExtractIconEx(
  LPCTSTR lpszFile,        // file name
  int nIconIndex,          // icon index
  HICON *phiconLarge,      // large icon array
  HICON *phiconSmall,      // small icon array
  UINT nIcons              // number of icons to extract
);


BOOL DestroyIcon(
  HICON hIcon   // handle to icon
);
*/
    TIcon *NewIcon =  new TIcon;
    TIcon *NewSmallIcon =  new TIcon;
//    TIcon *ret =  new TIcon;
    HICON  * a = new HICON;
    HICON  * b = new HICON;

    char tmp[55];
    sprintf(tmp,"big:%d    small:%d",LargeImageList -> Count ,SmallImageList -> Count);
    ShowMessage  (tmp);
/*
        int sx,sy;
    ImageList_GetIconSize(LargeImageList,&sx,&sy);
    sprintf(tmp,"big:%d    small:%d",sx,sy);
    ShowMessage  (tmp);

    ImageList_GetIconSize(SmallImageList ,&sx,&sy);
    sprintf(tmp,"big:%d    small:%d",sx,sy);
    ShowMessage  (tmp);
*/

//     int ret = ExtractIconEx("C:\\Program Files\\Borland\\CBuilder3\\Lib\\res\\my.ico",
     int ret = ExtractIconEx("C:\\Program Files\\WinZip\\winzip32.exe",
                             0,
                             a,//NewIcon->Handle,
                             b,//NewSmallIcon->Handle,
                             1);
    sprintf(tmp,"%d",ret);
    ShowMessage  (tmp);
    if ( 1)
    {
        NewIcon->Handle = a,
        NewSmallIcon->Handle = b,

        LargeImageList ->AddIcon(NewIcon);
        SmallImageList ->AddIcon(NewSmallIcon);
    }
    sprintf(tmp,"big:%d    small:%d",LargeImageList -> Count ,SmallImageList -> Count);
    ShowMessage  (tmp);
//    delete  NewIcon;
//    delete  NewSmallIcon;

    // Create the "And" mask
    int IconSizeX = GetSystemMetrics(SM_CXICON);     // SM_CXICONSPACING, SM_CYICONSPACING
    int IconSizeY = GetSystemMetrics(SM_CYICON);     //SM_CXICON,SM_CYICON

    int IconSmallSizeX = GetSystemMetrics(SM_CXSMICON);   // SM_CXSMICON,SM_CYSMICON
    int IconSmallSizeY = GetSystemMetrics(SM_CYSMICON);

    Graphics::TBitmap * AndMask = new Graphics::TBitmap;
    AndMask->LoadFromFile("C:\\Program Files\\Borland\\CBuilder3\\Lib\\res\\my.ico");
//    AndMask->Monochrome = true;
    AndMask->Width = IconSmallSizeX;
    AndMask->Height = IconSmallSizeY;
    // Draw on the "And" mask
//    AndMask->Canvas->Brush->Color = clBlue;
//    AndMask->Canvas->FillRect(Rect(0, 0, IconSizeX, IconSizeY));
//    AndMask->Canvas->Brush->Color = clBlack;
//    AndMask->Canvas->Ellipse(4, 4, IconSizeX - 4, IconSizeY - 4);

    // Draw as a test
    // Create the "XOr" mask
    Graphics::TBitmap * XOrMask = new Graphics::TBitmap;
    XOrMask->LoadFromFile("C:\\Program Files\\Borland\\CBuilder3\\Lib\\res\\my.ico") ;

    XOrMask->Width = IconSmallSizeX;
    XOrMask->Height = IconSmallSizeY;
    // Draw on the "XOr" mask
//    XOrMask->Canvas->Brush->Color = clBlack;
//    XOrMask->Canvas->FillRect(Rect(0, 0, IconSizeX, IconSizeY));
//    XOrMask->Canvas->Pen->Color = clRed;
//    XOrMask->Canvas->Brush->Color = clRed;
//    XOrMask->Canvas->Ellipse(4, 4, IconSizeX - 4, IconSizeY - 4);

    // Draw as a test

    // Create a icon
    TIcon * Icon = new TIcon;
    TIconInfo IconInfo2;
    IconInfo2.fIcon = true;
    IconInfo2.xHotspot = 0;
    IconInfo2.yHotspot = 0;
    IconInfo2.hbmMask = AndMask->Handle;
    IconInfo2.hbmColor = XOrMask->Handle;
    Icon->Handle = CreateIconIndirect(&IconInfo2);

//    if ( (LargeImageList -> Count) != 469 )

//    TIcon * Icon = new TIcon;
//    Icon->LoadFromFile("C:\\Program Files\\Borland\\CBuilder3\\Lib\\res\\tmp.bmp");
//    LargeImageList ->AddIcon(Icon);
    SmallImageList ->AddIcon(Icon);

    sprintf(tmp,"big:%d    small:%d",LargeImageList -> Count ,SmallImageList -> Count);
    ShowMessage  (tmp);
   
    // Destroy the temporary bitmaps
    delete AndMask;
    delete XOrMask;
    // Free the icon
    delete Icon;
/*
    sprintf(tmp,"%d",LargeImageList -> Count );
    ShowMessage  (tmp);
*/

+ -

관련 글 리스트
2812 [질문]이미지 리스트에 추가하기.... 김봉만 4568 2000/01/20
2814     Re:[질문]이미지 리스트에 추가하기.... 김봉만 5050 2000/01/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.