Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Меню: при добавлении пунктов они становятся Disabled


GrayFace ©   (2005-12-29 12:25:00) 

Вот код:
var m:HMenu; mi:TMenuItemInfo;

  m:=GetMenu(hwnd);
  if m=0 then RaiseLastOSError;
  with mi do
  begin
    cbSize:=SizeOf(mi);
    fMask:=MIIM_ID or MIIM_TYPE or MIIM_SUBMENU;
    fType:=MFT_STRING;
    hSubMenu:=CreateMenu;
    wID:=$100;
    dwTypeData:='WoG Tools';
  end;
  if not InsertMenuItem(m, 4, true, mi) then RaiseLastOSError;
  m:=mi.hSubMenu;
   
   // Если брать уже существующее осн. меню, та же история
   
  if m=0 then RaiseLastOSError;
    with mi do
    begin
      fMask:=MIIM_ID or MIIM_TYPE or MIIM_STATE;
      wID:=$101;
      fState:=0;
      dwTypeData:='aaa';
      fType:=MFT_STRING;
      if not InsertMenuItem(m, 1, true, mi) then RaiseLastOSError;
    end;
  DrawMenuBar(hwnd);

По идее, пункт должен быть активным.


GrayFace   (2005-12-29 20:12:00) [1]

Спасибо. Теперь хоть ясно, что мой код правильный. С вашей функцией та же проблема. Значит, все сложнее.
Ситуация такова: У меня внедрина dll в чужое приложение, оконную процедуру подключил, теперь охота в меню добавить свои фичи.
Проверил - само приложение не disable'ит менюшку.

Что это может быть?

(вообще, приложение - редактор карт Heroes 3 WoG)


Rouse_   (2005-12-29 12:56:00) [2]

function CustomizeMenu(const Menu: HMENU): Boolean; stdcall;
const
 IDC_MENUITEM_CAPTION = 'CustomMenu from DLL';
 IDC_MENUITEM_CAPTION_LEN = Length(IDC_MENUITEM_CAPTION) + 1;
var
 Item: TMenuItemInfo;
 ID: Integer;
begin
 ZeroMemory(@Item, SizeOf(TMenuItemInfo));
 ID := GetMenuItemCount(Menu);
 with Item do
 begin
   cbSize := SizeOf(TMenuItemInfo);
   fMask := MIIM_TYPE or MIIM_ID;
   fType := MFT_SEPARATOR;
 end;
 Result := InsertMenuItem(Menu, ID, True, Item);
 if not Result then Exit;
 Inc(ID);
 with Item do
 begin
   cbSize := SizeOf(TMenuItemInfo);
   fMask := MIIM_TYPE or MIIM_ID;
   fType := MFT_STRING;
   Item.dwTypeData := PChar(IDC_MENUITEM_CAPTION);
   Item.cch := IDC_MENUITEM_CAPTION_LEN;
   Item.wID := ID;
 end;
 Result := InsertMenuItem(Menu, ID, True, Item);
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо