Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 26.07.2008, 16:56   #1
AidarBik
Форумчанин
 
Регистрация: 12.06.2007
Сообщений: 130
По умолчанию SubMenu

Не получается добавить сабменю в PopupMenu
Код:
    TrayMenu:=CreatePopupMenu;
    AppendMenu(TrayMenu, MF_STRING or MF_DEFAULT, 1, 'Учетные записи...');
    AppendMenu(TrayMenu, MF_SEPARATOR, 0, nil);
    AppendMenu(TrayMenu, MF_STRING, 2, 'Проверять каждые');
    //Следующие пункты - подменю
    AppendMenu(TrayMenu, MF_STRING or MF_POPUP {пробовал и MF_APPEND и MF_INSERT}, 3, '1 минуту');
    AppendMenu(TrayMenu, MF_STRING or MF_POPUP, 4, '2 минуты');
    AppendMenu(TrayMenu, MF_STRING or MF_POPUP, 5, '5 минут');
    AppendMenu(TrayMenu, MF_STRING or MF_POPUP, 6, '10 минут');
    AppendMenu(TrayMenu, MF_STRING or MF_SEPARATOR or MF_POPUP, 0, nil);
    AppendMenu(TrayMenu, MF_STRING or MF_POPUP, 7, 'Другое...');
    //Конец подменю
    AppendMenu(TrayMenu, MF_STRING, 13, 'О программе...');
    AppendMenu(TrayMenu, MF_STRING, 666, 'Выход');
    SetMenu(Wnd, TrayMenu);
AidarBik вне форума Ответить с цитированием
Старый 26.07.2008, 19:56   #2
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,234
Сообщение

Простой способ:
Код:
type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    Button1: TButton;
    PopupMenu1: TPopupMenu;
    N3: TMenuItem;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Procedure AddSubItm(Mi :TMenuItem; Cap :String);

implementation

{$R *.dfm}

Procedure AddSubItm(Mi :TMenuItem; Cap :String);
var Itm :TMenuItem;
begin {простая процедура для добавления пунктов}
 Itm := TMenuItem.Create(Mi);
 Itm.Caption := Cap;
 Mi.Add(Itm);
end;

procedure TForm1.Button1Click(Sender: TObject);
Var I :Byte;
begin
 For I:=1 To 25 Do
 begin
  AddSubItm(N2, Format('ПодМеню=%d', [I]));
  AddSubItm(N3, Format('ПодМеню=%d', [I]));
 end;
 TControl(Sender).Enabled := False;
end;
Alter вне форума Ответить с цитированием
Старый 27.07.2008, 10:54   #3
AidarBik
Форумчанин
 
Регистрация: 12.06.2007
Сообщений: 130
По умолчанию

Мне на WinAPI надо.
AidarBik вне форума Ответить с цитированием
Старый 27.07.2008, 12:15   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,540
По умолчанию

кажется для подменю надо создавать новое меню через вызов CreatePopupMenu и в нём создавать все эти пункты подменю. а у пункта "Проверять каждые" добавить флаг MF_POPUP и вместо двойки указать дескриптор этого созданного меню
pu4koff вне форума Ответить с цитированием
Старый 27.07.2008, 12:22   #5
AidarBik
Форумчанин
 
Регистрация: 12.06.2007
Сообщений: 130
По умолчанию

Большое спасибо! Работает!
AidarBik вне форума Ответить с цитированием
Старый 28.08.2020, 21:42   #6
Android1
Форумчанин
 
Регистрация: 26.08.2010
Сообщений: 114
По умолчанию

Здравствуйте,

Подскажите, а зачем нужно CreatePopupMenu, если можно создать выпадающий список меню просто использую AppendMenu ?
То есть вот так:

Код:
HMENU My_Main_Menu_Bar = CreateMenu();
HMENU My_File_Menu = CreateMenu();
HMENU My_Help_Menu = CreateMenu();
 
//Добавим кнопки в само меню:
BOOL My_bool_AppendMenu1 = AppendMenuA(My_Main_Menu, MF_POPUP, (UINT_PTR)My_File_Menu, "File");
BOOL My_bool_AppendMenu2 = AppendMenuA(My_Main_Menu, MF_POPUP, (UINT_PTR)My_Help_Menu, "Help");
 
//Добавим выпадающий список в кнопку File:
 
BOOL My_bool_Append_to_File1 = AppendMenuA(My_File_Menu, MF_STRING, NULL, "Open");
BOOL My_bool_Append_to_File2 = AppendMenuA(My_File_Menu, MF_STRING, NULL, "Close");
Android1 вне форума Ответить с цитированием
Старый 30.08.2020, 10:34   #7
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 767
По умолчанию

Цитата:
Сообщение от Android1 Посмотреть сообщение
Подскажите, а зачем нужно CreatePopupMenu
Не совсем понятен вопрос.
CreatePopupMenu - это меню, которое вываливается, когда вы нажимаете правую кнопку мыши. А так же, это все подмеюшки.
CreateMenu - это меню, которое находится под заголовком окна - "файл, правка, вид, ...". Но когда вы нажимаете на эти пункты, то вам вываливаются менюшки, которые были созданы через CreatePopupMenu.
BLACK_RAIN вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PopupMenu + SubMenu tarasov Компоненты Delphi 6 09.10.2008 14:06


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Здесь нужно купить рекламу за 7 тыс руб в месяц! )
пишите сюда - alarforum@yandex.ru
ИКС 840