Mattias Gaertner wrote 9 lines
On Tue, 1 Jul 2003 10:08:38 +0200
"Micha Nelissen" wrote:
>
> It first creates the children, then attaches to parent. Wouldn't it
> be more logical to do it the other way around?
Bottom-Up or Top-Down are both logical and should be supported by the
interfaces. But for readability and debugging I changed it.
Seems reasonable.
Show quoted text 7 lines
> First check/attach parent, then create children? I am asking this
> because win32object.attachmenu uses the parent of the parent and I
> am not sure whether it is initialized at all times, ie. the children
> are attached to parents.
What do you need to fix that?
I am wondering about the following piece of code from win32object.attachmenu:
---
{Following part fixes the case when an item is added in runtime
but the parent item has not defined the submenu flag (hSubmenu=0) }
if (Sender as TMenuItem).Parent.Parentnil then
begin
ParentOfParent := (Sender as TMenuItem).Parent.Parent.Handle;
with MenuInfo do begin
cbSize:=sizeof(MENUITEMINFO);
fMask:=MIIM_SUBMENU;
end;
GetMenuItemInfo(ParentOfParent, (Sender as TMenuItem).Command,
false, @MenuInfo);
if MenuInfo.hSubmenu=0 then // the parent menu item is not yet defined
with submenu flag
begin
MenuInfo.hSubmenu:=ParentMenuHandle;
SetMenuItemInfo(ParentOfParent, (Sender as TMenuItem).Command,
false, MenuInfo);
end;
end;
---
It says it fixes something. But:
1) It it retrieves menuitem if parentofparent, it should use it's parent command: (Sender as TMenuItem).Parent.Command.
2) All calls to InsertMenuItem (there is only 1) define menuinfo.hSubMenu := MenuHandle, which is always already created in CreateHandle. If I 'fix' item 1, it never gets to SetMenuItemInfo anymore, supporting this statement.
Any thoughts?
Micha.