-
Всем привет... Не знаю, будет ли продолжение данной темы, однако...
-
Может есть у кого наработки по поводу сортировки элементов меню? Т.е. есть меню, глубина произвольная, число элементов произвольное. Надо отсортировать все меню в этом меню по алфавиту...
-
иногда пригодилось бы. Наработок нет, я вижу StrListEx-ы и создание нового меню (кстати, рабочая модификация меню в рантайме мне так и не удалась)
-
> Наработок нет, я вижу StrListEx-ы и создание нового меню Ничего против не имею, т.к. иногда главное - результат, но это способ через "одно место". Думаю оффтопа достаточно?..
Т.е. никто углубленно не работал с динамическими меню?
-
Всем привет... Нужна помощь. Глаз замылился, мозг кипит... Нужно новое видение темы. http://ifolder.ru/15309146Это проект рекурсивной сортировки меню. Затык в том, что функция InsertSubMenu, как-то так хитро добавляет SubMenu, что потом его не удалить. Если после запуска на форме кликнуть правой кнопкой, то выпадает исходное меню, затем один раз можно корректно отсортировать (т.е. сам механизм рекурсии работает верно), но вот потом, ни повторную сортировку, ни сброс к исходному меню сделать нельзя... Хелпми, помогите кто чем может...
-
у меня даже генерация твоя не пашет :) забей на кол (он зло), обратись к первоисточнику LoadMenuIndirect+ MENUITEMTEMPLATEHEADER+массив MENUITEMTEMPLATE как вариант уничтожай меню полностью и создавай заново отсортированое
-
В каком месте генерация не пашет?
-
f-11 и фсе :)
кста есть такая функция ModifyMenu мошт и сгодица
-
Как я только не пытался SubMenu двигать и ModifyMenu, и InsertMenu, и InsertMenuItem, и SetMenuItemInfo...не пашет...
А про LoadMenuIndirect я вообще не понял...он же вроде как из списка MenuItemTemplate создает меню. Или нет?
-
SetMenuItemInfo точней
-
> f-11 и фсе :) Весьма странно. ЕХЕшник в архиве работает, я ж его не с куста взял.
-
Пункт "по умолчанию", в меню может быть только один, поэтому moDefault там лишние и генерация не пашет, по крайней мере, в Win7. А сортировке проблема, если в подменю первый пункт тоже подменю.
-
LoadMenu грузит из ресурсов а LoadMenuIndirect создает из MenuTemplate который програмно создаеш
если не получается через api поменять итем например SetMenuItemInfo значит чето не так делаеш, тогда проще пересоздать полностью меню видимо
-
> по крайней мере, в Win7
тажа фигня
-
moDefault Пардон, перестарался...
-
> если не получается через api поменять итем например SetMenuItemInfo значит чето не так делаешЯ в курсе. Если делал так не было б проблемы. Вот код с SetMenuItemInfo: for i := 0 to Length(Rec) - 1 do
begin
if not Rec[i].IsSM then
begin
Form1.pm.Items[MenuID].Parent.InsertItem(-1,
PWideChar(Rec[i].Name),
nil,
[]);
Form1.pm.RemoveSubMenu(Rec[i].Id);
end
else
begin
ZeroMemory(@MII, SizeOf(MII));
MII.cbSize := MenuStructSize;
MII.fMask := MIIM_ID;
MII.wID := Form1.pm.Items[Form1.pm.Count - 1].MenuId + 1;
SetMenuItemInfoW( Form1.pm.Items[MenuID].Parent.Handle,
i,
TRUE,
MII );
end;
-
Если я правильно понимаю, то: 1. Изменяться будет родитель Form1.pm.Items[MenuID].Parent.Handle 2. Третий параметр = true, значит второй - это позиция 3. wID поменял, максимальный+1. 4. Вызов SetMenuItemInfoW результат Успешно. Элемент не двигался
-
SetMenuItemInfo ничего не двигает :) она изменяет информацию о пункте меню,надпись,чеканутость и тд и зачем по позиции,делай по идентификатору(false)
-
> SetMenuItemInfo ничего не двигает :) Тада на кой она мне? Или я совсем уже запутался?.. Вы задачу поняли?
-
ну смотри ты сортируеш меню,пральна делаеш это удалением\вставкой,пральна при этом чета там не работает тогда замени удаление\вставку обменом данными самих итемов нафига их удалять и создавать новые когда можно обменяться инфой (swap)
|