Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавить Bitmap в PopupMenu, API 
:(
    Опции темы
DriveSoftware
Дата 29.7.2004, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 17.3.2003

Репутация: нет
Всего: 4



Нужно получить иконку 16х16, преобразовываю ее в Bitmap и подставить в пункт PopupMenu, делаю вот так, но ничего не выходит:

Код

var  
 Bitmap: HBitmap;
 memDC, DC: hDC;
 Ico, Icon: HICON;
begin
 ExtractIconEx ('c:\windows\notepad.exe', 0, IcoL, Icon, 1);
 DC:=GetDC(GetDesktopWindow);  
 memDC:=CreateCompatibleDC ( DC );
 Bitmap:=CreateCompatibleBitmap ( DC, 16, 16 );
 SelectObject ( memDC, Bitmap );
 DrawIcon(memDC, 0, 0, Icon);
 ....
 SetMenuItemBitmaps(Popup, K, MF_BYPOSITION, Bitmap, Bitmap);
end;


Почему то ничего не вырисовываеться на пункте меню, пробывал в Bitmap подставить свой рисунок все ок, значит дело в преобразовании ICO>BMP.
Помогите...
PM MAIL WWW ICQ   Вверх
Петрович
Дата 29.7.2004, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Посмотри здесь


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
DriveSoftware
Дата 29.7.2004, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 17.3.2003

Репутация: нет
Всего: 4



Петрович

У меня консольное приложение, поэтому только API, на VCL я бы давно это сделал бы...
PM MAIL WWW ICQ   Вверх
Петрович
Дата 29.7.2004, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



В принципе, я в одной из своих программ делаю так:
Код
procedure DoWork (Path :String);
const
 faSpecial =  FILE_ATTRIBUTE_HIDDEN
           or FILE_ATTRIBUTE_SYSTEM
           or $00000008 // FILE_ATTRIBUTE_VOLUMEID
           or FILE_ATTRIBUTE_DIRECTORY
           or FILE_ATTRIBUTE_TEMPORARY;
 SHGetFileInfoFlags = (SHGFI_SYSICONINDEX or SHGFI_SMALLICON {or SHGFI_ICON});
var
 MenuInfo     :TMenuInfo;
 MenuItemInfo :TMenuItemInfo;
 miId       :Integer;
 FindData   :TWin32FindData;
 FindHandle :tHandle;
 Error      :Boolean;
 MousePos   :tPoint;
 Res        :Integer;
 FileInfo   :TSHFileInfo;
begin
 hW := CreateMyMenuCallbackWnd;
 hM := CreatePopupMenu();
 if  (hM = 0) or (hW = 0)  then  ShowError  else begin

   with  MenuInfo  do begin
     cbSize  := SizeOf(TMenuInfo);
     cyMax   := 0;
     fMask   := MIM_STYLE {or MIM_MENUDATA};
     dwStyle := MNS_AUTODISMISS or MNS_CHECKORBMP or MNS_DRAGDROP {or MNS_MODELESS} {or MNS_NOTIFYBYPOS}; // MIM_STYLE
     //dwMenuData := SHGetFileInfo('', 0, FileInfo, SizeOf(TSHFileInfo), SHGetFileInfoFlags); // MIM_MENUDATA
     //hbrBack         :=; // MIM_BACKGROUND
     //dwContextHelpID :=; // MIM_HELPID
   end;
   SetMenuInfo(hM,MenuInfo);

   FindHandle := Windows.FindFirstFile(PChar(Path), FindData);
   if   (FindHandle = INVALID_HANDLE_VALUE)  then  ShowError  else begin
     Path := ExtractFilePath(Path);
     Error := False;
     miId := -1;
     repeat // цикл по всем файлам
       if  (FindData.dwFileAttributes and faSpecial) = 0  then begin
         // файл включаемый в меню
         Inc(miId); // посчитаем его, и сохраним :)
         SetLength(Files,miId+1);
         Files[miId] := Path+FindData.cFileName;
         // получим параметры его иконки
         hIL := SHGetFileInfo(PChar(Files[miId]), 0, FileInfo, SizeOf(TSHFileInfo), SHGetFileInfoFlags);
         // заполним структуру описания итема меню
         with  MenuItemInfo  do begin
           cbSize := SizeOf(MENUITEMINFO);
           fMask  := 0 or MIIM_STRING or MIIM_ID or MIIM_BITMAP or MIIM_DATA {or MIIM_FTYPE};
           dwTypeData := FindData.cFileName;    // MIIM_STRING
           cch        := strlen(dwTypeData);    // ...
           wID        := miId;                  // MIIM_ID
           hbmpItem   := Cardinal(HBMMENU_CALLBACK); // MIIM_BITMAP
           dwItemData := FileInfo.iIcon;        // MIIM_DATA
           //fType      := MFT_OWNERDRAW;         // MIIM_FTYPE
         end;
         // добавим итем к меню
         if  not InsertMenuItem(hM,$FFFFFFFF,True,MenuItemInfo)  then begin
           ShowError;
           Error := True;
           Break;
         end;
       end;
     until not Windows.FindNextFile(FindHandle, FindData);
     Windows.FindClose(FindHandle);

     if  not Error  then begin
       GetCursorPos(MousePos);
       Res := Cardinal(
                TrackPopupMenuEx(hM, TPM_LEFTALIGN
                                    //or TPM_LEFTBUTTON
                                    //or TPM_RIGHTBUTTON
                                    or TPM_RETURNCMD
                                    //or TPM_NONOTIFY
                   ,MousePos.x,MousePos.y, hW, nil) );
       if  (Res = 0) and (GetLastError<>NO_ERROR)  then
         ShowError
       else begin
         SelectedItem := Res;
         EBox(PChar({Files[SelectedItem]} IntToStr(SelectedItem) ));
       end;
     end;

   end;

 end;
 DestroyMenu(hM);
 DestroyWindow(hW);
end;



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0727 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.