Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > PopupMenu выделение по меню по умолчанию


Автор: Michrutka 8.12.2009, 16:15
Доброе время суток!
Подскажите пожалуйста в чем может быть проблема:
я отображаю иконку в трее с помощью TNotifyIconData.
привязываю по клику Popupmenu
и хочу выделить одно поле жирным (по умолчанию)
делаю это с помощью SetMenuItemInfo(...)
код:
Код

//MainPopupMenu - требуемое Popupmenu
//NGraph - требуемый пункт меню
MENUITEMINFO MIInfo;
MIInfo.cbSize = sizeof (MENUITEMINFO);
MIInfo.fMask =  MIIM_STATE;
MIInfo.fState = MFS_DEFAULT;

if (SetMenuItemInfo(MainPopupMenu->Handle,NGraph->MenuIndex ,true ,&MIInfo) == 0){
                MessageBoxA(NULL, SysErrorMessage(GetLastError()).c_str(), "Ошибка!", 16);
}
DrawMenuBar(MainPopupMenu->Handle);


Никакая ошибка не генерится, но и ничего не выделяется.
решил проверить выставляется ли свойство у пункта меню:

Код

MENUITEMINFO MI;
MI.cbSize = sizeof (MENUITEMINFO);
if (GetMenuItemInfo(MainPopupMenu->Handle,NGraph->MenuIndex ,true ,&MI) == 0){
                MessageBoxA(NULL, SysErrorMessage(GetLastError()).c_str(), "Ошибка!", 16);
}
if(MI.fState == MFS_DEFAULT){
        ShowMessage("Default");}
else{
        ShowMessage("No Default");
}


выскакивает, что явлеется(то есть "Default")
в чем ожет быть проблема, подскажите, пожалуйста, - почему не выделяет?
заранее спасибо!

Автор: shklowsky 8.12.2009, 16:46
попробуй:
1  занулять структуру при объяве:  MENUITEMINFO MIInfo={sizeof(MENUITEMINFO)};
2  заполнить поле fType:   MIInfo.fType=MFT_STRING;

Автор: Michrutka 8.12.2009, 16:57
Цитата(shklowsky @ 8.12.2009,  16:46)
попробуй:
1  занулять структуру при объяве:  MENUITEMINFO MIInfo={sizeof(MENUITEMINFO)};
2  заполнить поле fType:   MIInfo.fType=MFT_STRING;

Не-а. не помогло(

Автор: shklowsky 8.12.2009, 17:16
 а вот так?
Цитата


The SetMenuDefaultItem function sets the default menu item for the specified menu.

BOOL SetMenuDefaultItem(

    HMENU hMenu,  
    UINT uItem,  
    UINT fByPos    
   );    
 

Parameters

hMenu

Handle to the menu to set the default item for.

uItem

Identifier or position of the new default menu item or - 1 for no default item. The meaning of this parameter depends on the value of fByPos.

fByPos

Value specifying the meaning of uItem. If this parameter is FALSE, uItem is a menu item identifier. Otherwise, it is a menu item position.



и, видимо, TrackPopupMenu вместо DrawMenuBar

Автор: Michrutka 8.12.2009, 17:34
Не-а. тот же результат.
говорит, что все успешно, но при этом не выделяет.
Спасибо =)

Автор: shklowsky 8.12.2009, 17:44
тогда хз что токое.

Код


void __fastcall TForm1::Button1Click(TObject *Sender)
{
PopupMenu1->Items->Find("abc")->Default=true;
PopupMenu1->Popup(Left+100,Top+50);
}


выделяется.

Автор: Michrutka 8.12.2009, 17:53
Мда( 
самый простой путь как всегда - самое лучшее и нечего лезть в Апи.

shklowsky, Спасибо!
так:
Код

NGraph->Default = true;

работает.
а вот почему апишные не хотят....вопросик.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)